< Summary - Syki

Information
Class: Syki.Back.Features.Teacher.CreateLessonAttendance.CreateLessonAttendanceService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Teacher/CreateLessonAttendance/CreateLessonAttendanceService.cs
Tag: 4_16869239191
Line coverage
87%
Covered lines: 21
Uncovered lines: 3
Coverable lines: 24
Total lines: 46
Line coverage: 87.5%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
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()90%101094.73%
CreateWithThrowOnError()100%210%

File(s)

/home/runner/work/syki/syki/Back/Features/Teacher/CreateLessonAttendance/CreateLessonAttendanceService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Teacher.CreateLessonAttendance;
 2
 2063public class CreateLessonAttendanceService(SykiDbContext ctx) : ITeacherService
 4{
 5    public async Task<OneOf<SykiSuccess, SykiError>> Create(Guid teacherId, Guid lessonId, CreateLessonAttendanceIn data
 6    {
 2067        var lesson = await ctx.Lessons.Include(l => l.Attendances).FirstOrDefaultAsync(x => x.Id == lessonId);
 2088        if (lesson == null) return new LessonNotFound();
 9
 20410        var @class = await ctx.Classes
 20411            .Include(x => x.Students)
 20412            .FirstOrDefaultAsync(x => x.Id == lesson.ClassId && x.TeacherId == teacherId);
 20613        if (@class == null) return new ClassNotFound();
 14
 40015        var allStudents = @class.Students.Select(x => x.Id).ToList();
 20216        if (!data.PresentStudents.IsSubsetOf(allStudents))
 217            return new InvalidStudentsList();
 18
 20019        var attendances = lesson.Attendances;
 79620        foreach (var studentId in allStudents)
 21        {
 19822            var present = data.PresentStudents.Contains(studentId);
 19823            var attendance = attendances.FirstOrDefault(a => a.StudentId == studentId);
 19824            if (attendance != null)
 25            {
 026                attendance.Update(present);
 27            }
 28            else
 29            {
 19830                attendance = new ClassLessonAttendance(@class.Id, lesson.Id, studentId, present);
 19831                ctx.Add(attendance);
 32            }
 33        }
 34
 20035        lesson.Finish();
 36
 20037        await ctx.SaveChangesAsync();
 38
 20039        return new SykiSuccess();
 20640    }
 41
 42    public async Task CreateWithThrowOnError(Guid teacherId, Guid lessonId, CreateLessonAttendanceIn data)
 43    {
 044        (await Create(teacherId, lessonId, data)).ThrowOnError();
 045    }
 46}