| | | 1 | | namespace Syki.Back.Features.CourseCurriculums.GetCourseCurriculum; |
| | | 2 | | |
| | 0 | 3 | | public class GetCourseCurriculumService(SykiDbContext ctx) : ISykiService |
| | | 4 | | { |
| | | 5 | | public async Task<OneOf<GetCourseCurriculumOut, SykiError>> Get(int id) |
| | | 6 | | { |
| | 0 | 7 | | var curriculum = await ctx.CourseCurriculums.AsNoTracking() |
| | 0 | 8 | | .Include(c => c.Course) |
| | 0 | 9 | | .Include(c => c.Links) |
| | 0 | 10 | | .FirstOrDefaultAsync(c => c.InstitutionId == ctx.RequestUser.InstitutionId && c.Id == id); |
| | 0 | 11 | | if (curriculum == null) return CourseCurriculumNotFound.I; |
| | | 12 | | |
| | 0 | 13 | | var disciplineIds = curriculum.Links.Select(l => l.DisciplineId).ToList(); |
| | | 14 | | |
| | 0 | 15 | | var disciplines = await ctx.Disciplines.AsNoTracking() |
| | 0 | 16 | | .Where(d => disciplineIds.Contains(d.Id)) |
| | 0 | 17 | | .Select(d => new { d.Id, d.Name }) |
| | 0 | 18 | | .ToListAsync(); |
| | | 19 | | |
| | 0 | 20 | | var disciplineMap = disciplines.ToDictionary(d => d.Id, d => d.Name); |
| | | 21 | | |
| | 0 | 22 | | var disciplineItems = curriculum.Links |
| | 0 | 23 | | .OrderBy(l => l.Period) |
| | 0 | 24 | | .ThenBy(l => disciplineMap.GetValueOrDefault(l.DisciplineId, string.Empty)) |
| | 0 | 25 | | .Select(l => new GetCourseCurriculumDisciplineOut |
| | 0 | 26 | | { |
| | 0 | 27 | | Id = l.DisciplineId, |
| | 0 | 28 | | Name = disciplineMap.GetValueOrDefault(l.DisciplineId, string.Empty), |
| | 0 | 29 | | Period = l.Period, |
| | 0 | 30 | | Credits = l.Credits, |
| | 0 | 31 | | Workload = l.Workload, |
| | 0 | 32 | | }) |
| | 0 | 33 | | .ToList(); |
| | | 34 | | |
| | 0 | 35 | | return new GetCourseCurriculumOut |
| | 0 | 36 | | { |
| | 0 | 37 | | Id = curriculum.Id, |
| | 0 | 38 | | Name = curriculum.Name, |
| | 0 | 39 | | CourseId = curriculum.CourseId, |
| | 0 | 40 | | Course = curriculum.Course!.Name, |
| | 0 | 41 | | Disciplines = disciplineItems, |
| | 0 | 42 | | }; |
| | 0 | 43 | | } |
| | | 44 | | } |