< Summary - Syki

Information
Class: Syki.Back.Features.CourseCurriculums.EditCourseCurriculum.EditCourseCurriculumService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/CourseCurriculums/EditCourseCurriculum/EditCourseCurriculumService.cs
Tag: 97_27801654829
Line coverage
0%
Covered lines: 0
Uncovered lines: 25
Coverable lines: 25
Total lines: 44
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
.ctor()100%210%
.cctor()100%210%
Edit()0%4260%

File(s)

/home/runner/work/syki/syki/Back/Features/CourseCurriculums/EditCourseCurriculum/EditCourseCurriculumService.cs

#LineLine coverage
 1using Syki.Back.Domain.CourseCurriculums;
 2
 3namespace Syki.Back.Features.CourseCurriculums.EditCourseCurriculum;
 4
 05public class EditCourseCurriculumService(SykiDbContext ctx) : ISykiService
 6{
 7    private class Validator : AbstractValidator<EditCourseCurriculumIn>
 8    {
 09        public Validator()
 10        {
 011            RuleFor(x => x.Name).NotEmpty().WithError(InvalidCourseCurriculumName.I);
 012            RuleFor(x => x.Name).MaximumLength(50).WithError(InvalidCourseCurriculumName.I);
 013        }
 14    }
 015    private static readonly Validator V = new();
 16
 17    public async Task<OneOf<SykiSuccess, SykiError>> Edit(EditCourseCurriculumIn data)
 18    {
 019        if (V.Run(data, out var error)) return error;
 20
 021        var curriculum = await ctx.CourseCurriculums
 022            .Include(c => c.Links)
 023            .FirstOrDefaultAsync(c => c.InstitutionId == ctx.RequestUser.InstitutionId && c.Id == data.Id);
 024        if (curriculum == null) return CourseCurriculumNotFound.I;
 25
 026        var courseDisciplines = await ctx.CoursesDisciplines.AsNoTracking()
 027            .Where(x => x.CourseId == curriculum.CourseId)
 028            .Select(x => x.DisciplineId)
 029            .ToListAsync();
 30
 031        if (!data.Disciplines.ConvertAll(d => d.Id).IsSubsetOf(courseDisciplines))
 032            return new InvalidDisciplinesList();
 33
 034        curriculum.Name = data.Name;
 035        ctx.RemoveRange(curriculum.Links.ToList());
 036        curriculum.Links.Clear();
 037        var newLinks = data.Disciplines.ConvertAll(d => new CourseCurriculumDiscipline(d.Id, d.Period, d.Credits, d.Work
 038        curriculum.AddDisciplines(newLinks);
 39
 040        await ctx.SaveChangesAsync();
 41
 042        return SykiSuccess.I;
 043    }
 44}