151 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace gehGassi.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service für die Verwaltung von Entitäten
/// </summary>
/// <typeparam name="T">Typ des Service</typeparam>
public interface IService<T> where T : class
{
#region Get
/// <summary>
/// Gibt eine Entität anhand der eindeutigen Id zurück
/// </summary>
/// <param name="id">Id der Entität</param>
/// <returns>Entität oder null, wenn nicht gefunden</returns>
T Get(object id);
/// <summary>
/// Gibt eine Entität anhand der eindeutigen Id zurück
/// </summary>
/// <param name="id">Id der Entität</param>
/// <returns>Entität oder null, wenn nicht gefunden</returns>
Task<T> GetAsync(object id);
/// <summary>
/// Gibt alle Entitäten zurück
/// </summary>
/// <returns>Liste aller Entitäten</returns>
IEnumerable<T> GetAll();
/// <summary>
/// Gibt alle Entitäten zurück
/// </summary>
/// <returns>Liste aller Entitäten</returns>
Task<IEnumerable<T>> GetAllAsync();
/// <summary>
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <returns>Liste gefundener Entitäten</returns>
IEnumerable<T> Find(Expression<Func<T, bool>> predicate);
/// <summary>
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <returns>Liste gefundener Entitäten</returns>
Task<IEnumerable<T>> FindAsync(Expression<Func<T, bool>> predicate);
/// <summary>
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <returns>Liste gefundener Entitäten</returns>
IQueryable<T> Query(Expression<Func<T, bool>> predicate);
/// <summary>
/// Gibt eine Entität oder den Default wert zurück
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <returns>Gefundene entität oder Default-Wert</returns>
T SingleOrDefault(Expression<Func<T, bool>> predicate);
/// <summary>
/// Gibt eine Entität oder den Default wert zurück.
/// Exception wenn mehr als 1 gefunden
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <returns>Gefundene entität oder Default-Wert</returns>
Task<T> SingleOrDefaultAsync(Expression<Func<T, bool>> predicate);
/// <summary>
/// Gibt eine Entität oder den Default wert zurück
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <returns>Gefundene entität oder Default-Wert</returns>
Task<T> FirstOrDefaultAsync(Expression<Func<T, bool>> predicate);
#endregion
#region CRUD
/// <summary>
/// Fügt eine Entität zum Repository hinzu
/// </summary>
/// <param name="entity">Entität</param>
void Add(T entity);
/// <summary>
/// Fügt eine Liste von Entitäten zum Repository hinzu
/// </summary>
/// <param name="entities">List von Entitäten</param>
void AddRange(IEnumerable<T> entities);
/// <summary>
/// Entfernt eine Entität aus dem Repository
/// </summary>
/// <param name="entity">Zu entfernende Entität</param>
void Remove(T entity);
/// <summary>
/// Entfernt eine Liste von Entitäten aus dem Repository
/// </summary>
/// <param name="entities">Liste von Entitäten</param>
void RemoveRange(IEnumerable<T> entities);
#endregion
#region Count
/// <summary>
/// Gibt die Anzahl aller Entitäten zurück
/// </summary>
/// <returns>Anzahl</returns>
int Count();
/// <summary>
/// Gibt die Anzahl aller Entitäten zurück
/// </summary>
/// <returns>Anzahl</returns>
Task<int> CountAsync();
#endregion
#region Commit / UnitOfWork
/// <summary>
/// Schließt Daten-Änderungen ab und speichert die selben
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="noAudit">Gibt an, dass kein Audit-Eintrag erstellt werden soll, auch wenn Audit aktiviert ist</param>
int Commit(string userName, bool noAudit = false);
/// <summary>
/// Schließt Daten-Änderungen ab und speichert die selben
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="noAudit">Gibt an, dass kein Audit-Eintrag erstellt werden soll, auch wenn Audit aktiviert ist</param>
Task<int> CommitAsync(string userName, bool noAudit = false);
#endregion
}
}