private Discipline VerifyDiscipline(DisciplineDto discipline, HashSet <string> disciplineIds, HashSet <string> rulesNames) { if (string.IsNullOrEmpty(discipline.DisciplineId)) { throw new ArgumentNullException("Missing DisciplineId"); } if (string.IsNullOrEmpty(discipline.LongName)) { throw new ArgumentNullException("Missing Discipline.Name"); } if (string.IsNullOrEmpty(discipline.Rules)) { throw new ArgumentNullException("Missing Discipline.Rules"); } if (!rulesNames.Contains(discipline.Rules)) { throw new ArgumentOutOfRangeException("Unknown Discipline.Rules " + discipline.Rules); } if (!disciplineIds.Add(discipline.DisciplineId)) { throw new ArgumentOutOfRangeException("Duplicate DisciplineId " + discipline.DisciplineId); } return(new Discipline { DisciplineId = discipline.DisciplineId, LongName = discipline.LongName, ShortName = discipline.ShortName, AnnouncementsClosed = discipline.AnnouncementsClosed, ResultsClosed = discipline.ResultsClosed, AnnouncementsPublic = discipline.AnnouncementsPublic, ResultsPublic = discipline.ResultsPublic, Rules = discipline.Rules, Sex = Sex.Parse(discipline.Sex), Category = discipline.Category }); }
public void PostAthlete(string raceId, string athleteId, AthleteDto incomingAthlete) { if (string.IsNullOrEmpty(raceId)) { throw new ArgumentNullException("Missing RaceId"); } if (string.IsNullOrEmpty(athleteId)) { throw new ArgumentNullException("Missing AthleteId"); } var repositorySet = repositorySetProvider.GetRepositorySet(raceId); bool requireProfile = false; var athleteModel = repositorySet.Athletes.FindAthlete(athleteId); if (athleteModel == null) { athleteModel = new Athlete(); athleteModel.AthleteId = athleteId; athleteModel.Announcements = new List <Announcement>(); athleteModel.ActualResults = new List <ActualResult>(); requireProfile = true; } if (incomingAthlete.Profile == null) { if (requireProfile) { throw new ArgumentNullException("Missing Profile"); } } else { if (string.IsNullOrEmpty(incomingAthlete.Profile.FirstName)) { throw new ArgumentNullException("Missing FirstName"); } if (string.IsNullOrEmpty(incomingAthlete.Profile.Surname)) { throw new ArgumentNullException("Missing Surname"); } athleteModel.FirstName = incomingAthlete.Profile.FirstName; athleteModel.Surname = incomingAthlete.Profile.Surname; athleteModel.Club = incomingAthlete.Profile.Club; athleteModel.CountryName = incomingAthlete.Profile.CountryName; athleteModel.ProfilePhotoName = incomingAthlete.Profile.ProfilePhotoName; athleteModel.Sex = Sex.Parse(incomingAthlete.Profile.Sex); athleteModel.Category = incomingAthlete.Profile.Category; athleteModel.ModeratorNotes = incomingAthlete.Profile.ModeratorNotes; } if (incomingAthlete.Announcements != null) { foreach (var incomingAnnouncement in incomingAthlete.Announcements) { string disciplineId = incomingAnnouncement.DisciplineId; if (string.IsNullOrEmpty(disciplineId)) { throw new ArgumentNullException("Missing Announcement.DisciplineId"); } Discipline discipline = repositorySet.Disciplines.FindDiscipline(disciplineId); if (discipline == null) { throw new ArgumentOutOfRangeException("Unknown Announcement.DisciplineId " + disciplineId); } IRules disciplineRules = rulesRepository.Get(discipline.Rules); if (discipline.AnnouncementsClosed) { throw new ArgumentOutOfRangeException("Discipline " + disciplineId + " already closed announcements"); } if (incomingAnnouncement.Performance == null) { athleteModel.Announcements.RemoveAll(a => a.DisciplineId == disciplineId); } else { var newAnnouncement = false; var announcementModel = athleteModel.Announcements.FirstOrDefault(a => a.DisciplineId == disciplineId); if (announcementModel == null) { announcementModel = new Announcement(); announcementModel.DisciplineId = incomingAnnouncement.DisciplineId; newAnnouncement = true; } if (disciplineRules.HasDuration && incomingAnnouncement.Performance.Duration == null) { throw new ArgumentNullException("Missing Announcement.Duration for " + disciplineId); } if (disciplineRules.HasDepth && incomingAnnouncement.Performance.Depth == null) { throw new ArgumentNullException("Missing Announcement.Depth for " + disciplineId); } if (disciplineRules.HasDistance && incomingAnnouncement.Performance.Distance == null) { throw new ArgumentNullException("Missing Announcement.Distance for " + disciplineId); } announcementModel.ModeratorNotes = incomingAnnouncement.ModeratorNotes; announcementModel.Performance = ExtractPerformance(incomingAnnouncement.Performance); if (newAnnouncement) { athleteModel.Announcements.Add(announcementModel); } } } } repositorySet.Athletes.SaveAthlete(athleteModel); }