| | | 1 | | namespace Syki.Back.Features.Academic.ReleaseClassesForEnrollment; |
| | | 2 | | |
| | 118 | 3 | | public class ReleaseClassesForEnrollmentService(SykiDbContext ctx) : IAcademicService |
| | | 4 | | { |
| | | 5 | | public async Task<OneOf<SykiSuccess, SykiError>> Release(Guid institutionId, ReleaseClassesForEnrollmentIn data) |
| | | 6 | | { |
| | 118 | 7 | | var classes = await ctx.Classes |
| | 118 | 8 | | .Where(c => c.InstitutionId == institutionId && data.Classes.Contains(c.Id)) |
| | 118 | 9 | | .ToListAsync(); |
| | | 10 | | |
| | 118 | 11 | | var today = DateTime.UtcNow.ToDateOnly(); |
| | 118 | 12 | | var periods = await ctx.EnrollmentPeriods.AsNoTracking().Where(x => x.InstitutionId == institutionId).ToListAsyn |
| | 1260 | 13 | | foreach (var @class in classes) |
| | | 14 | | { |
| | 1028 | 15 | | var period = periods.FirstOrDefault(x => x.Id == @class.PeriodId); |
| | 520 | 16 | | if (period == null) return new EnrollmentPeriodNotFound(); |
| | 514 | 17 | | if (today < period.StartAt) return new EnrollmentPeriodNotStarted(); |
| | 512 | 18 | | if (today > period.EndAt) return new EnrollmentPeriodFinalized(); |
| | | 19 | | } |
| | | 20 | | |
| | 618 | 21 | | var statusOk = classes.All(x => x.Status == ClassStatus.OnPreEnrollment); |
| | 112 | 22 | | if (!statusOk) return new AllClassesMustHaveOnPreEnrollmentStatus(); |
| | | 23 | | |
| | 614 | 24 | | classes.ForEach(c => c.Status = ClassStatus.OnEnrollment); |
| | | 25 | | |
| | 108 | 26 | | await ctx.SaveChangesAsync(); |
| | | 27 | | |
| | 108 | 28 | | return new SykiSuccess(); |
| | 118 | 29 | | } |
| | | 30 | | } |