using Infrastructure; using Microsoft.EntityFrameworkCore; using Server.Dto.Request; using Server.Dto.Response; using Server.IServices; using Server.Mappers; using Shared.Criteria; namespace Server.Services; public class AlumniService(AlumniDbContext context) : IAlumnisService { public Task<(long Count, IEnumerable Alumnis)> GetAlumnisRestricted(string? lastname, int page, int size, AlumniOrderCriteria orderCriteria = AlumniOrderCriteria.None, bool ascending = true) { var query = context.Alumni.Skip((page-1) * size).Take(size); if (lastname != null) { query = context.Alumni.Where(e => e.LastName.Contains(lastname)).Skip((page-1) * size).Take(size); } switch (orderCriteria) { case AlumniOrderCriteria.Name: query = ascending ? query.OrderBy(e => e.LastName) : query.OrderByDescending(e => e.LastName); break; case AlumniOrderCriteria.None: break; } var count = query.LongCount(); return Task.FromResult((count, query.AsEnumerable().Select(e => e.ToDtoRestricted()))); } public Task GetAlumniRestrictedById(string id) { var result = context.Alumni.FirstOrDefault(e => e.Id == id); return Task.FromResult(result?.ToDtoRestricted()); } public Task GetAlumniById(string id) { var result = context.Alumni .Include(a => a.Experiences) .Include(a => a.Formations) .FirstOrDefault(e => e.Id == id); return Task.FromResult(result?.ToDto()); } public Task<(long Count, IEnumerable Alumnis)> GetAlumnis(string? lastname, int page, int size, AlumniOrderCriteria orderCriteria = AlumniOrderCriteria.None, bool ascending = true) { var query = context.Alumni .Include(a => a.Experiences) .Include(a => a.Formations) .Skip((page-1) * size) .Take(size); if (lastname != null) { query = context.Alumni.Where(e => e.LastName.Contains(lastname)) .Include(a => a.Experiences) .Include(a => a.Formations) .Skip((page-1) * size) .Take(size); } switch (orderCriteria) { case AlumniOrderCriteria.Name: query = ascending ? query.OrderBy(e => e.LastName) : query.OrderByDescending(e => e.LastName); break; case AlumniOrderCriteria.None: break; } var count = query.LongCount(); return Task.FromResult((count, query.AsEnumerable().Select(e => e.ToDto()))); } public Task CreateAlumni(RequestAlumniDto alumni) { var result = context.Alumni.AddAsync(alumni.ToEntity()); context.SaveChangesAsync(); return Task.FromResult(result.Result?.Entity.ToDto()); } }