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"); }
public Task <IEnumerable <MemberWorkingHoursAggregate> > GetProjectWorkingHoursAsync(string projectId, string taskId, string userId) { return(_workingHoursRepository.GetProjectTaskMemberWorkingHoursAsync(projectId, taskId, userId)); }