using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Core.Interfaces; using gehGassi.Domain.Common; using gehGassi.Domain.Walks; namespace gehGassi.Core.Services { /// /// Service der die Verwaltung von Walk-Beschwerden ermöglicht /// public class WalkComplaintService : ServiceBase, IWalkComplaintService { private readonly IRepository _namesRepository; /// /// Erstellt eine Instanz /// /// Instanz eines IUnitOfWork public WalkComplaintService(IUnitOfWork unitOfWork) : base(unitOfWork) { _namesRepository = unitOfWork.GetRepository(); } /// /// Erstellen einer Walk-Beschwerde /// /// Walk public WalkComplaint Create() { var item = new WalkComplaint() { Id = Guid.NewGuid().ToString("N"), Created = DateTimeOffset.UtcNow }; return item; } /// /// Gibt eine gefilterte Liste von Walk-Beschwerden mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Sollen gelöschte inkludiert werden? /// Liste betroffener Walk-Beschwerden public IQueryable FilterWithNames(string filter, bool includeDeleted) { var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_WalkComplaintsWithNames()", c => c.DogOwnerName.Contains(filter) || c.DogWalkerName.Contains(filter) || c.UserName.Contains(filter)); if (!includeDeleted) baseQuery = baseQuery.Where(c => c.Deleted == false); return baseQuery; } /// /// Gibt eine Walk-Beschwerden mit Namen aufgelöst zurück /// /// Id der Beschwerde /// Walk-Beschwerden mit Namen aufgelöst public async Task GetWithNamesAsync(string id) { return await _namesRepository.FirstOrDefaultAsync(c => c.Id == id).ConfigureAwait(false); } /// /// Gibt eine Walk-Beschwerden mit Namen aufgelöst zurück /// /// Id des Walks /// Walk-Beschwerden mit Namen aufgelöst public async Task GetWithNamesByWalkAsync(string walkId) { return await _namesRepository.FirstOrDefaultAsync(c => c.WalkId == walkId).ConfigureAwait(false); } /// /// Gibt eine Walk-Beschwerden zurück /// /// Id des Walks /// Walk-Beschwerden public async Task GetByWalkAsync(string walkId) { return await Repository.FirstOrDefaultAsync(c => c.WalkId == walkId).ConfigureAwait(false); } /// /// Gibt die Anzahl der Walk-Beschwerden mit einem bestimmten Status zurück /// /// Gewünschter Status /// Anzahl Beschwerden im Status public async Task CountAsync(WalkComplaintStatus status) { return await Repository.CountAsync(c => c.Status == status).ConfigureAwait(false); } } }