Ajout du dossier api avec la géolocalisation automatique des casernes de pompiers
This commit is contained in:
99
api/src/Controllers/VilleController.php
Normal file
99
api/src/Controllers/VilleController.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
require_once __DIR__ . '/../Services/LogService.php';
|
||||
require_once __DIR__ . '/../Services/ApiService.php';
|
||||
|
||||
use PDO;
|
||||
use PDOException;
|
||||
use Database;
|
||||
use AppConfig;
|
||||
use Request;
|
||||
use Response;
|
||||
use Session;
|
||||
use LogService;
|
||||
use ApiService;
|
||||
use Exception;
|
||||
|
||||
class VilleController {
|
||||
private PDO $db;
|
||||
private AppConfig $appConfig;
|
||||
|
||||
public function __construct() {
|
||||
$this->db = Database::getInstance();
|
||||
$this->appConfig = AppConfig::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recherche les villes dont le code postal commence par les chiffres saisis
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function searchVillesByPostalCode(): void {
|
||||
try {
|
||||
// Récupérer le paramètre code_postal de la requête
|
||||
$postalCode = Request::getValue('code_postal');
|
||||
|
||||
if (empty($postalCode) || strlen($postalCode) < 3) {
|
||||
Response::json([
|
||||
'status' => 'error',
|
||||
'message' => 'Le code postal doit contenir au moins 3 chiffres'
|
||||
], 400);
|
||||
return;
|
||||
}
|
||||
|
||||
// Valider que le code postal ne contient que des chiffres
|
||||
if (!ctype_digit($postalCode)) {
|
||||
Response::json([
|
||||
'status' => 'error',
|
||||
'message' => 'Le code postal doit contenir uniquement des chiffres'
|
||||
], 400);
|
||||
return;
|
||||
}
|
||||
|
||||
// Rechercher les villes dont le code postal commence par les chiffres saisis
|
||||
$stmt = $this->db->prepare('
|
||||
SELECT id, fk_departement, libelle, code_postal
|
||||
FROM x_villes
|
||||
WHERE code_postal LIKE ?
|
||||
ORDER BY libelle ASC
|
||||
LIMIT 20
|
||||
');
|
||||
|
||||
$stmt->execute([$postalCode . '%']);
|
||||
$villes = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Renommer les champs pour une meilleure lisibilité côté client
|
||||
$result = [];
|
||||
foreach ($villes as $ville) {
|
||||
$result[] = [
|
||||
'id' => $ville['id'],
|
||||
'departement_id' => $ville['fk_departement'],
|
||||
'nom' => $ville['libelle'],
|
||||
'code_postal' => $ville['code_postal']
|
||||
];
|
||||
}
|
||||
|
||||
Response::json([
|
||||
'status' => 'success',
|
||||
'success' => true,
|
||||
'data' => $result
|
||||
], 200);
|
||||
} catch (Exception $e) {
|
||||
LogService::log('Erreur lors de la recherche de villes par code postal', [
|
||||
'level' => 'error',
|
||||
'error' => $e->getMessage(),
|
||||
'postalCode' => $postalCode ?? 'non défini'
|
||||
]);
|
||||
|
||||
Response::json([
|
||||
'status' => 'error',
|
||||
'success' => false,
|
||||
'message' => 'Erreur lors de la recherche de villes'
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user