Ajout du dossier api avec la géolocalisation automatique des casernes de pompiers

This commit is contained in:
d6soft
2025-05-16 21:03:04 +02:00
parent 69dcff42f8
commit f4f7882963
143 changed files with 24329 additions and 1 deletions

View 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);
}
}
}