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