< Summary - Syki

Information
Class: Syki.Back.Features.Academic.CreateCourseCurriculum.CourseCurriculum
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Academic/CreateCourseCurriculum/CourseCurriculum.cs
Tag: 21_17346963026
Line coverage
100%
Covered lines: 49
Uncovered lines: 0
Coverable lines: 49
Total lines: 84
Line coverage: 100%
Branch coverage
100%
Covered branches: 12
Total branches: 12
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Id()100%11100%
get_InstitutionId()100%11100%
get_CourseId()100%11100%
get_Course()100%11100%
get_Name()100%11100%
get_Disciplines()100%11100%
get_Links()100%11100%
.ctor(...)100%11100%
AddDisciplines(...)100%11100%
AddDisciplinePreRequisites(...)100%1010100%
ToOut()100%22100%

File(s)

/home/runner/work/syki/syki/Back/Features/Academic/CreateCourseCurriculum/CourseCurriculum.cs

#LineLine coverage
 1using Syki.Back.Features.Academic.CreateCourse;
 2using Syki.Back.Features.Academic.CreateDiscipline;
 3
 4namespace Syki.Back.Features.Academic.CreateCourseCurriculum;
 5
 6/// <summary>
 7/// Grade Curricular de um Curso.
 8/// Um mesmo Curso pode possuir diversas Grades diferentes.
 9/// </summary>
 10public class CourseCurriculum
 11{
 279212    public Guid Id { get; set; }
 170613    public Guid InstitutionId { get; set; }
 225414    public Guid CourseId { get; set; }
 55015    public Course Course { get; set; }
 277016    public string Name { get; set; }
 226017    public List<Discipline> Disciplines { get; set; }
 673818    public List<CourseCurriculumDiscipline> Links { get; set; }
 19
 170620    public CourseCurriculum(
 170621        Guid institutionId,
 170622        Guid courseId,
 170623        string name
 170624    ) {
 170625        Id = Guid.CreateVersion7();
 170626        InstitutionId = institutionId;
 170627        CourseId = courseId;
 170628        Name = name;
 170629        Disciplines = [];
 170630        Links = [];
 170631    }
 32
 33    public void AddDisciplines(List<CreateCourseCurriculumDisciplineIn> disciplines)
 34    {
 35        // TODO: Validar que não têm disciplinas repetidas (mesmo id)
 36
 53637        disciplines.ForEach(d =>
 434438            Links.Add(new(d.Id, d.Period, d.Credits, d.Workload))
 53639        );
 53640    }
 41
 42    public OneOf<SykiSuccess, SykiError> AddDisciplinePreRequisites(Guid targetDisciplineId, List<Guid> preRequisites)
 43    {
 11844        if (!Links.Any(x => x.DisciplineId == targetDisciplineId))
 245            return new DisciplineNotFound();
 46
 10647        if (preRequisites.Contains(targetDisciplineId) || !preRequisites.IsSubsetOf(Links.ConvertAll(d => d.DisciplineId
 448            return new InvalidDisciplinesList();
 49
 5050        var targetDiscipline = Links.First(x => x.DisciplineId == targetDisciplineId);
 2051        foreach (var id in preRequisites)
 52        {
 5253            if (Links.First(x => x.DisciplineId == id).Period >= targetDiscipline.Period)
 454                return new InvalidDisciplinesList();
 55        }
 56
 257        targetDiscipline.AddPreRequisites(preRequisites);
 58
 259        return new SykiSuccess();
 460    }
 61
 62    public CourseCurriculumOut ToOut()
 63    {
 54664        var result = new CourseCurriculumOut
 54665        {
 54666            Id = Id,
 54667            CourseId = CourseId,
 54668            CourseName = Course.Name,
 54669            Name = Name,
 437270            Disciplines = Disciplines.ConvertAll(d => d.ToOut()),
 54671        };
 72
 983673        foreach (var link in Links)
 74        {
 2839275            var discipline = result.Disciplines.First(x => x.Id == link.DisciplineId);
 437276            discipline.Period = link.Period;
 437277            discipline.Credits = link.Credits;
 437278            discipline.Workload = link.Workload;
 437279            discipline.PreRequisites = link.PreRequisites;
 80        }
 81
 54682        return result;
 83    }
 84}