using gehGassi.Core.Interfaces; using gehGassi.Domain.Ratings; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Domain.Favourites; using Microsoft.EntityFrameworkCore; namespace gehGassi.Core.Services { /// /// Service der die Verwaltung von Favoriten ermöglicht /// public class FavouritesService : ServiceBase, IFavouriteService { /// /// Erstellt eine Instanz /// /// Instanz eines IUnitOfWork public FavouritesService(IUnitOfWork unitOfWork) : base(unitOfWork) { } /// /// Erstellen eines Favoriten /// /// Rating public Favourite Create() { var favourite = new Favourite() { Id = Guid.NewGuid().ToString("N"), Created = DateTimeOffset.UtcNow }; return favourite; } /// /// Erstellen eines Favoriten /// /// Id des AppUsers /// Id des verknüpften Objekts /// Typ des verknüpften Objekts /// Rating public Favourite Create(string appUserId, string key, string table) { var favourite = new Favourite() { Id = Guid.NewGuid().ToString("N"), Created = DateTimeOffset.UtcNow, AppUserId = appUserId, Key = key, Table = table }; return favourite; } /// /// Gibt eine Liste der Favoriten eines Benutzers zurück. Kann Owner und Walker sein /// /// Id des AppUsers /// Letztes Update /// Liste der öffentlichen Anfragen public async Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate) { var query = Repository.Query(c => c.AppUserId == appUserId); if (lastUpdate.HasValue) query = query.Where(c => c.UpdatedAt > lastUpdate); return await query.ToListAsync().ConfigureAwait(false); } /// /// Gibt eine Liste der Favoriten eines Benutzers zurück /// /// Id des AppUsers /// Liste der Favoriten public async Task> GetForAppUserAsync(string appUserId) { return (await Repository.FindAsync(c => c.AppUserId == appUserId && c.Deleted == false).ConfigureAwait(false)).ToList(); } /// /// Gibt eine Liste der Favoriten eines Benutzers zurück /// /// Id des AppUsers /// Typ des Objektes das gesucht wird /// Liste der Favoriten public async Task> GetForAppUserAsync(string appUserId, string table) { return (await Repository.FindAsync(c => c.AppUserId == appUserId && c.Table == table && c.Deleted == false).ConfigureAwait(false)).ToList(); } /// /// Alle Favoriten eines AppUsers löschen /// /// Id des AppUsers /// Anzahl gelöscht public async Task DeleteAllForAppUserAsync(string appUserId) { var favourites = await Repository.FindAsync(c => c.AppUserId == appUserId).ConfigureAwait(false); foreach (var favourite in favourites) { Repository.Remove(favourite); } return favourites.Count(); } } }