< Summary - Syki

Information
Class: Syki.Back.Features.Academic.CreateCourse.CreateCourseService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/CreateCourse/CreateCourseService.cs
Tag: 21_17346963026
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 31
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%
.ctor()100%11100%
.cctor()100%11100%
Create()75%44100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/CreateCourse/CreateCourseService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.CreateCourse;
 2
 6203public class CreateCourseService(SykiDbContext ctx, HybridCache cache) : IAcademicService
 4{
 5    private class Validator : AbstractValidator<CreateCourseIn>
 6    {
 27        public Validator()
 8        {
 29            RuleFor(x => x.Name).NotEmpty().WithError(InvalidCourseName.I);
 210            RuleFor(x => x.Name).MaximumLength(50).WithError(InvalidCourseName.I);
 11
 212            RuleFor(x => x.Type).NotNull().WithError(InvalidCourseType.I);
 213            RuleFor(x => x.Type).IsInEnum().WithError(InvalidCourseType.I);
 214        }
 15    }
 216    private static readonly Validator V = new();
 17
 18    public async Task<OneOf<CreateCourseOut, SykiError>> Create(CreateCourseIn data)
 19    {
 63020        if (V.Run(data, out var error)) return error;
 21
 61022        var course = new Course(ctx.InstitutionId, data.Name, data.Type!.Value);
 498823        data.Disciplines?.ForEach(d => course.Disciplines.Add(new(ctx.InstitutionId, d)));
 24
 61025        await ctx.SaveChangesAsync(course);
 26
 61027        await cache.RemoveAsync($"courses:{ctx.InstitutionId}");
 28
 61029        return course.ToCreateCourseOut();
 62030    }
 31}