Files
geo/api/src/Controllers/VilleController.php
pierre 599b9fcda0 feat: Gestion des secteurs et migration v3.0.4+304
- Ajout système complet de gestion des secteurs avec contours géographiques
- Import des contours départementaux depuis GeoJSON
- API REST pour la gestion des secteurs (/api/sectors)
- Service de géolocalisation pour déterminer les secteurs
- Migration base de données avec tables x_departements_contours et sectors_adresses
- Interface Flutter pour visualisation et gestion des secteurs
- Ajout thème sombre dans l'application
- Corrections diverses et optimisations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-07 11:01:45 +02:00

100 lines
2.6 KiB
PHP
Executable File

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