80 lines
2.2 KiB
PHP
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.');
|
|
}
|
|
}
|