< Summary - Estud

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

File(s)

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

#LineLine coverage
 1using Estud.Back.Domain.CourseOfferings;
 2
 3namespace Estud.Back.Features.CourseOfferings.CreateCourseOffering;
 4
 145public class CreateCourseOfferingService(EstudDbContext ctx) : IEstudService
 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, EstudError>> Create(CreateCourseOfferingIn data)
 18    {
 1619        if (V.Run(data, out var error)) return error;
 20
 1221        var institutionId = ctx.RequestUser.InstitutionId;
 22
 1223        var campusOk = await ctx.Campi.AnyAsync(x => x.Id == data.CampusId && x.InstitutionId == institutionId);
 1424        if (!campusOk) return CampusNotFound.I;
 25
 1026        var courseOk = await ctx.Courses.AnyAsync(x => x.Id == data.CourseId && x.InstitutionId == institutionId);
 1227        if (!courseOk) return CourseNotFound.I;
 28
 829        var courseCurriculumOk = await ctx.CourseCurriculums.AnyAsync(x => x.Id == data.CourseCurriculumId && x.CourseId
 1030        if (!courseCurriculumOk) return CourseCurriculumNotFound.I;
 31
 632        var academicPeriodOk = await ctx.AcademicPeriods.AnyAsync(x => x.Id == data.AcademicPeriodId && x.InstitutionId 
 833        if (!academicPeriodOk) return AcademicPeriodNotFound.I;
 34
 435        var courseOffering = new CourseOffering(
 436            institutionId,
 437            data.CampusId,
 438            data.CourseId,
 439            data.CourseCurriculumId,
 440            data.AcademicPeriodId,
 441            data.CourseSession!.Value
 442        );
 43
 444        await ctx.SaveChangesAsync(courseOffering);
 45
 446        return new CreateCourseOfferingOut { Id = courseOffering.Id };
 1447    }
 48}