public async Task <string> SaveTalk(Conference conference, Talk talk, string oldName, Func <Talk, string> getUrlToTalk) { if (oldName != null) { var oldTalk = new Talk { ConferenceId = conference.Id, TalkName = oldName, Speaker = talk.Speaker }; await talkPersistence.DeleteTalk(conference, talk); } // TODO: new versions of containers... // TODO: Client verification also // TODO: proper replace here var safeTalkName = talk.TalkName .Replace("?", "") .Replace(":", " - ") .Replace("/", "-") .Replace("\"", "-") .Replace("#", ""); talk.TalkName = Regex.Replace(safeTalkName, @"\s+", " ").Trim(); talk.ConferenceId = conference.Id; talk.TimeStamp = DateTimeOffset.UtcNow; contentService.VerifySlides(talk); await talkPersistence.SaveTalkFromConference(conference, talk); await thumbnailService.SaveThumbnail(conference, talk, oldName); if (oldName == null) { var talkUrl = getUrlToTalk(talk); slackClient.PublishToSlack(talk, talkUrl); } var escapedTalkName = Uri.EscapeUriString(talk.TalkName); return(escapedTalkName); }