/
delphin
/
CatRW
Обзор
Документация
Войти
/
delphin
/
CatRW
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/ModelTypeService.php
232 строки
9 KB
delphin
start project
02 мар 2026, 09:14
Верифицирован
02 мар 2026, 09:14
4b0ee03
Код
Авторство
О чём код?
<?php // /api/ModelTypeService.php - СЕРВИС ТИПОВ МОДЕЛЕЙ (БЕЗ sort_order) class ModelTypeService { // Получить все типы public static function getAll() { try { return Database::select("SELECT * FROM model_types ORDER BY code"); } catch (Exception $e) { error_log("ModelTypeService::getAll error: " . $e->getMessage()); return []; } } // Получить один тип public static function get($code) { try { return Database::selectOne( "SELECT * FROM model_types WHERE code = :code", [':code' => $code] ); } catch (Exception $e) { error_log("ModelTypeService::get error for code '$code': " . $e->getMessage()); return null; } } // Добавить тип public static function add($data) { try { if (empty($data['code'])) { throw new Exception("Код обязателен"); } // Проверка уникальности $existing = Database::selectOne( "SELECT code FROM model_types WHERE code = ?", [$data['code']] ); if ($existing) { throw new Exception("Тип с таким кодом уже существует"); } // Простая очистка данных (только код) $cleanData = [ 'code' => trim($data['code']) ]; return Database::insert('model_types', $cleanData); } catch (Exception $e) { error_log("ModelTypeService::add error: " . $e->getMessage()); throw $e; } } // Обновить тип (только код!) public static function update($oldCode, $data) { try { error_log("=== ModelTypeService::update() START ==="); error_log("Updating model type from code: $oldCode"); error_log("Data: " . print_r($data, true)); // Проверяем существование $type = self::get($oldCode); if (!$type) { error_log("ERROR: Model type not found code: $oldCode"); throw new Exception("Тип модели не найден"); } // Проверяем, меняем ли код if (empty($data['code']) || $data['code'] === $oldCode) { throw new Exception("Нет изменений для обновления"); } $newCode = trim($data['code']); // Проверяем уникальность нового кода $existing = Database::selectOne( "SELECT code FROM model_types WHERE code = :code AND code != :oldCode", ['code' => $newCode, 'oldCode' => $oldCode] ); if ($existing) { throw new Exception("Тип с таким кодом уже существует"); } // Проверяем, есть ли подтипы у этого типа $subtypesCount = Database::selectOne( "SELECT COUNT(*) as cnt FROM model_subtypes WHERE type_code = :code", ['code' => $oldCode] ); if ($subtypesCount && $subtypesCount['cnt'] > 0) { throw new Exception("Нельзя изменить код: есть подтипы"); } // Проверяем, есть ли модели этого типа $modelsCount = Database::selectOne( "SELECT COUNT(*) as cnt FROM catalog_models WHERE type_code = :code", ['code' => $oldCode] ); if ($modelsCount && $modelsCount['cnt'] > 0) { throw new Exception("Нельзя изменить код: есть модели этого типа"); } // Обновляем код error_log("Changing code from '$oldCode' to '$newCode'"); $result = Database::update( 'model_types', ['code' => $newCode], 'code = :code_where', ['code_where' => $oldCode] ); error_log("Update result: $result rows affected"); error_log("=== ModelTypeService::update() SUCCESS ==="); return $result; } catch (Exception $e) { error_log("ModelTypeService::update ERROR: " . $e->getMessage()); throw $e; } } // Удалить тип public static function delete($code) { try { error_log("ModelTypeService::delete called for code: " . $code); // 1. Проверяем существование типа $type = self::get($code); if (!$type) { throw new Exception("Тип модели '$code' не найден"); } error_log("Type found: " . $type['code']); // 2. Проверяем, есть ли подтипы у этого типа $subtypesCount = Database::selectOne( "SELECT COUNT(*) as cnt FROM model_subtypes WHERE type_code = :code", [':code' => $code] ); error_log("Subtypes count: " . ($subtypesCount['cnt'] ?? 0)); if ($subtypesCount && $subtypesCount['cnt'] > 0) { throw new Exception("Нельзя удалить тип: есть подтипы"); } // 3. Проверяем, есть ли модели этого типа $modelsCount = Database::selectOne( "SELECT COUNT(*) as cnt FROM catalog_models WHERE type_code = :code", [':code' => $code] ); error_log("Models count: " . ($modelsCount['cnt'] ?? 0)); if ($modelsCount && $modelsCount['cnt'] > 0) { throw new Exception("Нельзя удалить тип: есть модели этого типа"); } // 4. Удаляем тип error_log("Deleting model type from database..."); $result = Database::delete('model_types', 'code = :code', [':code' => $code]); error_log("Database delete result: " . $result . " rows affected"); return [ 'type' => 'deleted', 'message' => 'Тип модели удалён' ]; } catch (Exception $e) { error_log("ModelTypeService::delete ERROR for code '$code': " . $e->getMessage()); throw $e; } } // Поиск public static function search($query) { try { if (empty($query)) { return self::getAll(); } $searchPattern = "%" . $query . "%"; return Database::select( "SELECT * FROM model_types WHERE code LIKE ? ORDER BY code", [$searchPattern] ); } catch (Exception $e) { error_log("ModelTypeService::search error for query '$query': " . $e->getMessage()); return []; } } // Получить статистику public static function getStats($code = null) { try { if ($code) { // Статистика для конкретного типа $result = Database::selectOne(" SELECT COUNT(*) as total_subtypes, (SELECT COUNT(*) FROM catalog_models WHERE type_code = :code) as total_models FROM model_subtypes WHERE type_code = :code ", [':code' => $code]); return [ 'subtypes_count' => $result['total_subtypes'] ?? 0, 'models_count' => $result['total_models'] ?? 0 ]; } else { // Общая статистика return Database::selectOne(" SELECT COUNT(*) as total FROM model_types "); } } catch (Exception $e) { error_log("ModelTypeService::getStats error: " . $e->getMessage()); return ['total' => 0]; } } } ?>