public async Task <SaveDraftViewModel> Handle(SaveDraftCommand request, CancellationToken cancellationToken) { if (!await _questionsRepository.QuestionExists(request.QuestionId)) { throw new InvalidQuestionException(); } var draft = await _draftRepository.GetByQuestionAndUser(request.UserId, request.QuestionId); if (draft != null) { draft.Content = request.Content; draft.DateTime = DateTime.Now; _draftRepository.Update(draft); } else { var newDraft = new Draft { UserId = request.UserId, DateTime = DateTime.Now, Content = request.Content, QuestionId = request.QuestionId }; await _draftRepository.AddAsync(newDraft); } await _unitOfWork.SaveChangesAsync(cancellationToken); return(new SaveDraftViewModel { Message = "Draft saved successfully." }); }