< Summary - Syki

Information
Class: Syki.Back.Features.Academic.AssignClassToClassroom.AssignClassToClassroomService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/AssignClassToClassroom/AssignClassToClassroomService.cs
Tag: 21_17346963026
Line coverage
100%
Covered lines: 28
Uncovered lines: 0
Coverable lines: 28
Total lines: 50
Line coverage: 100%
Branch coverage
72%
Covered branches: 16
Total branches: 22
Branch coverage: 72.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%
Assign()72.72%2222100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/AssignClassToClassroom/AssignClassToClassroomService.cs

#LineLine coverage
 1using Syki.Back.Features.Academic.CreateClass;
 2
 3namespace Syki.Back.Features.Academic.AssignClassToClassroom;
 4
 145public class AssignClassToClassroomService(SykiDbContext ctx) : IAcademicService
 6{
 7    public async Task<OneOf<SykiSuccess, SykiError>> Assign(Guid institutionId, Guid classroomId, AssignClassToClassroom
 8    {
 149        var classroom = await ctx.Classrooms.FirstOrDefaultAsync(c => c.InstitutionId == institutionId && c.Id == classr
 1610        if (classroom == null) return new ClassroomNotFound();
 11
 1212        var @class = await ctx.Classes.FirstOrDefaultAsync(c => c.InstitutionId == institutionId && c.Id == data.ClassId
 1413        if (@class == null) return new ClassNotFound();
 14
 1015        if (@class.CampusId != classroom.CampusId) return new ClassAndClassroomShouldStayOnSameCampus();
 16
 1217        if (@class.Vacancies > classroom.Capacity) return new ClassVacanciesGreaterThanClassroomCapacity();
 18
 819        if (data.Schedules == null || data.Schedules.Count == 0) return new InvalidScheduleForAssignClassToClassroom();
 20
 821        var ids = await ctx.ClassroomsClasses.Where(c => c.ClassroomId == classroomId && c.IsActive).Select(x => x.Class
 822        var currentSchedules = await ctx.Schedules.Where(x => x.ClassroomId == classroomId && x.ClassId != null && ids.C
 23
 824        data.Schedules.AddRange(currentSchedules.ConvertAll(x => new ScheduleIn(x.Day, x.Start, x.End)));
 25
 826        var schedulesResult = data.Schedules.ToHashSet().ToList().ToSchedules();
 1427        if (schedulesResult.IsError) return schedulesResult.Error;
 28
 229        ctx.RemoveRange(currentSchedules);
 30
 231        var newSchedules = schedulesResult.Success;
 232        newSchedules.ForEach(x =>
 233        {
 234            x.ClassId = @class.Id;
 235            x.ClassroomId = classroom.Id;
 236            x.TeacherId = @class.TeacherId;
 437        });
 238        ctx.AddRange(newSchedules);
 39
 240        var assignExists = await ctx.ClassroomsClasses.AnyAsync(x => x.ClassroomId == classroom.Id && x.ClassId == @clas
 241        if (!assignExists)
 42        {
 243            ctx.Add(new ClassroomClass(classroom.Id, @class.Id));
 44        }
 45
 246        await ctx.SaveChangesAsync();
 47
 248        return new SykiSuccess();
 1449    }
 50}