public async Task <TalkVm> UpdateTalkAsync(TalkVm talk) { talk.EnsureIsValid(); var original = await _talkProvider.GetTalkOrDefaultExtendedAsync(talk.Id).ConfigureAwait(false); original.ExportId = talk.Id; original.Title = talk.Title; original.Description = talk.Description; original.CodeUrl = talk.CodeUrl; original.SlidesUrl = talk.SlidesUrl; original.VideoUrl = talk.VideoUrl; var speakers = await _speakerProvider.GetSpeakersByIdsAsync(talk.SpeakerIds.Select(x => x.SpeakerId).ToList()); foreach (var oldSpeaker in original.Speakers) { _talkProvider.RemoveSpeaker(original, oldSpeaker.SpeakerId); } foreach (var speaker in speakers) { original.Speakers.Add(new SpeakerTalk { Speaker = speaker, Talk = original }); } await _unitOfWork.SaveChangesAsync(); return(original.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> UpdateTalkAsync(TalkVm talk) { var result = await _talkService.UpdateTalkAsync(talk).ConfigureAwait(false); _cache.Remove(nameof(GetAllTalksAsync)); return(result); }
public async Task <TalkVm> UpdateTalkAsync(TalkVm talk) { talk.EnsureIsValid(); var original = await _talkProvider.GetTalkOrDefaultAsync(talk.Id).ConfigureAwait(false); var res = await _talkProvider.SaveTalkAsync(original.Extend(talk)).ConfigureAwait(false); return(res.ToVm()); }
public static Talk Extend(this Talk original, TalkVm talk) => new Talk { Id = original.Id, SpeakerIds = talk.SpeakerIds.Select(x => x.SpeakerId).ToList(), Title = talk.Title, Description = talk.Description, CodeUrl = talk.CodeUrl, SlidesUrl = talk.SlidesUrl, VideoUrl = talk.VideoUrl };
public static Talk Extend(this Talk original, TalkVm talk) => new Talk { Id = original.Id, ExportId = talk.Id, Title = talk.Title, Description = talk.Description, CodeUrl = talk.CodeUrl, SlidesUrl = talk.SlidesUrl, VideoUrl = talk.VideoUrl, Speakers = original.Speakers, SeeAlsoTalks = original.SeeAlsoTalks };
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 entity = new Talk { Id = talk.Id }.Extend(talk); var res = await _talkProvider.SaveTalkAsync(entity).ConfigureAwait(false); return(res.ToVm()); }
public static TalkVm EnsureIsValid(this TalkVm talk) { // todo: implement full validation if (string.IsNullOrWhiteSpace(talk.Title)) { throw new FormatException(nameof(talk.Title)); } if (string.IsNullOrWhiteSpace(talk.Description)) { throw new FormatException(nameof(talk.Description)); } if (talk.SpeakerIds == null || talk.SpeakerIds.Count == 0 || talk.SpeakerIds.Any(x => string.IsNullOrWhiteSpace(x.SpeakerId))) { throw new FormatException(nameof(talk.SpeakerIds)); } return(talk); }
public Task <TalkVm> UpdateTalk([FromBody] TalkVm talk) => _talkService.UpdateTalkAsync(talk);
public Task <TalkVm> AddTalk([FromBody] TalkVm talk) => _talkService.AddTalkAsync(talk);