< Summary - Syki

Information
Class: Syki.Back.Features.Academic.CreateCourseCurriculum.CreateCourseCurriculumService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/CreateCourseCurriculum/CreateCourseCurriculumService.cs
Tag: 4_16869239191
Line coverage
100%
Covered lines: 22
Uncovered lines: 0
Coverable lines: 22
Total lines: 36
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Create()100%44100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/CreateCourseCurriculum/CreateCourseCurriculumService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.CreateCourseCurriculum;
 2
 5363public class CreateCourseCurriculumService(SykiDbContext ctx, HybridCache cache) : IAcademicService
 4{
 5    public async Task<OneOf<CourseCurriculumOut, SykiError>> Create(Guid institutionId, CreateCourseCurriculumIn data)
 6    {
 5367        var courseOk = await ctx.Courses
 5368            .AnyAsync(c => c.InstitutionId == institutionId && c.Id == data.CourseId);
 5409        if (!courseOk) return new CourseNotFound();
 10
 53211        var disciplines = await ctx.CoursesDisciplines.AsNoTracking()
 53212            .Where(x => x.CourseId == data.CourseId)
 53213            .Select(x => x.DisciplineId)
 53214            .ToListAsync();
 15
 477216        if (!data.Disciplines.ConvertAll(d => d.Id).IsSubsetOf(disciplines))
 817            return new InvalidDisciplinesList();
 18
 52419        var courseCurriculum = new CourseCurriculum(institutionId, data.CourseId, data.Name);
 20
 52421        courseCurriculum.AddDisciplines(data.Disciplines);
 22
 52423        ctx.Add(courseCurriculum);
 52424        await ctx.SaveChangesAsync();
 25
 52426        await cache.RemoveAsync($"courseCurriculums:{institutionId}");
 27
 52428        courseCurriculum = await ctx.CourseCurriculums.AsNoTracking()
 52429            .Include(x => x.Course)
 52430            .Include(x => x.Disciplines)
 52431            .Include(x => x.Links)
 52432            .FirstAsync(x => x.Id == courseCurriculum.Id);
 33
 52434        return courseCurriculum.ToOut();
 53635    }
 36}