using gehGassi.Core.Interfaces;
using gehGassi.Domain.Walks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Domain.Dogs;
using Microsoft.EntityFrameworkCore;
namespace gehGassi.Core.Services
{
///
/// Service der die Verwaltung von Walking-Schedules ermöglicht.
/// Das bedeutet die einstellung an welchen Wochentagen ein Walker zu welchen Zeiten zur Verfügung steht
///
public class WalkingTimeService : ServiceBase, IWalkingTimeService
{
///
/// Erstellt eine Instanz
///
/// Instanz eines IUnitOfWork
public WalkingTimeService(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
///
/// Erstellt eine Walkingtime Einstellung
///
/// Id des Dogwalkers
/// WalkingTime
public WalkingTime Create(string dogWalkerId)
{
var walk = new WalkingTime()
{
Id = Guid.NewGuid().ToString("N"),
DogWalkerId = dogWalkerId
};
return walk;
}
///
/// Gibt eine Liste der Walkintimes eines Benutzers für das Syncing mit der App zurück.
///
/// Id des DogWalkers
/// Letztes Update
/// Liste der öffentlichen Anfragen
public async Task> GetForSyncAppAsync(string dogWalkerId, DateTimeOffset? lastUpdate)
{
var query = Repository.Query(c => c.DogWalkerId == dogWalkerId);
if (lastUpdate.HasValue)
query = query.Where(c => c.UpdatedAt > lastUpdate);
return await query.ToListAsync().ConfigureAwait(false);
}
///
/// Gibt eine Liste der Walkintimes eines Benutzers zurück.
///
/// Id des DogWalkers
/// Liste der öffentlichen Anfragen
public async Task> GetAllAsync(string dogWalkerId)
{
var query = Repository.Query(c => c.DogWalkerId == dogWalkerId && c.Deleted == false);
return await query.OrderBy(c => c.Day).ThenBy(c => c.Start).ToListAsync().ConfigureAwait(false);
}
}
}