< Summary - Syki

Information
Class: Syki.Back.Features.Academic.GetCampi.GetCampiService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/GetCampi/GetCampiService.cs
Tag: 21_17346963026
Line coverage
100%
Covered lines: 35
Uncovered lines: 0
Coverable lines: 35
Total lines: 48
Line coverage: 100%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
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%11100%
get_Id()100%11100%
get_Students()100%11100%
get_Teachers()100%11100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/GetCampi/GetCampiService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Academic.GetCampi;
 2
 83public class GetCampiService(SykiDbContext ctx) : IAcademicService
 4{
 5    public async Task<GetCampiOut> Get()
 6    {
 87        var campi = await ctx.Campi.AsNoTracking()
 88            .Where(c => c.InstitutionId == ctx.InstitutionId)
 89            .OrderBy(c => c.Name)
 810            .ToListAsync();
 11
 812        FormattableString sql = $@"
 813            SELECT
 814                c.id AS id,
 815                count(DISTINCT s.id) AS students,
 816                count(DISTINCT tc.syki_teacher_id) AS teachers
 817            FROM
 818              syki.campi c
 819            LEFT JOIN
 820              syki.teachers__campi tc ON tc.campus_id = c.id
 821            LEFT JOIN
 822                syki.course_offerings co ON co.campus_id = c.id
 823            LEFT JOIN
 824                syki.students s ON s.course_offering_id = co.id
 825            WHERE
 826                c.institution_id = {ctx.InstitutionId}
 827            GROUP BY
 828                c.id
 829        ";
 830        var totals = await ctx.Database.SqlQuery<CampusEnrollmentDto>(sql).ToListAsync();
 31
 832        var items = campi.ConvertAll(x =>
 833        {
 1834            var students = totals.FirstOrDefault(t => t.Id == x.Id)?.Students ?? 0;
 1835            var teachers = totals.FirstOrDefault(t => t.Id == x.Id)?.Teachers ?? 0;
 836            return x.ToGetCampiItemOut(students, teachers);
 837        });
 38
 839        return new GetCampiOut() { Total = items.Count, Items = items };
 840    }
 41
 42    private class CampusEnrollmentDto
 43    {
 2044        public Guid Id { get; set; }
 845        public int Students { get; set; }
 846        public int Teachers { get; set; }
 47    }
 48}