public async Task <IActionResult> Edit(string id) { var model = new AddOrUpdateStoryInputModel(); var story = await _mediator.Send(new GetStoryQuery(id)); var user = await GetLoggedUserAsync(); if (story == null || story.AuthorId != user.GetRole <Author>()?.Id) { return(NotFound()); } var tags = await _mediator.Send(new GetAllQuery <Tag>(tag => tag.StoryTags.Any(st => st.StoryId == story.Id))); model.StoryId = story.Id; model.StoryTitle = story.Title; model.Content = story.Content; model.Tags = string.Join(',', tags.Select(x => x.Title)); model.Title = $"Edit {story.Title}"; if (TempData.ContainsKey(_ErrorKey)) { model.Informations.Add((string)TempData[_ErrorKey]); } return(View("Share", model)); }
private async Task <Model.Story> GetAndUpdateAsync(AddOrUpdateStoryInputModel message) { var story = await _mediator.Send(new GetByIdQuery <Model.Story>(message.StoryId.Value)); story.Title = message.StoryTitle; story.Content = message.Content; return(story); }
private async Task UpdateTags(AddOrUpdateStoryInputModel message, Model.Story story) { var storyTags = await _mediator.Send(new GetAllQuery <StoryTags>(x => x.StoryId == story.Id)); foreach (var tag in storyTags) { _unitOfWork.Delete(tag); } await _unitOfWork.Commit(); if (string.IsNullOrEmpty(message.Tags)) { return; } var uiTags = message.Tags .Split(',') .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(x => x.Trim().ToLower()) .ToArray(); var existingTags = await _mediator.Send(new GetAllQuery <Tag>(x => uiTags.Contains(x.Title))); foreach (var uiTag in uiTags) { var tagDb = existingTags.FirstOrDefault(x => x.Title == uiTag); if (tagDb == null) { tagDb = new Tag { Title = uiTag }; _unitOfWork.Add(tagDb); await _unitOfWork.Commit(); } _unitOfWork.Add(new StoryTags { TagId = tagDb.Id, StoryId = story.Id }); } await _unitOfWork.Commit(); }
public async Task <IActionResult> Share(AddOrUpdateStoryInputModel model) { model.UserId = (await GetLoggedUserAsync()).Id; if (!ModelState.IsValid) { return(View("Share", model)); } var response = await _mediator.Send(model); if (response.HasErrors) { MapToModelState(response); return(View(model)); } return(Redirect("/")); }
public async Task <IActionResult> Edit(AddOrUpdateStoryInputModel model) { var user = await GetLoggedUserAsync(); model.UserId = user.Id; var response = await _mediator.Send(model); if (response.HasErrors) { foreach (var responseError in response.Errors) { ModelState.AddModelError(responseError.Key, responseError.Message); } return(View("Share", model)); } TempData[_ErrorKey] = "Story succesfully saved!"; return(RedirectToAction("Edit", new { id = response.Result.Slug })); }
public async Task <IActionResult> Edit(string id) { var model = new AddOrUpdateStoryInputModel(); var story = await _mediator.Send(new GetStoryQuery(id)); var user = await GetLoggedUserAsync(); if (story == null) { return(NotFound("Story not found")); } if (story.AuthorId != user.GetRole <Author>()?.Id&& !user.Is <Administrator>()) { return(Unauthorized()); } var tags = await _mediator.Send(new GetAllQuery <Tag>(tag => tag.StoryTags.Any(st => st.StoryId == story.Id))); model.StoryId = story.Id; model.StoryTitle = story.Title; model.Content = story.Content; model.Tags = string.Join(',', tags.Select(x => x.Title)); model.Title = $"Edit {story.Title}"; if (!string.IsNullOrEmpty(story.Photo)) { model.ExistingImage = $"{_appSettings.StorageDomain}{_appSettings.StoryPhotoContainer}/{story.Photo}"; } if (TempData.ContainsKey(_ErrorKey)) { model.Informations.Add((string)TempData[_ErrorKey]); } return(View("Share", model)); }
public async Task <IActionResult> Edit(AddOrUpdateStoryInputModel model) { var user = await GetLoggedUserAsync(); model.UserId = user.Id; if (!ModelState.IsValid) { return(View("Share", model)); } var response = await _mediator.Send(model); if (response.HasErrors) { MapToModelState(response); return(View("Share", model)); } TempData[_ErrorKey] = "Story succesfully saved!"; return(RedirectToAction("Edit", new { id = response.Result.Slug })); }
public async Task <Response <Model.Story> > Handle(AddOrUpdateStoryInputModel message) { var response = new Response <Model.Story>(); var user = await _mediator.Send(new GetOneQuery <User>(x => x.Id == message.UserId, u => u.Roles)); if (user == null) { response.AddError("User", "User not foound"); return(response); } Author author; if (!user.Is <Author>()) { author = new Author(); user.Roles.Add(author); _unitOfWork.Update(user); await _unitOfWork.Commit(); } else { author = user.GetRole <Author>(); } Model.Story story; if (message.StoryId.HasValue) { story = await GetAndUpdateAsync(message); if (!user.Is <Administrator>()) { story.Status = Status.Draft; } } else { story = author.CreateNewStory(message.StoryTitle, message.Content); } story.Modified = DateTime.UtcNow; if (message.StoryId.HasValue) { _unitOfWork.Update(story); } else { _unitOfWork.Add(story); } try { await _unitOfWork.Commit(); await UpdateTags(message, story); response.Result = story; } catch (Exception e) { response.AddError("", e.Unwrap().Message); } return(response); }
public async Task <Response <Model.Story> > Handle(AddOrUpdateStoryInputModel message) { var response = new Response <Model.Story>(); var user = await _mediator.Send(new GetOneQuery <User>(x => x.Id == message.UserId, u => u.Roles)); if (user == null) { response.AddError("User", "User not foound"); return(response); } Author author; if (!user.Is <Author>()) { author = new Author(); user.Roles.Add(author); _unitOfWork.Update(user); await _unitOfWork.CommitAsync(); } else { author = user.GetRole <Author>(); } Model.Story story; if (message.StoryId.HasValue) { story = await GetAndUpdateAsync(message); if (!user.Is <Administrator>()) { story.Status = Status.Draft; } } else { story = author.CreateNewStory(message.StoryTitle, message.Content); } story.Modified = DateTime.UtcNow; if (message.StoryId.HasValue) { _unitOfWork.Update(story); } else { _unitOfWork.Add(story); } try { await _unitOfWork.CommitAsync(); await UpdateTags(message, story); response.Result = story; var fileName = $"{story.Id}-{message.Image?.FileName}"; if (await TryUploadPhoto(message.Image, fileName, response)) { if (!string.IsNullOrEmpty(story.Photo)) { await _storageService.DeleteAsync(story.Photo, ContentType.Story); } story.Photo = fileName; await _unitOfWork.CommitAsync(); } } catch (Exception e) { response.AddError("", e.Unwrap().Message); _logger.LogError("Error saving story: " + e.Unwrap().Message, e); } return(response); }