/
delphin
/
CatRW
Обзор
Документация
Войти
/
delphin
/
CatRW
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/catalog.php
80 строк
3 KB
delphin
start project
02 мар 2026, 09:14
Верифицирован
02 мар 2026, 09:14
4b0ee03
Код
Авторство
О чём код?
<?php // /api/catalog.php - ПУБЛИЧНЫЙ API каталога (только чтение) require_once __DIR__ . '/../config.php'; require_once __DIR__ . '/Database.php'; require_once __DIR__ . '/CatalogService.php'; // Отдельный сервис для публичного каталога header('Content-Type: application/json; charset=utf-8'); function sendJson($data, $status = 200) { http_response_code($status); echo json_encode($data, JSON_UNESCAPED_UNICODE); exit; } try { $method = $_SERVER['REQUEST_METHOD']; // Только GET методы для публичного каталога if ($method !== 'GET') { sendJson(['success' => false, 'error' => 'Доступно только чтение'], 405); } $service = new CatalogService(); $action = $_GET['action'] ?? ''; $id = $_GET['id'] ?? 0; switch ($action) { case 'get': // GET /api/catalog/123 - получить одну модель if ($id > 0) { $model = $service->getPublishedModel($id); // Только опубликованные if ($model) { sendJson(['success' => true, 'data' => $model]); } else { sendJson(['success' => false, 'error' => 'Модель не найдена'], 404); } } break; case 'list': default: // GET /api/catalog - список моделей с фильтрами $page = (int)($_GET['page'] ?? 1); $perPage = (int)($_GET['per_page'] ?? 20); $filters = []; // Только публичные фильтры if (isset($_GET['type_code'])) $filters['type_code'] = $_GET['type_code']; if (isset($_GET['scale_code'])) $filters['scale_code'] = $_GET['scale_code']; if (isset($_GET['manufacturer_id'])) $filters['manufacturer_id'] = (int)$_GET['manufacturer_id']; if (isset($_GET['era_code'])) $filters['era_code'] = $_GET['era_code']; // ВСЕГДА только опубликованные модели $filters['status'] = 'published'; $result = $service->getModels($filters, $page, $perPage); sendJson([ 'success' => true, 'data' => $result['models'], 'total' => $result['total'], 'page' => $result['page'], 'pages' => $result['pages'], 'perPage' => $result['perPage'] ]); break; case 'search': // GET /api/catalog/search/query $query = $_GET['param'] ?? ''; $models = $service->searchPublished($query); // Только опубликованные sendJson(['success' => true, 'data' => $models]); break; } } catch (Exception $e) { error_log("Public Catalog API Error: " . $e->getMessage()); sendJson(['success' => false, 'error' => 'Внутренняя ошибка сервера'], 500); } ?>