private async Task <string> UpdateHoursWithNewProjectAsync(string messageString) { Console.WriteLine("Prepare hours stage started"); MoveTaskHandleHoursMessage message = JsonConvert.DeserializeObject <MoveTaskHandleHoursMessage>(messageString); string transactionId = message.TransactionId; var transaction = await _transactionsRepository.GetTransactionAsync(transactionId); if (transaction != null && transaction.State == TransactionStates.Denied) { return($"Transaction {transactionId} already denied"); } var moveTaskTransaction = transaction == null ? MoveTaskTransaction.Create(transactionId, message.TaskId, message.ProjectId) : MoveTaskTransaction.CreateFromBase(transaction); moveTaskTransaction.State = TransactionStates.Processing; string projectTitle = "undefined"; string taskId = message.TaskId; var task = await _tasksRepository.GetTaskAsync(taskId); if (task != null) { string projectId = task.ProjectId; var project = await _projectsRepository.GetProjectAsync(projectId); projectTitle = project?.Title; } string postfix = $"(from {projectTitle})"; moveTaskTransaction.AppliedPostfix = postfix; var taskWorkingHours = (await _workingHoursRepository.GetProjectTaskMemberWorkingHoursAsync(taskId: moveTaskTransaction.TaskId)).ToList(); List <string> affectedRecordsIds = new List <string>(); foreach (var workingHoursRecord in taskWorkingHours) { workingHoursRecord.Description += postfix; await _workingHoursRepository.UpdateWorkingHoursRecordAsync(workingHoursRecord); affectedRecordsIds.Add(workingHoursRecord.Id); } moveTaskTransaction.AffectedRecordsIds = affectedRecordsIds; moveTaskTransaction.UpdateData(); var outboxMessage = OutboxMessageModel.Create( new MoveTaskHoursHandledMessage { TransactionId = moveTaskTransaction.Id, }, Topics.WorkingHours, TransactionMessageActions.MoveTask_HandleHoursCompleted); await _transactionsRepository.CreateOrUpdateTransactionAsync(moveTaskTransaction, outboxMessage); return($"Working hours updated successful"); }
private async Task EnsureTaskUserExistAsync(string taskId, string userId) { Task <TaskModel> taskTask = _tasksRepository.GetTaskAsync(taskId); Task <UserModel> userTask = _usersRepository.GetUserAsync(userId); await Task.WhenAll(taskTask, userTask); if (taskTask.Result == null) { throw new NotFoundException($"Task with id = {taskId} not found"); } if (userTask.Result == null) { throw new NotFoundException($"User with id = {userId} not found"); } }