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.
83 lines
3.0 KiB
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());
|
|
}
|
|
} |