< Summary - Syki

Information
Class: Syki.Back.Features.CourseCurriculums.CreateCourseCurriculum.CreateCourseCurriculumService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/CourseCurriculums/CreateCourseCurriculum/CreateCourseCurriculumService.cs
Tag: 56_26538939494
Line coverage
95%
Covered lines: 20
Uncovered lines: 1
Coverable lines: 21
Total lines: 40
Line coverage: 95.2%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor()100%11100%
.cctor()100%11100%
Create()50%6692.3%

File(s)

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

#LineLine coverage
 1using Syki.Back.Domain.CourseCurriculums;
 2
 3namespace Syki.Back.Features.CourseCurriculums.CreateCourseCurriculum;
 4
 45public class CreateCourseCurriculumService(SykiDbContext ctx) : ISykiService
 6{
 7    private class Validator : AbstractValidator<CreateCourseCurriculumIn>
 8    {
 29        public Validator()
 10        {
 211            RuleFor(x => x.Name).NotEmpty().WithError(InvalidCourseCurriculumName.I);
 212            RuleFor(x => x.Name).MaximumLength(50).WithError(InvalidCourseCurriculumName.I);
 213        }
 14    }
 215    private static readonly Validator V = new();
 16
 17    public async Task<OneOf<CreateCourseCurriculumOut, SykiError>> Create(CreateCourseCurriculumIn data)
 18    {
 419        if (V.Run(data, out var error)) return error;
 20
 421        var courseOk = await ctx.Courses.AnyAsync(c => c.InstitutionId == ctx.RequestUser.InstitutionId && c.Id == data.
 422        if (!courseOk) return CourseNotFound.I;
 23
 424        var courseDisciplines = await ctx.CoursesDisciplines.AsNoTracking()
 425            .Where(x => x.CourseId == data.CourseId)
 426            .Select(x => x.DisciplineId)
 427            .ToListAsync();
 28
 429        if (!data.Disciplines.ConvertAll(d => d.Id).IsSubsetOf(courseDisciplines))
 030            return new InvalidDisciplinesList();
 31
 432        var courseCurriculum = new CourseCurriculum(ctx.RequestUser.InstitutionId, data.CourseId, data.Name);
 433        var disciplines = data.Disciplines.ConvertAll(d => new CourseCurriculumDiscipline(d.Id, d.Period, d.Credits, d.W
 434        courseCurriculum.AddDisciplines(disciplines);
 35
 436        await ctx.SaveChangesAsync(courseCurriculum);
 37
 438        return new CreateCourseCurriculumOut { Id = courseCurriculum.Id };
 439    }
 40}