public GetCoursePrerequisitesResponse GetCoursePrerequisites(IdRequest request)
        {
            var response = new IdRequestValidator().Validate(request).ToResponse <GetCoursePrerequisitesResponse>();

            if (!response.IsSuccessful)
            {
                return(response);
            }

            try
            {
                response.Prerequisites = _coursesRepository.GetCoursePrerequisites(request.Id);
            }
            catch (Exception ex)
            {
                response.IsSuccessful = false;
                response.Errors.Add("An error has occurred while getting course prerequisites!");
                _logger.LogException(ex);
            }
            return(response);
        }
        public CourseResponse GetCourseById(IdRequest request)
        {
            var response = new IdRequestValidator().Validate(request).ToResponse <CourseResponse>();

            if (!response.IsSuccessful)
            {
                return(response);
            }

            try
            {
                response.Course = _coursesRepository.GetCourseById(request.Id);
            }
            catch (Exception ex)
            {
                response.IsSuccessful = false;
                response.Errors.Add("An error has occurred while getting the specific course!");
                _logger.LogException(ex);
            }
            return(response);
        }
        public ResponseBase DeleteCourse(IdRequest request)
        {
            var response = new IdRequestValidator().Validate(request).ToResponse <ResponseBase>();

            if (!response.IsSuccessful)
            {
                return(response);
            }

            try
            {
                _coursesRepository.DeleteCourse(_coursesRepository.GetCourseById(request.Id));
            }
            catch (Exception ex)
            {
                response.IsSuccessful = false;
                response.Errors.Add("Error while trying to delete course");
                _logger.LogException(ex);
            }
            return(response);
        }
        public ResponseBase DeleteProgram(IdRequest request)
        {
            var response = new IdRequestValidator().Validate(request).ToResponse <ResponseBase>();

            if (!response.IsSuccessful)
            {
                return(response);
            }

            try
            {
                _programsRepository.RemoveProgram(_programsRepository.GetProgramById(request.Id));
            }
            catch (Exception ex)
            {
                response.IsSuccessful = false;
                response.Errors.Add("An error has occurred while deleting the program!");
                _logger.LogException(ex);
            }
            return(response);
        }
        public ProgramResponse GetProgramsById(IdRequest request)
        {
            var response = new IdRequestValidator().Validate(request).ToResponse <ProgramResponse>();

            if (!response.IsSuccessful)
            {
                return(response);
            }

            try
            {
                response.Program = _programsRepository.GetProgramById(request.Id);
            }
            catch (Exception ex)
            {
                response.IsSuccessful = false;
                response.Errors.Add("An error has occurred while getting the specific program!");
                _logger.LogException(ex);
            }

            return(response);
        }