/
delphin
/
CatRW
Обзор
Документация
Войти
/
delphin
/
CatRW
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/CatalogService.php
97 строк
3 KB
delphin
start project
02 мар 2026, 09:14
Верифицирован
02 мар 2026, 09:14
4b0ee03
Код
Авторство
О чём код?
<?php // /api/CatalogService.php - сервис для публичного каталога class CatalogService { public function getModels($filters = [], $page = 1, $perPage = 20) { $sql = "SELECT SQL_CALC_FOUND_ROWS cm.*, m.name as manufacturer_name FROM catalog_models cm LEFT JOIN manufacturers m ON cm.manufacturer_id = m.id WHERE cm.status = 'published'"; // ВСЕГДА только опубликованные $params = []; foreach ($filters as $key => $value) { if ($value !== null && $value !== '') { $sql .= " AND cm.$key = ?"; $params[] = $value; } } $sql .= " ORDER BY cm.id DESC LIMIT ? OFFSET ?"; $params[] = $perPage; $params[] = ($page - 1) * $perPage; $models = Database::select($sql, $params); $total = Database::selectOne("SELECT FOUND_ROWS() as total")['total'] ?? 0; return [ 'models' => $models, 'total' => $total, 'page' => $page, 'perPage' => $perPage, 'pages' => ceil($total / $perPage) ]; } public function getPublishedModel($id) { return Database::selectOne(" SELECT cm.*, m.name as manufacturer_name FROM catalog_models cm LEFT JOIN manufacturers m ON cm.manufacturer_id = m.id WHERE cm.id = ? AND cm.status = 'published' ", [$id]); } public function searchPublished($query) { if (empty($query)) return $this->getModels([], 1, 50)['models']; return Database::select(" SELECT cm.*, m.name as manufacturer_name FROM catalog_models cm LEFT JOIN manufacturers m ON cm.manufacturer_id = m.id WHERE cm.status = 'published' AND (cm.name LIKE ? OR cm.model_number LIKE ? OR m.name LIKE ?) ORDER BY cm.name LIMIT 50 ", ["%$query%", "%$query%", "%$query%"]); } // Только публичные справочники public function getTypes() { return Database::select(" SELECT DISTINCT type_code FROM catalog_models WHERE status = 'published' ORDER BY type_code "); } public function getScales() { return Database::select(" SELECT DISTINCT scale_code FROM catalog_models WHERE status = 'published' ORDER BY scale_code "); } public function getEras() { return Database::select(" SELECT DISTINCT era_code FROM catalog_models WHERE status = 'published' AND era_code IS NOT NULL ORDER BY era_code "); } public function getManufacturers() { return Database::select(" SELECT DISTINCT m.* FROM manufacturers m JOIN catalog_models cm ON m.id = cm.manufacturer_id WHERE cm.status = 'published' ORDER BY m.name "); } } ?>