< Summary - Syki

Information
Class: Syki.Back.Features.CourseOfferings.CreateCourseOffering.CreateCourseOfferingService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/CourseOfferings/CreateCourseOffering/CreateCourseOfferingService.cs
Tag: 56_26538939494
Line coverage
100%
Covered lines: 27
Uncovered lines: 0
Coverable lines: 27
Total lines: 48
Line coverage: 100%
Branch coverage
50%
Covered branches: 5
Total branches: 10
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%1010100%

File(s)

/home/runner/work/syki/syki/Back/Features/CourseOfferings/CreateCourseOffering/CreateCourseOfferingService.cs

#LineLine coverage
 1using Syki.Back.Domain.CourseOfferings;
 2
 3namespace Syki.Back.Features.CourseOfferings.CreateCourseOffering;
 4
 25public class CreateCourseOfferingService(SykiDbContext ctx) : ISykiService
 6{
 7    private class Validator : AbstractValidator<CreateCourseOfferingIn>
 8    {
 29        public Validator()
 10        {
 211            RuleFor(x => x.CourseSession).NotNull().WithError(InvalidCourseSession.I);
 212            RuleFor(x => x.CourseSession).IsInEnum().WithError(InvalidCourseSession.I);
 213        }
 14    }
 215    private static readonly Validator V = new();
 16
 17    public async Task<OneOf<CreateCourseOfferingOut, SykiError>> Create(CreateCourseOfferingIn data)
 18    {
 219        if (V.Run(data, out var error)) return error;
 20
 221        var institutionId = ctx.RequestUser.InstitutionId;
 22
 223        var campusOk = await ctx.Campi.AnyAsync(x => x.Id == data.CampusId && x.InstitutionId == institutionId);
 224        if (!campusOk) return CampusNotFound.I;
 25
 226        var courseOk = await ctx.Courses.AnyAsync(x => x.Id == data.CourseId && x.InstitutionId == institutionId);
 227        if (!courseOk) return CourseNotFound.I;
 28
 229        var courseCurriculumOk = await ctx.CourseCurriculums.AnyAsync(x => x.Id == data.CourseCurriculumId && x.CourseId
 230        if (!courseCurriculumOk) return CourseCurriculumNotFound.I;
 31
 232        var academicPeriodOk = await ctx.AcademicPeriods.AnyAsync(x => x.Id == data.AcademicPeriodId && x.InstitutionId 
 233        if (!academicPeriodOk) return AcademicPeriodNotFound.I;
 34
 235        var courseOffering = new CourseOffering(
 236            institutionId,
 237            data.CampusId,
 238            data.CourseId,
 239            data.CourseCurriculumId,
 240            data.AcademicPeriodId,
 241            data.CourseSession!.Value
 242        );
 43
 244        await ctx.SaveChangesAsync(courseOffering);
 45
 246        return new CreateCourseOfferingOut { Id = courseOffering.Id };
 247    }
 48}