public async Task <IEnumerable <Standard> > GetStandardsList( string keyword, IList <int> routeIds, IList <int> levels, OrderBy orderBy, StandardFilter filter) { var standards = await _standardsRepository.GetStandards(routeIds, levels, filter); if (!string.IsNullOrEmpty(keyword)) { standards = FindByKeyword(standards, keyword); } standards = _sortOrderService.OrderBy(standards, orderBy, keyword); return(standards.Select(standard => (Standard)standard)); }
public IActionResult CreatePerformance([FromBody] PerformanceForCreationDto performance) { try { // Check the input has been passed in if (performance == null) { return(BadRequest()); } // Validate using the fluid validation rules if (!ModelState.IsValid) { return(BadRequest()); } // Check if the event exists var eventEntity = _eventRepository.GetEvent(performance.Event); if (eventEntity == null) { return(StatusCode(501, "Event Not Supported")); } // check if the athlete exists var athleteEntity = _athleteRepository.GetAthlete(performance.AthleteId); if (athleteEntity == null) { return(NotFound()); } // Check if the meeting exists already var meeting = _meetingRepository.GetMeeting(performance.MeetingId); if (meeting == null) { // Create the meeting meeting = new Meeting() { Name = performance.MeetingName, PowerOf10Id = performance.MeetingId }; _meetingRepository.AddMeeting(meeting); if (!_meetingRepository.Save()) { return(StatusCode(500, "A problem happened while handling your request")); } } // Check if the performance exists already // combo of the event id and the meeting id if (_performanceRepository.PerformanceExists(athleteEntity.Id, meeting.Id, eventEntity.Id, performance.Round)) { return(StatusCode(409, "Performance already registered with server")); } // Map the dto to a domain entity var finalPerformance = _mapper.Map <Performance>(performance); finalPerformance.EventId = eventEntity.Id; finalPerformance.MeetingId = meeting.Id; var ageGroup = string.Empty; // from the age of the athlete at performance work out which age group they were in switch (performance.Age) { case 7: case 8: case 9: case 10: ageGroup = "U11"; break; case 11: case 12: ageGroup = "U13"; break; case 13: case 14: ageGroup = "U15"; break; case 15: case 16: ageGroup = "U17"; break; case 17: case 18: case 19: ageGroup = "U20"; break; default: ageGroup = "SEN"; break; } // Get all standards applicable for the athlete and performance var eventStandards = _standardRepository.GetStandards(performance.Date.Year, eventEntity.Id, ageGroup, athleteEntity.Gender); // Try converting the performance into a double if (double.TryParse(performance.PerformanceValue, out var result)) { var standardsMet = eventStandards.Where(x => (result <= x.Value && x.Operator == "<") || (result >= x.Value && x.Operator == ">") ).Select(x => x.Standard).OrderBy(x => x.Priority); if (standardsMet.Any()) { finalPerformance.StandardId = standardsMet.First().Id; } } // Create the performance in the repository _performanceRepository.AddPerformance(finalPerformance); if (!_performanceRepository.Save()) { return(StatusCode(500, "A problem happened while handling your request")); } var createdPerformanceToReturn = _mapper.Map <PerformanceDto>(finalPerformance); return(CreatedAtRoute("GetPerformance", new { id = createdPerformanceToReturn.Id }, createdPerformanceToReturn)); } catch (Exception ex) { _logger.LogCritical("Exception while creating performance.", ex); return(StatusCode(500, "A problem happened while handling your request")); } }