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