validator = $validator; } /** * Установка хранилища задач (внедрение зависимости) */ public function setTasksStorage(TasksStorage $storage): void { $this->tasksStorage = $storage; } /** * Установка фабрики DTO (внедрение зависимости) */ public function setDtoFactory(DtoFactory $factory): void { $this->dtoFactory = $factory; } /** * Установка слоя персистентности (внедрение зависимости) */ public function setTasksLayer(TasksLayer $layer): void { $this->tasksLayer = $layer; } /** * Создание новой задачи * @param array $data Входные данные * @return bool Успешность операции */ public function insert(array $data): bool { // Валидация входных данных if (!$this->validator->insert($data)) { $this->responseCode = ResponsesCode::VALIDATION_FAILED_CODE; $this->errors = $this->validator->getErrors(); return false; } try { // Получение очищенных данных после валидации $cleanData = $this->validator->getCleanData(); // Создание DTO для сохранения $task = $this->dtoFactory->createTaskPersist(); $task->load($cleanData); // Сохранение в БД $this->tasksLayer->insert($task); return true; } catch (\Throwable $e) { // Логирование ошибок Log::error($e); $this->errors['except'][] = $e->getMessage(); return false; } } /** * Получение задачи по ID * @param array $data Входные данные (должен содержать 'id') * @return bool Успешность операции */ public function getById(array $data): bool { // Валидация входных данных if (!$this->validator->getById($data)) { $this->responseCode = ResponsesCode::VALIDATION_FAILED_CODE; $this->errors = $this->validator->getErrors(); return false; } try { // Получение очищенных данных $cleanData = $this->validator->getCleanData(); $id = $cleanData['id']; // Получение данных из хранилища $taskData = $this->tasksStorage->getById($id, ['*', 'options']); // Создание DTO и добавление в кеш $task = $this->dtoFactory->createTaskResource(); $task->load($taskData); $this->tasks[$task->getId()] = $task; return true; } catch (\Throwable $e) { Log::error($e); $this->errors['except'][] = $e->getMessage(); return false; } } /** * Получение списка задач с пагинацией * @param array $data Входные данные (должны содержать 'limit' и 'offset') * @return bool Успешность операции */ public function getList(array $data): bool { // Валидация входных данных if (!$this->validator->getList($data)) { $this->responseCode = ResponsesCode::VALIDATION_FAILED_CODE; $this->errors = $this->validator->getErrors(); return false; } try { // Получение параметров пагинации $cleanData = $this->validator->getCleanData(); $limit = $cleanData['limit']; $offset = $cleanData['offset']; // Получение списка из хранилища $tasksData = $this->tasksStorage->getList($limit, $offset, ['*', 'options']); // Преобразование в DTO и сохранение в кеш foreach ($tasksData as $taskData) { $task = $this->dtoFactory->createTaskResource(); $task->load($taskData); $this->tasks[$task->getId()] = $task; } return true; } catch (\Throwable $e) { Log::error($e); $this->errors['except'][] = $e->getMessage(); return false; } } /** * Получение кешированных задач * @return array Массив задач */ public function getTasks(): array { return $this->tasks; } }