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();
}
}
}