# Prophar — Vitrine : stack technique & architecture

## 1. Style d'architecture

**ADR — Action-Domain-Responder** (variante moderne du MVC, orientée « une action = une classe »).

- Chaque page/endpoint = **une classe invocable** (`__invoke`) sous `src/Action/<Domaine>/`, avec sa propre route en attribut. Pas de contrôleur « fourre-tout ».
- Organisation **par domaine métier** puis par rôle technique (Action, Dto, Builder, Service, Entity, Repository, Serializer/Normalizer, Security/Voter…).
- **Pourquoi** : lisibilité, testabilité, refactoring sûr (le nom de classe = nom de route), montée en charge fonctionnelle propre vers la phase 2 (prise de commande). C'est l'architecture de référence demandée pour le projet.

**Adaptations assumées pour l'hébergement mutualisé** :
- **PHP-FPM classique** (pas de FrankenPHP / worker permanent).
- **MySQL / MariaDB** (pas PostgreSQL).
- Tâches asynchrones prévues **par cron** (pas de daemon).
- **AssetMapper** (assets sans build Node) → rien à compiler côté serveur.

## 2. Versions

| Élément | Version | Pourquoi |
|---|---|---|
| **Symfony** | **7.4 LTS** | Version à support long : **corrections de bugs jusqu'en nov. 2028**, **sécurité jusqu'en nov. 2029**. Idéal pour un site à faible maintenance. |
| **PHP** | **≥ 8.4** | Dernière version majeure ; permet des dépendances à jour tout en restant compatible mutualisé. Plancher figé (`composer config.platform`) pour la reproductibilité. |
| Base de données | MySQL/MariaDB | Standard mutualisé (phase 2 ; dormant en phase 1 — la vitrine est éditoriale, sans BDD). |

## 3. Bundles & dépendances (et pourquoi)

### Cœur du framework
- **symfony/framework-bundle** — socle Symfony (routing, DI, HTTP kernel).
- **symfony/flex** + **symfony/runtime** — gestion des recettes/config et bootstrap standard (PHP-FPM).
- symfony/dotenv, console, yaml, string — utilitaires de base.

### Rendu & front-end
- **symfony/twig-bundle** + **twig/extra-bundle** — moteur de templates.
- **symfony/asset-mapper** + **symfony/asset** — gestion des CSS/JS **sans Node** (importmap, fichiers versionnés) → compatible mutualisé, cache long.
- **symfony/ux stimulus-bundle** — micro-interactions JS (gardé minimal ; Turbo retiré volontairement pour une vitrine).
- **symfony/web-link** — indices de préchargement (perf).

### Internationalisation (fr / en / zh)
- **symfony/translation** — traductions d'interface et de contenu (fichiers **XLIFF**).
- **symfony/intl** — gestion des locales, URLs `/fr` `/en` `/zh`, `hreflang`.

### Formulaires & validation
- **symfony/form** — formulaires (connexion, contact).
- **symfony/validator** — validation des données.
- symfony/property-access, property-info — support formulaires/sérialisation.

### Sécurité & intégration WordPress
- **symfony/security-bundle** — pare-feu / authentification (support du **pont Espace Officine** en phase 2).
- **symfony/http-client** — appels **serveur-à-serveur** vers WordPress/Ultimate Member (pont d'auth, secret jamais exposé au navigateur).

### E-mails & messages
- **symfony/mailer** + **symfony/mime** — envoi d'e-mails (formulaire de contact).
- **symfony/notifier** — notifications (disponible si besoin).
- **symfony/messenger** (+ **doctrine-messenger**) — file de messages : **synchrone en phase 1**, consommable **par cron** en phase 2.

### Données (installé, **dormant en phase 1**, prêt pour la phase 2)
- **doctrine/orm** + **doctrine-bundle** + **doctrine-migrations-bundle** — ORM MySQL et migrations de schéma.
- **stof/doctrine-extensions** (Gedmo) — Timestampable / **Translatable** (contenu éditorial multilingue en base, phase 2).
- **jolicode/automapper** — mapping DTO ↔ Entité (couche de l'architecture ADR).
- **symfony/serializer** — sortie JSON contrôlée (Normalizers dédiés).

### Production / hébergement
- **symfony/apache-pack** — génère le `.htaccess` (**URLs propres** sur Apache/LiteSpeed mutualisé).
- **symfony/monolog-bundle** — journalisation.
- symfony/expression-language, process — expressions (voters/config) et commandes système.

### Qualité & tests (**dev uniquement**, pas déployés)
- **PHPStan** (level 8 + strict-rules + extensions Symfony/Doctrine) — analyse statique.
- **php-cs-fixer** (preset `@Symfony`) — style de code homogène.
- **PHPUnit** + **Zenstruck Foundry** + **Zenstruck Browser** — tests.
- **maker-bundle**, **web-profiler-bundle**, **debug-bundle** — outillage de développement.

## 4. En résumé pour le client

Un socle **Symfony 7.4 LTS / PHP 8.4** robuste et maintenu plusieurs années, organisé en **architecture ADR** propre et évolutive, **optimisé pour un hébergement mutualisé** (pas de dépendance à Docker/worker en production), **trilingue**, avec les briques nécessaires déjà en place pour la **phase 2** (base de données, prise de commande) sans refonte.
