2026-05-04 11:21:30 +02:00
2026-01-06 14:43:17 +01:00
2026-04-30 15:55:26 +00:00
2026-01-06 10:50:33 +01:00
2026-01-06 10:50:33 +01:00
2026-01-06 14:43:17 +01:00
2026-01-06 10:50:33 +01:00
2026-01-21 20:43:35 +01:00
2026-01-06 10:50:33 +01:00
2026-01-06 10:50:33 +01:00
2026-01-07 15:04:56 +01:00
2026-01-22 17:09:59 +01:00
2026-01-06 10:50:33 +01:00

Projet Ferme t

Installation du projet

Windows

Pour windows, il faut installer le WSL2, Ubuntu, docker et nvm. Il suffit de suivre cette doc

Linux

Pour linux, il faut installer docker et nvm. Il suffit de suivre cette doc

Installation du projet

Une fois les prérequis installés, il suffit de cloner le projet et de lancer les commandes suivantes

make start
make install

Dans le cas ou le make start plante à cause du port de la bdd, il faut modifier POSTGRES_PORT dans le fichier .env.docker.local, remplacer le par un port disponible.

Configuration global

Pour les variables d'environnement, il faut demander un .env.local pour le backend et un .env pour le frontend à votre collègue.

Vérifier que dans le .env.local, vous avez :

  • APP_SECRET (à généré dans le conteneur avec la commande php -r "echo bin2hex(random_bytes(32));" et doit être différent de celui de votre collègue, puisque utilisé pour signer des tokens)
  • DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/${POSTGRES_DB}?serverVersion=16&charset=utf8"
  • PONT_BASCULE_BYPASS (doit être à true en dev)
  • PONT_BASCULE_URL
  • JWT_SECRET_KEY (à générer avec la commande php bin/console lexik:jwt:generate-keypair)
  • JWT_PUBLIC_KEY
  • JWT_PASSPHRASE (à généré dans le conteneur avec la commande php -r "echo bin2hex(random_bytes(32));")
  • COOKIE_SECURE=0 (en dev 0 et en prod 1. Si c'est du http, laisser en 0)

Vérifier que dans le .env du dossier frontend, vous avez :

Configuration xdebug

Pour configurer xdebug, il faut ajouter un serveur sur phpstorm.
Pour cela, il faut aller dans Settings > PHP > Servers

  • Name : ferme-docker
  • Host : localhost
  • Port : 8080
  • Path : File/Directory -> l'endroit où est stocké votre projet et le path -> /var/www/html

Pour que xdebug fonctionne sur windows, il faut modifier la variable XDEBUG_CLIENT_HOST par votre ip local

Utilisation du projet

Backend

L'api est disponible sur http://localhost:8080/api Pour la bdd toutes les infos sont dans le fichier docker/.env.docker.local Vous pouvez modifier le port si nécessaire.

La bdd est déja pré-configuré dans PhpStorm, il suffit de rentrer les infos du .env.docker.local pour se connecter. C'est un bdd local dans le docker.

Frontend

Pour le frontend, il suffit de taper la commande suivante qui va lancer le serveur de dev

make dev-nuxt

Le front sera accessible sur http://localhost:3000

Authentification

Ce projet utilise l'authentification JWT avec un cookie httpOnly (LexikJWTAuthenticationBundle). Le frontend ne lit jamais directement le token, le navigateur envoie automatiquement le cookie.

Login flow

  • Frontend envoie les identifiants à:
    • POST /api/login_check
  • Backend returns:
    • 204 No Content (normal)
    • Set-Cookie: BEARER=...; HttpOnly
  • Le cookie est automatiquement envoyé pour les futures requêtes.
  • La déconnexion utilise POST /api/logout et redirige vers /login.

Fixtures

Pour lancer les fixtures (Attention sa purge la bdd complètement)

php bin/console doctrine:fixtures:load

Attention cette commande est dangereuse, à utiliser que pour les débuts de la prod ou en recette. Dans un premier temps pour remplir les listes, vous pouvez lancer la commande symfony

php bin/console app:seed

La commande va faire une update ou une création en fonction des data existante.

Livraison en recette

Préparatifs

Avant de déployer, il faut penser à ajouter les variables d'env s'il y a des changements/modifications. Le .env se trouve /var/www/ferme/.env

Le script de livraison est version dans le repo dans script/deploy-release.sh
Sur la machine, il est disponible dans /usr/local/bin/deploy-ferme
Pour le modifier, il faut copier le contenu du deploy-release.sh dans le deploy-ferme

Livraison

Sur le serveur de recette, il suffit d'utiliser cette commande pour livrer

/usr/local/bin/deploy-ferme vX.Y.Z

Commandes utiles

Pour restart le container

make restart

Pour lancer les TU

make test

Pour accéder au container et lance des commandes

make shell

Pour clear le cache Symfony

make cache-clear

Faire une migration

make migration-migrate

Pour générer un password pour un user

make shell
php bin/console security:hash-password

Sélectionner entity User, taper sont mdp, le copier et l'ajouter dans l'insert de bdd suivant :

INSERT INTO "user" (username, roles, password)
VALUES ('Mon user', '["ROLE_USER"]', 'Mon mdp hashé');

Gestion des logs

Pour suivre les logs en temps réel :

  • tail -f var/log/dev.log
  • tail -f var/log/prod.log

Feed des prix bovins

Une commande Symfony permet de mettre à jour le poids à l'arrivée, le prix au kilo et le fournisseur des bovins existants à partir d'un fichier XLSX. La commande ne crée jamais de nouveau bovin : elle complète seulement ceux déjà présents en BDD.

Format du fichier XLSX attendu

Pas de ligne d'en-tête, 4 colonnes dans cet ordre :

Colonne Champ Format Exemple
A Numéro national Avec ou sans préfixe FR (insensible casse) FR 7979580026 ou 7979580026
B Fournisseur Texte libre, casse ignorée TERRENA
C Poids à l'arrivée (kg) Entier 368
D Prix au kilo Décimal 5.7
E Code bâtiment (optionnel) B1, B2, B3, ZT (casse ignorée) B2

Comportement

  • Numéro national : le préfixe FR (avec ou sans espace) est retiré s'il est présent. Sinon la valeur est utilisée telle quelle.
  • Bovin introuvable en BDD → ligne ignorée, log warning à la fin avec aperçu.
  • Fournisseur introuvable en BDD → le bovin est mis à jour quand même avec supplier = null, log warning.
  • Bâtiment (colonne E) : recherché par code (insensible casse). Set uniquement si le bovin n'a pas déjà une buildingCase assignée (la case prime sur le bâtiment direct côté affichage). Si code introuvable → log warning, champ non set.
  • Cellules weight / price vides ou non numériques → champ non modifié.
  • La commande est idempotente : peut être relancée sans effet de bord.

Lancement en dev

Copie le fichier dans la racine du projet (mappée dans le container sous /var/www/html), puis :

# Simulation sans écriture en BDD
docker compose exec php bin/console app:feed-bovine-prices /var/www/html/feed_bovin.xlsx --dry-run

# Persistance effective
docker compose exec php bin/console app:feed-bovine-prices /var/www/html/feed_bovin.xlsx

Lancement en prod

Le user SSH n'a généralement pas les droits d'écriture sur /var/www/ferme/ ; on passe donc le fichier par /tmp et on pointe la commande dessus (le chemin du XLSX est juste un argument).

# 1. Copier le fichier sur le serveur dans /tmp (accessible en écriture)
scp feed_bovin.xlsx <user>@<host>:/tmp/

# 2. SSH sur le serveur
ssh <user>@<host>

# 3. Se placer dans le dossier de l'app (pour bin/console)
cd /var/www/ferme

# 4. Dry-run pour vérifier sans rien écrire
php bin/console app:feed-bovine-prices /tmp/feed_bovin.xlsx --dry-run

# 5. Persistance effective
php bin/console app:feed-bovine-prices /tmp/feed_bovin.xlsx

# 6. Cleanup
rm /tmp/feed_bovin.xlsx

Si à l'étape 4 le user PHP (souvent www-data) n'arrive pas à lire le fichier (Permission denied), donne-lui les droits de lecture avant : chmod 644 /tmp/feed_bovin.xlsx.

Sortie attendue

À la fin, un tableau récapitule :

  • Lignes totales lues
  • Bovins mis à jour
  • Bovins introuvables (avec aperçu des 10 premiers numéros)
  • Lignes invalides (numéro national vide)
  • Fournisseurs introuvables (avec liste et compte par nom)
  • Bâtiments introuvables (avec liste des codes inconnus)
Description
No description provided
Readme 1.9 MiB
v0.0.101 Latest
2026-05-13 15:51:59 +00:00
Languages
PHP 49.6%
Vue 35.8%
TypeScript 9.4%
Twig 3.9%
Dockerfile 0.4%
Other 0.8%