public async Task <TrainTask> AddTrainTaskWithoutAttributes(TrainTaskaddUi input, User user) { using (var conn = new SqlConnection(AppSettings.ConnectionString)) { var sql = new TaskSqls(); var taskId = await conn.QueryFirstOrDefaultAsync <int>(sql.AddTaskWithoutAttributes, new { carriageId = input.CarriageId, description = input.Text, equipmentModelId = input.EquipmentId, taskType = input.TaskType, userId = user.Id }); var result = await GetTrainTaskWithoutAttributes(taskId); return(result); } }
public async Task <TrainTaskWithUpdateStatusDto> TrainTaskAdd(TrainTaskaddUi input, User user) { var sqlRTask = new TaskRepository(_logger); var sqlRStatus = new TaskStatusRepository(_logger); var sqlREquipmentModel = new EquipmentModelsRepository(_logger); var sqlREquipment = new EquipmentRepository(_logger); //Проверяем по [CarriageId] и [EquipmentModelId] наличие подобной незакрытой задачи (EquipmentId c UI это EquipmentModelId...) var allTasks = await sqlRTask.GetAllTrainTask(); //TODO перенести логику выборки в sql allTasks = allTasks.Where(e => e.CarriageId == input.CarriageId && e.EquipmentModelId == input.EquipmentId) .ToList(); var trainTaskToAdd = await CheckTrainTaskExist(sqlRStatus, allTasks); //Начинаем транзакцию using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { var isUpdated = true; if (trainTaskToAdd == null) { //Делаем пустую таску trainTaskToAdd = await sqlRTask.AddTrainTaskWithoutAttributes(input, user); isUpdated = false; } await sqlRTask.UpdateEditDate(trainTaskToAdd.Id); //добавляем новый атрибут к существующей или свеже созданной var newTaskAtribute = await sqlRTask.AddAttributesToTrainTask(trainTaskToAdd, input); trainTaskToAdd.TrainTaskAttributes = new List <TrainTaskAttribute> { newTaskAtribute }; //прихуярить статус var updateTaskData = new UpdateTaskData { StatusId = (int)input.TaskStatus, TraintaskId = trainTaskToAdd.Id, FilesId = input.FilesId, CommentText = input.Text, TrainTaskExecutorsId = (int)input.Executor }; await UpdateTask(updateTaskData, user, true); var equipmentModel = await sqlREquipmentModel.ById(trainTaskToAdd.EquipmentModelId); var equipment = await sqlREquipment.ById(equipmentModel.EquipmentId); transaction.Complete(); var result = new TrainTaskWithUpdateStatusDto { TrainTask = trainTaskToAdd, IsUpdated = isUpdated, EquipmentName = equipment.Name }; return(result); } }