< 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: 21_17346963026
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
 5483public class CreateCourseCurriculumService(SykiDbContext ctx, HybridCache cache) : IAcademicService
 4{
 5    public async Task<OneOf<CourseCurriculumOut, SykiError>> Create(Guid institutionId, CreateCourseCurriculumIn data)
 6    {
 5487        var courseOk = await ctx.Courses
 5488            .AnyAsync(c => c.InstitutionId == institutionId && c.Id == data.CourseId);
 5529        if (!courseOk) return CourseNotFound.I;
 10
 54411        var disciplines = await ctx.CoursesDisciplines.AsNoTracking()
 54412            .Where(x => x.CourseId == data.CourseId)
 54413            .Select(x => x.DisciplineId)
 54414            .ToListAsync();
 15
 490416        if (!data.Disciplines.ConvertAll(d => d.Id).IsSubsetOf(disciplines))
 817            return new InvalidDisciplinesList();
 18
 53619        var courseCurriculum = new CourseCurriculum(institutionId, data.CourseId, data.Name);
 20
 53621        courseCurriculum.AddDisciplines(data.Disciplines);
 22
 53623        ctx.Add(courseCurriculum);
 53624        await ctx.SaveChangesAsync();
 25
 53626        await cache.RemoveAsync($"courseCurriculums:{institutionId}");
 27
 53628        courseCurriculum = await ctx.CourseCurriculums.AsNoTracking()
 53629            .Include(x => x.Course)
 53630            .Include(x => x.Disciplines)
 53631            .Include(x => x.Links)
 53632            .FirstAsync(x => x.Id == courseCurriculum.Id);
 33
 53634        return courseCurriculum.ToOut();
 54835    }
 36}