< Summary - Syki

Information
Class: Syki.Back.Features.Student.GetStudentClassActivities.GetStudentClassActivitiesService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Student/GetStudentClassActivities/GetStudentClassActivitiesService.cs
Tag: 4_16869239191
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 44
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
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%
Get()100%44100%

File(s)

/home/runner/work/syki/syki/Back/Features/Student/GetStudentClassActivities/GetStudentClassActivitiesService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Student.GetStudentClassActivities;
 2
 43public class GetStudentClassActivitiesService(SykiDbContext ctx) : IStudentService
 4{
 5    public async Task<OneOf<List<StudentClassActivityOut>, SykiError>> Get(Guid userId, Guid classId)
 6    {
 47        var classOk = await ctx.ClassesStudents.AnyAsync(x => x.ClassId == classId && x.SykiStudentId == userId);
 68        if (!classOk) return new ClassNotFound();
 9
 210        var activities = await ctx.ClassActivities.AsNoTracking()
 211            .Where(x => x.ClassId == classId)
 212            .OrderBy(x => x.Note)
 213            .ThenBy(x => x.CreatedAt)
 214            .ToListAsync();
 815        var ids = activities.ConvertAll(x => x.Id);
 216        var works = await ctx.ClassActivityWorks.AsNoTracking()
 217            .Where(x => ids.Contains(x.ClassActivityId) && x.SykiStudentId == userId).ToListAsync();
 18
 219        var result = new List<StudentClassActivityOut>();
 1620        foreach (var activity in activities)
 21        {
 1822            var work = works.First(x => x.ClassActivityId == activity.Id);
 623            result.Add(new()
 624            {
 625                Id = activity.Id,
 626                ClassId = activity.ClassId,
 627                Note = activity.Note,
 628                Title = activity.Title,
 629                Description = activity.Description,
 630                Type = activity.Type,
 631                Status = activity.Status,
 632                Weight = activity.Weight,
 633                WorkStatus = work.Status,
 634                CreatedAt = activity.CreatedAt,
 635                DueDate = activity.DueDate,
 636                DueHour = activity.DueHour,
 637                Value = work.Note,
 638                PonderedValue = work.Note * activity.Weight / 100M,
 639            });
 40        }
 41
 242        return result;
 443    }
 44}