public Domain.Entities.Student Add(Domain.Entities.Student entity)
        {
            if (!_person.CheckIfExists(entity.Person))
            {
                try
                {
                    _person.Add(entity.Person);
                }
                catch (Exception ex)
                {
                    entity.AddError(ex.Message);
                    return(entity);
                }
            }

            if (VerifyStudentAlreadyEnrolled(entity))
            {
                entity.AddError("Estudante já matriculado");
                return(entity);
            }

            //TODO INCLUIR VERIFICAÇÃO SE ESTUDANTE TENTANDO SE MATRICULAR É PROFESSOR NO CURSO
            entity.EnrollmentID = GenerateEnrollmentID(entity);

            entity.Status = EEnrollmentStatus.WAITING_APROVEMENT;

            _studentRepository.Add(entity);

            //check if the person is a professor
            return(entity);
        }
        private ValidationResult VerifyEnrollmentStatusChanges(EEnrollmentStatus currentStatus, Domain.Entities.Student entity)
        {
            var validationResult = new ValidationResult();

            if (currentStatus != EEnrollmentStatus.WAITING_APROVEMENT && entity.Status == EEnrollmentStatus.WAITING_APROVEMENT)
            {
                entity.AddError("Não é possível configurar esta matricula como 'Aguardando Aprovação', pois ela já foi aprovada anteriormente");
                return(validationResult);
            }

            if (currentStatus == EEnrollmentStatus.CANCELED && entity.Status != EEnrollmentStatus.CANCELED)
            {
                entity.AddError("Não é possível alterar o status de uma matricula cancelada.");
                return(validationResult);
            }

            if (StatusAvaiableToSuspension.Contains(currentStatus) && entity.Status == EEnrollmentStatus.SUSPEND)
            {
                entity.AddError($"A matrícula {entity.EnrollmentID} não pode ser cancelada pois está no status {entity.Status}");
                return(validationResult);
            }

            if ((!StatusAvaiableToConclusion.Contains(currentStatus) && entity.Status == EEnrollmentStatus.COMPLETED) || !VerifyIfStudentIsAllowedToCompleteCourse(entity))
            {
                //TODO - RETORNAR NESTE MÉTODO AS PENDÊNCIAS
                entity.AddError($"A matrícula {entity.EnrollmentID} não pode ser concluída pois ainda restam pendências a serem resolvidas.");
                return(validationResult);
            }

            return(validationResult);
        }