You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.7 KiB
73 lines
2.7 KiB
using Infrastructure;
|
|
using Server.Dto.Request;
|
|
using Server.Dto.Response;
|
|
using Server.IServices;
|
|
using Server.Mappers;
|
|
using Shared.Criteria;
|
|
|
|
namespace Server.Services;
|
|
|
|
/// <summary>
|
|
/// Opération CRUD des évènements
|
|
/// </summary>
|
|
/// <remarks> TODO : manque subscribe subscribers unsubscribe et récupérer les inscription d'un alumni </remarks>
|
|
public class EventServices(AlumniDbContext context) : IEventsService
|
|
{
|
|
public Task<ResponseEventDto?> GetEventById(string id)
|
|
{
|
|
var result = context.Events.FirstOrDefault(e => e.Id == id);
|
|
return Task.FromResult(result?.ToDto());
|
|
}
|
|
|
|
public Task<(long Count, IEnumerable<ResponseEventDto> Events)> GetEvents(string? title, int page, int size,
|
|
EventOrderCriteria orderCriteria = EventOrderCriteria.Date, bool ascending = true)
|
|
{
|
|
var query = context.Events.Skip((page-1) * size).Take(size);
|
|
if (title != null)
|
|
{
|
|
query = context.Events.Where(e => e.Title.Contains(title)).Skip((page-1) * size).Take(size);
|
|
}
|
|
switch (orderCriteria)
|
|
{
|
|
case EventOrderCriteria.Date:
|
|
query = ascending ? query.OrderBy(e => e.Date) : query.OrderByDescending(e => e.Date);
|
|
break;
|
|
case EventOrderCriteria.Title:
|
|
query = ascending ? query.OrderBy(e => e.Title) : query.OrderByDescending(e => e.Title);
|
|
break;
|
|
case EventOrderCriteria.NbPlaces:
|
|
query = ascending ? query.OrderBy(e => e.nbPlaces) : query.OrderByDescending(e => e.nbPlaces);
|
|
break;
|
|
}
|
|
var count = query.LongCount();
|
|
return Task.FromResult((count, query.AsEnumerable().Select(e => e.ToDto())));
|
|
}
|
|
|
|
public Task<ResponseEventDto?> CreateEvent(RequestEventDto evt)
|
|
{
|
|
var result = context.Events.AddAsync(evt.ToEntity());
|
|
context.SaveChangesAsync();
|
|
return Task.FromResult(result.Result.Entity.ToDto());
|
|
}
|
|
|
|
public Task<ResponseEventDto?> UpdateEvent(string id, RequestEventDto evt)
|
|
{
|
|
var result = context.Events.FirstOrDefault(e => e.Id == id);
|
|
if (result == null) return Task.FromResult<ResponseEventDto?>(null);
|
|
result.Title = evt.Title;
|
|
result.Description = evt.Description;
|
|
result.Date = evt.Date;
|
|
result.nbPlaces = evt.nbMaxRegistrations;
|
|
context.SaveChangesAsync();
|
|
return Task.FromResult(result.ToDto());
|
|
}
|
|
|
|
public Task<bool> DeleteEvent(string id)
|
|
{
|
|
var result = context.Events.FirstOrDefault(e => e.Id == id);
|
|
if (result == null) return Task.FromResult(false);
|
|
context.Events.Remove(result);
|
|
context.SaveChangesAsync();
|
|
return Task.FromResult(true);
|
|
}
|
|
} |