< Summary - Estud

Information
Class: Estud.Back.Features.Courses.AddCourseDisciplines.AddCourseDisciplinesService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Courses/AddCourseDisciplines/AddCourseDisciplinesService.cs
Tag: 114_29044117136
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 40
Line coverage: 100%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor()50%22100%
.cctor()100%11100%
Add()100%66100%

File(s)

/home/runner/work/syki/syki/Back/Features/Courses/AddCourseDisciplines/AddCourseDisciplinesService.cs

#LineLine coverage
 1using Estud.Back.Domain.Courses;
 2
 3namespace Estud.Back.Features.Courses.AddCourseDisciplines;
 4
 285public class AddCourseDisciplinesService(EstudDbContext ctx) : IEstudService
 6{
 7    private class Validator : AbstractValidator<AddCourseDisciplinesIn>
 8    {
 29        public Validator()
 10        {
 211            RuleFor(x => x.Disciplines).NotEmpty().WithError(InvalidDisciplinesList.I);
 3012            RuleFor(x => x.Disciplines).Must(x => x != null && x.IsAllDistinct()).WithError(InvalidDisciplinesList.I);
 213        }
 14    }
 215    private static readonly Validator V = new();
 16
 17    public async Task<OneOf<EstudSuccess, EstudError>> Add(AddCourseDisciplinesIn data)
 18    {
 3019        if (V.Run(data, out var error)) return error;
 20
 2621        var course = await ctx.Courses.Include(c => c.Links)
 2622            .FirstOrDefaultAsync(x => x.InstitutionId == ctx.RequestUser.InstitutionId && x.Id == data.CourseId);
 2823        if (course == null) return CourseNotFound.I;
 24
 2425        var validDisciplineIds = await ctx.Disciplines
 2426            .Where(d => d.InstitutionId == ctx.RequestUser.InstitutionId && data.Disciplines.Contains(d.Id))
 2427            .Select(d => d.Id)
 2428            .ToListAsync();
 29
 2830        if (validDisciplineIds.Count != data.Disciplines.Count) return InvalidDisciplinesList.I;
 31
 2032        var existingDisciplineIds = course.Links.Select(l => l.DisciplineId).ToHashSet();
 22633        validDisciplineIds.Where(id => !existingDisciplineIds.Contains(id)).ToList()
 22634            .ForEach(id => course.Links.Add(new CourseDiscipline { DisciplineId = id }));
 35
 2036        await ctx.SaveChangesAsync();
 37
 2038        return EstudSuccess.I;
 2839    }
 40}