| | | 1 | | using Syki.Back.Commands.Domain.Classes; |
| | | 2 | | |
| | | 3 | | namespace Syki.Back.Features.Classes.CreateClass; |
| | | 4 | | |
| | 0 | 5 | | public class CreateClassService(SykiDbContext ctx) : ISykiService |
| | | 6 | | { |
| | | 7 | | public async Task<OneOf<CreateClassOut, SykiError>> Create(CreateClassIn data) |
| | | 8 | | { |
| | 0 | 9 | | var institutionId = ctx.RequestUser.InstitutionId; |
| | | 10 | | |
| | 0 | 11 | | if (data.CampusId.HasValue) |
| | | 12 | | { |
| | 0 | 13 | | var campusOk = await ctx.Campi.AnyAsync(x => x.Id == data.CampusId && x.InstitutionId == institutionId); |
| | 0 | 14 | | if (!campusOk) return CampusNotFound.I; |
| | | 15 | | } |
| | | 16 | | |
| | 0 | 17 | | var disciplineOk = await ctx.Disciplines.AnyAsync(x => x.Id == data.DisciplineId && x.InstitutionId == instituti |
| | 0 | 18 | | if (!disciplineOk) return DisciplineNotFound.I; |
| | | 19 | | |
| | 0 | 20 | | if (data.TeacherId.HasValue) |
| | | 21 | | { |
| | 0 | 22 | | var teacherOk = await ctx.Teachers.AnyAsync(x => x.Id == data.TeacherId && x.InstitutionId == institutionId) |
| | 0 | 23 | | if (!teacherOk) return TeacherNotFound.I; |
| | | 24 | | |
| | 0 | 25 | | if (data.CampusId.HasValue) |
| | | 26 | | { |
| | 0 | 27 | | var teacherCampusOk = await ctx.TeachersCampi.AnyAsync(x => x.TeacherId == data.TeacherId && x.CampusId |
| | 0 | 28 | | if (!teacherCampusOk) return TeacherNotAssignedToCampus.I; |
| | | 29 | | } |
| | | 30 | | |
| | 0 | 31 | | var teacherDisciplineOk = await ctx.TeachersDisciplines.AnyAsync(x => x.TeacherId == data.TeacherId && x.Dis |
| | 0 | 32 | | if (!teacherDisciplineOk) return TeacherNotAssignedToDiscipline.I; |
| | | 33 | | } |
| | | 34 | | |
| | 0 | 35 | | var period = await ctx.AcademicPeriods.FirstOrDefaultAsync(x => x.Id == data.PeriodId && x.InstitutionId == inst |
| | 0 | 36 | | if (period == null) return AcademicPeriodNotFound.I; |
| | | 37 | | |
| | 0 | 38 | | var schedulesResult = data.Schedules.Select(x => (x.Day, x.Start, x.End)).ToList().ToSchedules(); |
| | 0 | 39 | | if (schedulesResult.IsError) return schedulesResult.Error; |
| | | 40 | | |
| | 0 | 41 | | var @class = new Class(institutionId, data.DisciplineId, data.CampusId, data.TeacherId, period, data.Vacancies, |
| | 0 | 42 | | @class.CreateLessons(); |
| | | 43 | | |
| | 0 | 44 | | await ctx.SaveChangesAsync(@class); |
| | | 45 | | |
| | 0 | 46 | | return new CreateClassOut { Id = @class.Id }; |
| | 0 | 47 | | } |
| | | 48 | | } |