138 lines
6.0 KiB
C#
138 lines
6.0 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.Dogs;
|
|
using gehGassi.Domain.News;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace gehGassi.Core.Services
|
|
{
|
|
/// <summary>
|
|
/// Service der die Verwaltung von Hunderassen realisiert
|
|
/// </summary>
|
|
public class DogRaceService : ServiceBase<DogRace>, IDogRaceService
|
|
{
|
|
private readonly IRepository<DogRaceWithNames> _namesRepository;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="unitOfWork">Instanz einer IUnitOfWork</param>
|
|
public DogRaceService(IUnitOfWork unitOfWork) : base(unitOfWork)
|
|
{
|
|
_namesRepository = unitOfWork.GetRepository<DogRaceWithNames>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Hunderassen zurück
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <returns>List betroffener Hunderassen</returns>
|
|
public IQueryable<DogRace> Filter(string filter)
|
|
{
|
|
return Repository.Query(c => c.NameLocalized.Contains(filter));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Erstellen einer Hunderasse
|
|
/// </summary>
|
|
/// <returns>Hunderasse</returns>
|
|
public DogRace Create()
|
|
{
|
|
var item = new DogRace()
|
|
{
|
|
Id = Guid.NewGuid().ToString("N"),
|
|
Created = DateTimeOffset.UtcNow
|
|
};
|
|
return item;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Hunderassen zurück.
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <returns>List betroffener Hunderassen</returns>
|
|
public async Task<List<DogRace>> SearchAsync(string filter)
|
|
{
|
|
return (await Repository.FindAsync(c => c.NameLocalized.Contains(filter) && c.Deleted == false)).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Hunderassen zurück.
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <returns>List betroffener Hunderassen</returns>
|
|
public async Task<List<DogRaceWithNames>> SearchWithNamesAsync(string filter, string language, string fallback)
|
|
{
|
|
language = language.ToUpperInvariant();
|
|
fallback = fallback.ToUpperInvariant();
|
|
|
|
var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_DogRacesWithNames({0},{1})", c => c.Name.Contains(filter) && c.Deleted == false, language, fallback);
|
|
return await baseQuery.ToListAsync().ConfigureAwait(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Hunderassen mit Namen zurück in einer gewählten Sprache
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <param name="includeDeleted">Sollen gelöschte inkludiert werden?</param>
|
|
/// <returns>Liste betroffener Hunderassen</returns>
|
|
public IQueryable<DogRaceWithNames> FilterWithNames(string filter, string language, string fallback, bool includeDeleted)
|
|
{
|
|
language = language.ToUpperInvariant();
|
|
fallback = fallback.ToUpperInvariant();
|
|
|
|
var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_DogRacesWithNames({0},{1})", c => c.Name.Contains(filter), language, fallback);
|
|
|
|
if (!includeDeleted)
|
|
baseQuery = baseQuery.Where(c => c.Deleted == false);
|
|
|
|
return baseQuery;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste von Hunderassen zurück, welche nach dem glieferten Datum geändert wurden.
|
|
/// Wird kein Datum angegeben, werden alle zurückgegeben.
|
|
/// </summary>
|
|
/// <param name="lastUpdate">Letztes Update oder null wenn noch keines</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <returns>Liste von Hunderassen</returns>
|
|
public async Task<List<DogRaceWithNames>> GetForSyncAsync(DateTimeOffset? lastUpdate, string language, string fallback)
|
|
{
|
|
language = language.ToUpperInvariant();
|
|
fallback = fallback.ToUpperInvariant();
|
|
|
|
IQueryable<DogRaceWithNames> baseQuery;
|
|
if (lastUpdate == null)
|
|
baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_DogRacesWithNames({0},{1})", null, language, fallback);
|
|
else
|
|
baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_DogRacesWithNames({0},{1})", c => c.UpdatedAt > lastUpdate, language, fallback);
|
|
return await baseQuery.ToListAsync().ConfigureAwait(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Hunderasse mit Namen aufgelöst zurück
|
|
/// </summary>
|
|
/// <param name="id">Id der Hunderasse</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <returns>Hunderasse oder null, wenn nicht gefunden</returns>
|
|
public async Task<DogRaceWithNames> GetWithNamesAsync(string id, string language, string fallback)
|
|
{
|
|
language = language.ToUpperInvariant();
|
|
fallback = fallback.ToUpperInvariant();
|
|
|
|
var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_DogRacesWithNames({0},{1})", c => c.Id == id && c.Deleted == false, language, fallback);
|
|
return await baseQuery.FirstOrDefaultAsync().ConfigureAwait(false);
|
|
}
|
|
}
|
|
}
|