public async Task <TaskAggregate> CreateTaskAsync(TaskModel newTask, IEnumerable <string> usersIds, IEnumerable <string> labelsIds, string requestId) { if (!(await CheckAndSaveRequestIdAsync(requestId))) { throw new AlreadyHandledException(); } try { newTask.Init(); TaskRelatedData taskData = await GetAndCheckTaskRelatedDataAsync(newTask, usersIds, labelsIds); var list = taskData.List; var taskCollections = new TaskCollections { Members = usersIds, Labels = labelsIds }; var membersRecords = _mapper.Map <IEnumerable <UserModel>, IEnumerable <TaskUserRecord> >(taskData.Users); var labelsRecords = _mapper.Map <IEnumerable <LabelModel>, IEnumerable <TaskLabelRecord> >(taskData.Labels); var outboxMessage = OutboxMessageModel.Create( new TaskCreatedMessage { TaskId = newTask.Id, Title = newTask.Title, ProjectId = list.ProjectId, ProjectTitle = list.ProjectTitle, ListId = list.Id, ListTitle = list.Title, Members = membersRecords, Labels = labelsRecords }, Topics.Tasks, MessageActions.Created); var createdTask = await _tasksRepository.CreateTaskAsync(newTask, taskCollections, outboxMessage); List <Task> cacheInvalidationTasks = new List <Task>(); foreach (var user in usersIds) { string userCacheKey = string.Format(CacheSettings.UserTasksCacheKeyPattern, user); cacheInvalidationTasks.Add(_cache.RemoveAsync(userCacheKey)); } await Task.WhenAll(cacheInvalidationTasks); return(createdTask); } catch (Exception) { //rollback request id await _requestsRepository.DeleteRequestIdAsync(requestId); throw; } }
public async Task <TaskAggregate> CreateTaskAsync(TaskModel newTask, IEnumerable <string> usersIds, IEnumerable <string> labelsIds, string requestId) { if (!(await CheckAndSaveRequestIdAsync(requestId))) { throw new AlreadyHandledException(); } try { newTask.Init(); TaskRelatedData taskData = await GetAndCheckTaskRelatedDataAsync(newTask, usersIds, labelsIds); var list = taskData.List; var taskCollections = new TaskCollections { Members = usersIds, Labels = labelsIds }; var membersRecords = _mapper.Map <IEnumerable <UserModel>, IEnumerable <TaskUserRecord> >(taskData.Users); var labelsRecords = _mapper.Map <IEnumerable <LabelModel>, IEnumerable <TaskLabelRecord> >(taskData.Labels); var outboxMessage = OutboxMessageModel.Create( new TaskCreatedMessage { TaskId = newTask.Id, Title = newTask.Title, ProjectId = list.ProjectId, ProjectTitle = list.ProjectTitle, ListId = list.Id, ListTitle = list.Title, Members = membersRecords, Labels = labelsRecords }, Topics.Tasks, MessageActions.Created); return(await _tasksRepository.CreateTaskAsync(newTask, taskCollections, outboxMessage)); } catch (Exception) { //rollback request id await _requestsRepository.DeleteRequestIdAsync(requestId); throw; } }