| | | 1 | | namespace Syki.Back.Features.Classes.GetClasses; |
| | | 2 | | |
| | 0 | 3 | | public class GetClassesService(SykiDbContext ctx) : ISykiService |
| | | 4 | | { |
| | | 5 | | public async Task<GetClassesOut> Get(GetAcademicClassesIn query) |
| | | 6 | | { |
| | 0 | 7 | | var institutionId = ctx.RequestUser.InstitutionId; |
| | | 8 | | |
| | 0 | 9 | | var classes = await ctx.Classes.AsNoTracking() |
| | 0 | 10 | | .Include(c => c.Discipline) |
| | 0 | 11 | | .Include(c => c.Teacher) |
| | 0 | 12 | | .Include(c => c.Period) |
| | 0 | 13 | | .Include(c => c.Schedules) |
| | 0 | 14 | | .Where(c => c.InstitutionId == institutionId) |
| | 0 | 15 | | .ToListAsync(); |
| | | 16 | | |
| | 0 | 17 | | var today = DateOnly.FromDateTime(DateTime.UtcNow); |
| | 0 | 18 | | foreach (var @class in classes) |
| | | 19 | | { |
| | 0 | 20 | | if (@class.Status == ClassStatus.OnEnrollment && @class.Period?.EndAt < today) |
| | 0 | 21 | | @class.Status = ClassStatus.AwaitingStart; |
| | | 22 | | } |
| | | 23 | | |
| | 0 | 24 | | var statusFilter = query?.Status; |
| | 0 | 25 | | var items = classes |
| | 0 | 26 | | .Where(c => statusFilter == null || c.Status == statusFilter) |
| | 0 | 27 | | .Select(c => new GetClassesItemOut |
| | 0 | 28 | | { |
| | 0 | 29 | | Id = c.Id, |
| | 0 | 30 | | Discipline = c.Discipline?.Name ?? "", |
| | 0 | 31 | | Teacher = c.Teacher?.Name ?? "", |
| | 0 | 32 | | Period = c.Period?.Name ?? "", |
| | 0 | 33 | | Vacancies = c.Vacancies, |
| | 0 | 34 | | Status = c.Status, |
| | 0 | 35 | | Schedules = c.Schedules |
| | 0 | 36 | | .Select(s => new ScheduleOut(s.Day, s.Start, s.End)) |
| | 0 | 37 | | .ToList(), |
| | 0 | 38 | | }) |
| | 0 | 39 | | .ToList(); |
| | | 40 | | |
| | 0 | 41 | | return new GetClassesOut { Total = items.Count, Items = items }; |
| | 0 | 42 | | } |
| | | 43 | | } |