< Summary - Syki

Information
Class: Syki.Back.Features.Students.GetStudents.GetStudentsService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Students/GetStudents/GetStudentsService.cs
Tag: 97_27801654829
Line coverage
87%
Covered lines: 27
Uncovered lines: 4
Coverable lines: 31
Total lines: 47
Line coverage: 87%
Branch coverage
40%
Covered branches: 4
Total branches: 10
Branch coverage: 40%
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()40%101091.3%

File(s)

/home/runner/work/syki/syki/Back/Features/Students/GetStudents/GetStudentsService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Students.GetStudents;
 2
 23public class GetStudentsService(SykiDbContext ctx) : ISykiService
 4{
 5    public async Task<GetStudentsOut> Get()
 6    {
 27        var institutionId = ctx.RequestUser.InstitutionId;
 8
 29        var students = await ctx.Students.AsNoTracking()
 210            .Include(s => s.User)
 211            .Where(s => s.InstitutionId == institutionId)
 212            .OrderBy(s => s.Name)
 213            .ToListAsync();
 614        var studentIds = students.Select(s => s.Id).ToHashSet();
 15
 216        var studentEnrollments = await ctx.StudentCourseEnrollments.AsNoTracking()
 217            .Where(e => studentIds.Contains(e.StudentId) && e.LeftAt == null)
 218            .ToListAsync();
 219        var courseOfferingIds = studentEnrollments.Select(e => e.CourseOfferingId).ToHashSet();
 20
 221        var courseOfferings = await ctx.CourseOfferings.AsNoTracking()
 222            .Where(co => courseOfferingIds.Contains(co.Id))
 223            .Select(g => new { g.Id, g.CourseId })
 224            .ToListAsync();
 225        var coursesIds = courseOfferings.Select(co => co.CourseId).ToHashSet();
 226        var courses = await ctx.Courses.AsNoTracking()
 227            .Where(c => coursesIds.Contains(c.Id))
 228            .Select(c => new { c.Id, c.Name })
 229            .ToListAsync();
 30
 31
 632        var result = students.ConvertAll(s => s.ToGetStudentsItemOut());
 1233        foreach (var item in result)
 34        {
 435            var enrollment = studentEnrollments.FirstOrDefault(e => e.StudentId == item.Id);
 436            if (enrollment == null) continue;
 37
 038            var courseOffering = courseOfferings.FirstOrDefault(co => co.Id == enrollment.CourseOfferingId);
 039            if (courseOffering == null) continue;
 40
 041            var course = courses.FirstOrDefault(c => c.Id == courseOffering.CourseId);
 042            item.Course = course?.Name ?? "-";
 43        }
 44
 245        return new GetStudentsOut { Total = result.Count, Items = result };
 246    }
 47}