public async Task <MeetupVm> AddMeetupAsync(MeetupVm meetup) { meetup.EnsureIsValid(); var original = await _meetupProvider.GetMeetupOrDefaultExtendedAsync(meetup.Id).ConfigureAwait(false); if (original != null) { throw new FormatException($"Данный {nameof(meetup.Id)} \"{meetup.Id}\" уже занят"); } var venue = await _venueProvider.GetVenueOrDefaultAsync(meetup.VenueId); var community = await _communityProvider.GetCommunityOrDefaultAsync(meetup.CommunityId); var entity = new Meetup { ExportId = meetup.Id, Venue = venue, Friends = new List <FriendAtMeetup>(), Sessions = new List <Session>(), Community = community, Name = meetup.Name }; foreach (var meetupFriendId in meetup.FriendIds) { var friend = await _friendProvider.GetFriendOrDefaultAsync(meetupFriendId); entity.Friends.Add(new FriendAtMeetup() { Friend = friend, Meetup = entity }); } foreach (var meetupSession in meetup.Sessions) { var talk = await _talkProvider.GetTalkOrDefaultAsync(meetupSession.TalkId); entity.Sessions.Add(new Session() { Talk = talk, Meetup = entity, StartTime = DateTime.Parse( meetupSession.StartTime, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal), EndTime = DateTime.Parse( meetupSession.EndTime, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal) }); } var res = await _meetupProvider.SaveMeetupAsync(entity).ConfigureAwait(false); return(res.ToVm()); }
public async Task <TalkVm> AddTalkAsync(TalkVm talk) { talk.EnsureIsValid(); var original = await _talkProvider.GetTalkOrDefaultAsync(talk.Id).ConfigureAwait(false); if (original != null) { throw new FormatException($"Данный {nameof(talk.Id)} \"{talk.Id}\" уже занят"); } var speakers = await _speakerProvider.GetSpeakersByIdsAsync(talk.SpeakerIds.Select(x => x.SpeakerId).ToList()); var entity = new Talk { ExportId = talk.Id, Speakers = new List <SpeakerTalk>() }.Extend(talk); foreach (var speaker in speakers) { entity.Speakers.Add(new SpeakerTalk { Speaker = speaker, Talk = entity }); } var res = await _talkProvider.SaveTalkAsync(entity).ConfigureAwait(false); return(res.ToVm()); }
public async Task <TalkVm> GetTalkAsync(string talkId) { var talk = await _talkProvider.GetTalkOrDefaultAsync(talkId).ConfigureAwait(false); return(talk.ToVm()); }