< Summary - Syki

Information
Class: Syki.Back.Features.Student.GetStudentClassFrequency.GetStudentClassFrequencyService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Student/GetStudentClassFrequency/GetStudentClassFrequencyService.cs
Tag: 4_16869239191
Line coverage
0%
Covered lines: 0
Uncovered lines: 31
Coverable lines: 31
Total lines: 45
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
Get()0%7280%

File(s)

/home/runner/work/syki/syki/Back/Features/Student/GetStudentClassFrequency/GetStudentClassFrequencyService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Student.GetStudentClassFrequency;
 2
 03public class GetStudentClassFrequencyService(SykiDbContext ctx) : IStudentService
 4{
 5    public async Task<OneOf<GetStudentClassFrequencyOut, SykiError>> Get(Guid studentId, Guid classId)
 6    {
 07        var classOk = await ctx.ClassesStudents.AnyAsync(x => x.ClassId == classId && x.SykiStudentId == studentId);
 08        if (!classOk) return new ClassNotFound();
 9
 010        var lessons = await ctx.Lessons.AsNoTracking()
 011            .Where(x => x.ClassId == classId)
 012            .OrderBy(x => x.Number)
 013            .ToListAsync();
 14
 015        var attendances = await ctx.Attendances.AsNoTracking().Where(x => x.ClassId == classId && x.StudentId == student
 016        var presences = attendances.Count(x => x.Present);
 017        var absences = attendances.Count - presences;
 18
 019        var lessonsOut = new List<GetStudentClassLessonFrequencyOut>();
 020        foreach (var lesson in lessons)
 21        {
 022            var attendance = attendances.FirstOrDefault(x => x.LessonId == lesson.Id);
 023            lessonsOut.Add(new()
 024            {
 025                Lesson = lesson.Number,
 026                Frequency = attendance == null ? 0.50M : attendance.Present ? 1 : 0,
 027                LessonDate = $"{lesson.Date} {lesson.StartAt.GetDescription()}-{lesson.EndAt.GetDescription()}"
 028            });
 29        }
 30
 031        if (attendances.Count == 0) return new GetStudentClassFrequencyOut { TotalLessons = lessons.Count, Lessons = les
 32
 033        var frequency = Math.Round(100M*(1M * presences / (1M * attendances.Count)), 2);
 34
 035        return new GetStudentClassFrequencyOut
 036        {
 037            Frequency = frequency,
 038            Presences = presences,
 039            Attendances = attendances.Count,
 040            Absences = absences,
 041            TotalLessons = lessons.Count,
 042            Lessons = lessonsOut,
 043        };
 044    }
 45}