< 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: 4_16869239191
Line coverage
95%
Covered lines: 38
Uncovered lines: 2
Coverable lines: 40
Total lines: 62
Line coverage: 95%
Branch coverage
100%
Covered branches: 12
Total branches: 12
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%
Create()100%1212100%
CreateWithThrowOnError()100%210%

File(s)

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

#LineLine coverage
 1namespace Syki.Back.Features.Academic.CreateClass;
 2
 6083public class CreateClassService(SykiDbContext ctx) : IAcademicService
 4{
 5    public async Task<OneOf<ClassOut, SykiError>> Create(Guid institutionId, CreateClassIn data)
 6    {
 6087        var disciplineOk = await ctx.Disciplines.AnyAsync(x => x.InstitutionId == institutionId && x.Id == data.Discipli
 6108        if (!disciplineOk) return new DisciplineNotFound();
 9
 60610        var teacherOk = await ctx.Teachers.AnyAsync(p => p.InstitutionId == institutionId && p.Id == data.TeacherId);
 60811        if (!teacherOk) return new TeacherNotFound();
 12
 60413        var periodExists = await ctx.AcademicPeriodExists(institutionId, data.Period);
 60614        if (!periodExists) return new AcademicPeriodNotFound();
 15
 121216        var schedules = data.Schedules.ConvertAll(h => Schedule.New(h.Day, h.Start, h.End));
 241617        foreach (var schedule in schedules)
 18        {
 61219            if (schedule.IsError) return schedule.Error;
 20        }
 21
 59822        var result = Class.New(
 59823            institutionId,
 59824            data.DisciplineId,
 59825            data.TeacherId,
 59826            data.Period,
 59827            data.Vacancies,
 60228            schedules.ConvertAll(x => x.Success)
 59829        );
 30
 60031        if (result.IsError) return result.Error;
 32
 59633        var @class = result.Success;
 34
 59635        ctx.Add(@class);
 59636        await ctx.SaveChangesAsync();
 37
 59638        @class = await ctx.Classes
 59639            .Include(c => c.Period)
 59640            .Include(t => t.Lessons)
 59641            .Include(t => t.Schedules)
 59642            .FirstAsync(x => x.Id == @class.Id);
 43
 59644        @class.CreateLessons();
 59645        await ctx.SaveChangesAsync();
 46
 59647        @class = await ctx.Classes.AsNoTracking()
 59648            .Include(t => t.Discipline)
 59649            .Include(t => t.Teacher)
 59650            .Include(t => t.Schedules)
 59651            .Include(t => t.Lessons)
 59652                .ThenInclude(l => l.Attendances)
 59653            .FirstAsync(x => x.Id == @class.Id);
 54
 59655        return @class.ToOut();
 60856    }
 57
 58    public async Task CreateWithThrowOnError(Guid institutionId, CreateClassIn data)
 59    {
 060        (await Create(institutionId, data)).ThrowOnError();
 061    }
 62}