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.
OptifitWebService/Server/Services/AlumniService.cs

83 lines
3.0 KiB

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<ResponseRestrictedAlumniDto> 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<ResponseRestrictedAlumniDto?> GetAlumniRestrictedById(string id)
{
var result = context.Alumni.FirstOrDefault(e => e.Id == id);
return Task.FromResult(result?.ToDtoRestricted());
}
public Task<ResponseAlumniDto?> 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<ResponseAlumniDto> 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<ResponseAlumniDto?> CreateAlumni(RequestAlumniDto alumni)
{
var result = context.Alumni.AddAsync(alumni.ToEntity());
context.SaveChangesAsync();
return Task.FromResult(result.Result?.Entity.ToDto());
}
}