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