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);
            }
        }