< 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: 4_16869239191
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{
 273412    public Guid Id { get; set; }
 167213    public Guid InstitutionId { get; set; }
 220814    public Guid CourseId { get; set; }
 53815    public Course Course { get; set; }
 271416    public string Name { get; set; }
 221417    public List<Discipline> Disciplines { get; set; }
 657218    public List<CourseCurriculumDiscipline> Links { get; set; }
 19
 167220    public CourseCurriculum(
 167221        Guid institutionId,
 167222        Guid courseId,
 167223        string name
 167224    ) {
 167225        Id = Guid.CreateVersion7();
 167226        InstitutionId = institutionId;
 167227        CourseId = courseId;
 167228        Name = name;
 167229        Disciplines = [];
 167230        Links = [];
 167231    }
 32
 33    public void AddDisciplines(List<CreateCourseCurriculumDisciplineIn> disciplines)
 34    {
 35        // TODO: Validar que não têm disciplinas repetidas (mesmo id)
 36
 52437        disciplines.ForEach(d =>
 422438            Links.Add(new(d.Id, d.Period, d.Credits, d.Workload))
 52439        );
 52440    }
 41
 42    public OneOf<SykiSuccess, SykiError> AddDisciplinePreRequisites(Guid targetDisciplineId, List<Guid> preRequisites)
 43    {
 11044        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
 4850        var targetDiscipline = Links.First(x => x.DisciplineId == targetDisciplineId);
 2051        foreach (var id in preRequisites)
 52        {
 3653            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    {
 53464        var result = new CourseCurriculumOut
 53465        {
 53466            Id = Id,
 53467            CourseId = CourseId,
 53468            CourseName = Course.Name,
 53469            Name = Name,
 425270            Disciplines = Disciplines.ConvertAll(d => d.ToOut()),
 53471        };
 72
 957273        foreach (var link in Links)
 74        {
 2749275            var discipline = result.Disciplines.First(x => x.Id == link.DisciplineId);
 425276            discipline.Period = link.Period;
 425277            discipline.Credits = link.Credits;
 425278            discipline.Workload = link.Workload;
 425279            discipline.PreRequisites = link.PreRequisites;
 80        }
 81
 53482        return result;
 83    }
 84}