public Response CreateTerm(TermSetupRequest request) { var evaluationResult = setupRequestValidator.Validate(request); if (!evaluationResult.IsValid) { return(Response.CreateResponse(evaluationResult.Messages)); } if (!request.TermId.IsEmpty()) { return(Response.CreateResponse(new IllegalOperationException("No term id must be specified when creating new terms"))); } if (HasOverlappingPeriods(request.ClubId, request.StartDate, request.EndDate)) { return(Response.CreateResponse(new IllegalOperationException("This term overlaps with another one"))); } if (HasExistingOpenTerms(request.ClubId)) { return(Response.CreateResponse(new IllegalOperationException("There can only be one open term at any given time. Please close any existing open term."))); } try{ evaluationRepository.AddTerm(request); termSearchEngine.UpdateCache(); return(Response.CreateSuccessResponse()); } catch (Exception ex) { return(Response.CreateResponse(ex)); } }