Application backend Symfony permettant d'importer des destinataires depuis un fichier CSV et d'envoyer des alertes météo par SMS à des particuliers basé sur le code INSEE.
- Import de fichiers CSV contenant des destinataires (code INSEE et numéro de téléphone)
- Validation des données lors de l'import
- Endpoint REST pour déclencher l'envoi d'alertes météo par code INSEE
- Traitement asynchrone des SMS via Symfony Messenger
- Simulation d'envoi de SMS (logs)
- Gestion des migrations SQL sans ORM
Choisissez une des deux méthodes suivantes "Docker" ou "En local"
Utilise Docker pour créer les environnements nécessaires (PHP, Nginx, PostgreSQL).
Prérequis :
- Docker
- Docker Compose
Étapes :
-
Cloner le projet :
git clone [email protected]:foybkaa/MeteoAlertBackend.git cd MeteoAlertBackend
-
Configurer
.env.local
pour Docker : Copiez le fichier d'exemple :cp .env .env.local
Ouvrez
.env.local
et modifiez les variables.DATABASE_URL
etAPI_KEY
# Exemple .env.local pour Docker DATABASE_URL="pgsql://app_user:app_password@database:5432/meteo_sms?serverVersion=16&charset=utf8" API_KEY=votre_cle_api_secrete_ici
-
Démarrer les conteneurs Docker :
docker compose up -d --build
-
Installer les dépendances (via Docker) :
docker compose exec php composer install
-
Lancer les migrations SQL (via Docker) :
docker compose exec php bin/console sql-migrations:execute
-
L'application est accessible sur
http://localhost:8080
.
Prérequis :
- PHP 8.4 ou supérieur
- Composer
- PostgreSQL
- Symfony CLI
Étapes :
-
Cloner le projet :
git clone [email protected]:foybkaa/MeteoAlertBackend.git cd MeteoAlertBackend
-
Installer les dépendances :
composer install
-
Configurer
.env.local
pour le local : Copiez le fichier d'exemple :cp .env .env.local
Ouvrez
.env.local
et modifiez laDATABASE_URL
pour pointer vers votre base de données locale. Définissez aussi votreAPI_KEY
.# Exemple .env.local pour installation locale DATABASE_URL="pgsql://VOTRE_UTILISATEUR_BDD:[email protected]:5432/meteo_sms?serverVersion=16&charset=utf8" API_KEY=votre_cle_api_secrete_ici
Important : Assurez-vous que la base de données (
meteo_sms
dans l'exemple) et l'utilisateur existent sur votre PostgreSQL local. -
Lancer les migrations SQL :
php bin/console sql-migrations:execute
-
Lancer le serveur Symfony :
symfony server:start
L'application est accessible sur
http://127.0.0.1:8000
.
Pour importer des destinataires depuis un fichier CSV :
Avec Docker :
docker compose exec php bin/console import-csv-file /chemin/vers/fichier.csv
En locale :
php bin/console import-csv-file /chemin/vers/fichier.csv
💡 Un fichier "list_destinataires.csv" est disponible dans le dossier data à la racine du projet
Format attendu du CSV :
insee,telephone
75001,0601020304
75002,0601020305
À la fin de l'import, un rapport sera affiché avec le nombre de lignes importées avec succès et le nombre d'erreurs.
L'endpoint /alerter
permet d'envoyer des alertes météo à tous les destinataires associés à un code INSEE. Pour l'utiliser avec un client HTTP comme Postman :
-
URL :
http://localhost:8080/alerter
-
Méthode :
POST
. -
Headers : Ajoutez les deux en-têtes suivants :
X-API-KEY:
votre_cle_api_secrete
Content-Type
:application/json
-
Body :
- Sélectionnez l'option "raw".
- Choisissez le format "JSON" dans la liste déroulante.
- Dans la zone de texte, mettez le JSON contenant le code INSEE, comme ceci :
{ "insee": "69123" }
(Remplacez
"69123"
par le code INSEE souhaité).
Pour traiter les messages asynchrones (envoi de SMS) :
Avec docker:
docker compose exec php bin/console messenger:consume
En local
php bin/console messenger:consume
Les logs d'envoi des SMS simulés sont disponibles dans le fichier var/log/dev.log
src/Command/ImportCsvCommand.php
: Commande d'import CSVsrc/Service/SmsService.php
: Service simulant l'envoi de SMSsrc/Controller/AlertController.php
: Contrôleur pour l'endpoint d'alertesrc/Message/AlertMessage.php
: Message pour le bus Messengersrc/MessageHandler/AlertMessageHandler.php
: Handler pour le traitement des messagesmigrations/
: Dossier contenant les fichiers SQL de migration
Le projet utilise le bundle Doelia/sql-migrations-bundle
pour gérer les migrations SQL sans ORM.
Les fichiers de migration sont stockés dans le dossier migrations/
Pour ajouter une nouvelle migration, créez un fichier SQL dans le dossier migrations/
avec un nom de format YYYYMMDD_feature.sql
.
L'endpoint /alerter
est sécurisé par une clé d'API qui doit être fournie dans l'en-tête HTTP X-API-KEY
La clé d'API est définie dans le fichier .env.local
via la variable API_KEY
.