public async Task<EditNoteModel> Build(Guid userId, int noteId) { var userTask = _userService.GetUser(userId); var noteTask = _notesService.GetNote(noteId); await Task.WhenAll(userTask, noteTask); var user = userTask.Result; var note = noteTask.Result; if (user == null) throw new ModelBuilderException("user not found"); if (note == null || !note.CanSee(user)) throw new ModelBuilderException("note not found"); var canEdit = note.CanEdit(user); var canDelete = note.CanDelete(user); var model = new EditNoteModel() { Body = note.Body, IsPublic = note.IsPublic, Title = note.Title, NoteId = noteId, CanEdit = canEdit, CanDelete = canDelete }; return model; }
public async Task<SaveNoteModelBuilderResult> Build(Guid userId, EditNoteModel request) { var result = new SaveNoteModelBuilderResult() { Model = request, IsSuccess = true }; if (request == null) return result; if (request.NoteId.HasValue) { return await ExecuteEditCmd(userId, request, result); } else return await ExecuteCreateCmd(userId, request, result); }
public async Task<ActionResult> Edit(EditNoteModel request) { if (!ModelState.IsValid) { request.CanEdit = true; return View(request); } var builder = DependencyResolver.Current.GetService<SaveNoteModelBuilder>(); var result = await builder.Build(GetUserId().Value, request); if (result.IsSuccess) { TempData[KeysConstants.SuccessMessageKey] = NotesEditUIResources.NoteSuccessChanged; return RedirectToAction("Edit", new { noteId = request.NoteId.Value }); } TempData[KeysConstants.ErrorMessageKey] = result.Error; return View(request); }
private async Task<SaveNoteModelBuilderResult> ExecuteEditCmd(Guid userId, EditNoteModel request, SaveNoteModelBuilderResult result) { var args = new EditNoteArgs { Body = request.Body, ChangedByUserId = userId, IsPublic = request.IsPublic, NoteId = request.NoteId.Value, Title = request.Title }; var cmdRes = await _editCommand.Execute(args); if (!cmdRes.IsSuccess) { result.IsSuccess = false; result.Error = cmdRes.ErrorMessage; return result; } else return result; }
private async Task<SaveNoteModelBuilderResult> ExecuteCreateCmd(Guid userId, EditNoteModel request, SaveNoteModelBuilderResult result) { var createArgs = new CreateNoteArgs { Body = request.Body, IsPublic = request.IsPublic, Title = request.Title, UserId = userId }; var createResult = await _createCommand.Execute(createArgs); if (!createResult.IsSuccess) { result.IsSuccess = false; result.Error = createResult.ErrorMessage; return result; } result.Model.NoteId = createResult.CreatedNoteId; return result; }