gehgassi_backend/gehGassi.Core/Services/WalkComplaintService.cs

99 lines
3.5 KiB
C#

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
{
/// <summary>
/// Service der die Verwaltung von Walk-Beschwerden ermöglicht
/// </summary>
public class WalkComplaintService : ServiceBase<WalkComplaint>, IWalkComplaintService
{
private readonly IRepository<WalkComplaintWithNames> _namesRepository;
/// <summary>
/// Erstellt eine Instanz
/// </summary>
/// <param name="unitOfWork">Instanz eines IUnitOfWork</param>
public WalkComplaintService(IUnitOfWork unitOfWork) : base(unitOfWork)
{
_namesRepository = unitOfWork.GetRepository<WalkComplaintWithNames>();
}
/// <summary>
/// Erstellen einer Walk-Beschwerde
/// </summary>
/// <returns>Walk</returns>
public WalkComplaint Create()
{
var item = new WalkComplaint()
{
Id = Guid.NewGuid().ToString("N"),
Created = DateTimeOffset.UtcNow
};
return item;
}
/// <summary>
/// Gibt eine gefilterte Liste von Walk-Beschwerden mit Namen zurück in einer gewählten Sprache
/// </summary>
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
/// <param name="includeDeleted">Sollen gelöschte inkludiert werden?</param>
/// <returns>Liste betroffener Walk-Beschwerden</returns>
public IQueryable<WalkComplaintWithNames> 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;
}
/// <summary>
/// Gibt eine Walk-Beschwerden mit Namen aufgelöst zurück
/// </summary>
/// <param name="id">Id der Beschwerde</param>
/// <returns>Walk-Beschwerden mit Namen aufgelöst</returns>
public async Task<WalkComplaintWithNames> GetWithNamesAsync(string id)
{
return await _namesRepository.FirstOrDefaultAsync(c => c.Id == id).ConfigureAwait(false);
}
/// <summary>
/// Gibt eine Walk-Beschwerden mit Namen aufgelöst zurück
/// </summary>
/// <param name="walkId">Id des Walks</param>
/// <returns>Walk-Beschwerden mit Namen aufgelöst</returns>
public async Task<WalkComplaintWithNames> GetWithNamesByWalkAsync(string walkId)
{
return await _namesRepository.FirstOrDefaultAsync(c => c.WalkId == walkId).ConfigureAwait(false);
}
/// <summary>
/// Gibt eine Walk-Beschwerden zurück
/// </summary>
/// <param name="walkId">Id des Walks</param>
/// <returns>Walk-Beschwerden</returns>
public async Task<WalkComplaint> GetByWalkAsync(string walkId)
{
return await Repository.FirstOrDefaultAsync(c => c.WalkId == walkId).ConfigureAwait(false);
}
/// <summary>
/// Gibt die Anzahl der Walk-Beschwerden mit einem bestimmten Status zurück
/// </summary>
/// <param name="status">Gewünschter Status</param>
/// <returns>Anzahl Beschwerden im Status</returns>
public async Task<int> CountAsync(WalkComplaintStatus status)
{
return await Repository.CountAsync(c => c.Status == status).ConfigureAwait(false);
}
}
}