Files

80 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Controllers;
use Core\Request;
use Core\Response;
use Core\Database;
use PDO;
class PartnerController
{
/**
* GET /api/v1/partners
* Query params: type (HOSPITAL, HOTEL), country, city, search
*/
public function listPartners(Request $request): void
{
$type = strtoupper(trim((string)$request->getQuery('type', '')));
$country = trim((string)$request->getQuery('country', ''));
$city = trim((string)$request->getQuery('city', ''));
$search = trim((string)$request->getQuery('search', ''));
$pdo = Database::getConnection();
$sql = 'SELECT id, type, name_ar, name_en, category, country, city, discount_percentage, address, phone, latitude, longitude
FROM partners
WHERE is_active = 1';
$params = [];
if (!empty($type)) {
$sql .= ' AND type = :type';
$params[':type'] = $type;
}
if (!empty($country)) {
$sql .= ' AND country = :country';
$params[':country'] = $country;
}
if (!empty($city)) {
$sql .= ' AND city = :city';
$params[':city'] = $city;
}
if (!empty($search)) {
$sql .= ' AND (name_ar LIKE :search OR name_en LIKE :search OR category LIKE :search)';
$params[':search'] = '%' . $search . '%';
}
$sql .= ' ORDER BY discount_percentage DESC, id DESC';
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$partners = $stmt->fetchAll(PDO::FETCH_ASSOC);
Response::success($partners, 'Partners directory retrieved.');
}
/**
* GET /api/v1/partners/{id}
*/
public function getPartner(Request $request, array $params): void
{
$partnerId = (int)($params['id'] ?? 0);
$pdo = Database::getConnection();
$stmt = $pdo->prepare('SELECT * FROM partners WHERE id = :id AND is_active = 1 LIMIT 1');
$stmt->execute([':id' => $partnerId]);
$partner = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$partner) {
Response::notFound('Partner not found.');
}
Response::success($partner, 'Partner details retrieved.');
}
}