using gehGassi.Core.Interfaces; using gehGassi.Domain.Feedback; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Domain.Reporting; using gehGassi.Domain.Advertisements; using gehGassi.Domain.Common; namespace gehGassi.Core.Services { /// /// Service der die Verwaltung von App-User-Reports ermöglicht /// public class AppUserReportService : ServiceBase, IAppUserReportService { private readonly IRepository _namesRepository; /// /// Erstellt eine Instanz /// /// Instanz eines IUnitOfWork public AppUserReportService(IUnitOfWork unitOfWork) : base(unitOfWork) { _namesRepository = unitOfWork.GetRepository(); } /// /// Erstellen einer Meldung /// /// AppFeedback public AppUserReport Create() { var item = new AppUserReport { Created = DateTimeOffset.UtcNow }; return item; } /// /// Gibt eine gefilterte Liste von Meldungen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Feedbacks public IQueryable Filter(string filter) { return Repository.Query(c => c.Email.Contains(filter) || c.UpdatedBy.Contains(filter)); } /// /// Gibt eine gefilterte Liste von Meldungen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Feedbacks public IQueryable FilterWithNames(string filter) { return _namesRepository.Query(c => c.ReportingAppUserName.Contains(filter) || c.ReportedAppUserName.Contains(filter) || c.ReportingAppUserEmail.Contains(filter) || c.ReportedAppUserEmail.Contains(filter)); } /// /// Gibt die Anzahl von Meldungen in einem bestimmten Status zurück /// /// Gesuchter Status /// Anzahl Meldungen im Status public async Task CountAsync(AppUserReportStatus status) { return await Repository.CountAsync(c => c.Status == status).ConfigureAwait(false); } /// /// Gibt eine Meldung mit Namen aufgelöst zurück /// /// Id der Meldung /// AppUserReportWithNames oder null, wenn nicht gefunden public async Task GetWithNamesAsync(long id) { return await _namesRepository.FirstOrDefaultAsync(c => c.Id == id).ConfigureAwait(false); } /// /// Gibt zurück wie viele Meldungen ein App-User erstellt hat /// /// Id des App-Users /// Anzahl Meldungen public async Task CountReportingAsync(string appUserId) { return await Repository.CountAsync(c => c.ReportingAppUserId == appUserId).ConfigureAwait(false); } /// /// Gibt zurück wie viele Meldungen für ein App-User erstellt wurden /// /// Id des App-Users /// Anzahl Meldungen erstellt public async Task CountReportedAsync(string appUserId) { return await Repository.CountAsync(c => c.ReportedAppUserId == appUserId).ConfigureAwait(false); } /// /// Löscht alle Meldungen and denen ein AppUser beteiligt ist /// /// Id des App-Users /// Anzahl Meldungen gelöscht public async Task DeleteAllForAppUserAsync(string appUserId) { var reports = await Repository.FindAsync(c => c.ReportedAppUserId == appUserId || c.ReportingAppUserId == appUserId).ConfigureAwait(false); foreach (var report in reports) { Repository.Remove(report); } return reports.Count(); } } }