< Summary - Syki

Information
Class: Syki.Back.Features.Academic.CreateClass.CreateClassService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/CreateClass/CreateClassService.cs
Tag: 21_17346963026
Line coverage
100%
Covered lines: 44
Uncovered lines: 0
Coverable lines: 44
Total lines: 64
Line coverage: 100%
Branch coverage
93%
Covered branches: 15
Total branches: 16
Branch coverage: 93.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Create()93.75%1616100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/CreateClass/CreateClassService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.CreateClass;
 2
 6243public class CreateClassService(SykiDbContext ctx) : IAcademicService
 4{
 5    public async Task<OneOf<ClassOut, SykiError>> Create(Guid institutionId, CreateClassIn data)
 6    {
 6247        var campusOk = await ctx.Campi.AnyAsync(c => c.InstitutionId == institutionId && c.Id == data.CampusId);
 6268        if (!campusOk) return CampusNotFound.I;
 9
 62210        var disciplineOk = await ctx.Disciplines.AnyAsync(x => x.InstitutionId == institutionId && x.Id == data.Discipli
 62411        if (!disciplineOk) return new DisciplineNotFound();
 12
 62013        var teacherOk = await ctx.Teachers.AnyAsync(p => p.InstitutionId == institutionId && p.Id == data.TeacherId);
 62214        if (!teacherOk) return new TeacherNotFound();
 15
 61816        var teacherCampusOk = await ctx.TeachersCampi.AnyAsync(x => x.SykiTeacherId == data.TeacherId && x.CampusId == d
 63217        if (!teacherCampusOk) return new TeacherNotAssignedToCampus();
 18
 60419        var teacherDisciplineOk = await ctx.TeachersDisciplines.AnyAsync(x => x.SykiTeacherId == data.TeacherId && x.Dis
 60620        if (!teacherDisciplineOk) return new TeacherNotAssignedToDiscipline();
 21
 60422        if (await ctx.AcademicPeriodNotFound(data.Period)) return AcademicPeriodNotFound.I;
 23
 60024        var schedulesResult = data.Schedules.ToSchedules();
 60625        if (schedulesResult.IsError) return schedulesResult.Error;
 59426        var schedules = schedulesResult.Success;
 27
 59428        var result = Class.New(
 59429            institutionId,
 59430            data.DisciplineId,
 59431            data.CampusId,
 59432            data.TeacherId,
 59433            data.Period,
 59434            data.Vacancies,
 59435            schedules
 59436        );
 37
 59438        if (result.IsError) return result.Error;
 39
 59440        var @class = result.Success;
 41
 59442        ctx.Add(@class);
 59443        await ctx.SaveChangesAsync();
 44
 59445        @class = await ctx.Classes
 59446            .Include(c => c.Period)
 59447            .Include(t => t.Lessons)
 59448            .Include(t => t.Schedules)
 59449            .FirstAsync(x => x.Id == @class.Id);
 50
 59451        @class.CreateLessons();
 59452        await ctx.SaveChangesAsync();
 53
 59454        @class = await ctx.Classes.AsNoTracking()
 59455            .Include(t => t.Discipline)
 59456            .Include(t => t.Teacher)
 59457            .Include(t => t.Schedules)
 59458            .Include(t => t.Lessons)
 59459                .ThenInclude(l => l.Attendances)
 59460            .FirstAsync(x => x.Id == @class.Id);
 61
 59462        return @class.ToOut();
 62463    }
 64}