42d06dd49f9291d175fe7b4de6199302cd9563fc
Translation system: - Add LibreTranslate container (dev + prod), CPU-only, no port exposed, FR/EN/ES/DE/IT - Create app:translate command: reads *.fr.yaml, translates incrementally, preserves placeholders - Makefile: make trans / make trans_prod (stops container after translation) - Ansible: start libretranslate -> translate -> stop during deploy - Prod container restart: "no" (only runs during deploy) - .gitignore: ignore generated *.en/es/de/it.yaml files - 11 tests for TranslateCommand (API unreachable, empty, incremental, obsolete keys, placeholders, fallback) Test coverage improvements: - OrderController: event ended (400), invalid cart JSON, invalid email, stock zero (4 new tests) - AccountController: finance stats all statuses (paid/pending/refunded/cancelled), soldCounts (2 new tests) - JS cart: checkout without error elements, hide error on retry, stock polling edge cases (singular, no label, qty zero, unknown billet) (8 new tests) - JS editor: comment node sanitization (1 new test) - JS tabs: missing panel, generated id, parent null, click no-panel (5 new tests) Code duplication fixes: - MeilisearchConsistencyCommand: extract diffAndReport() method (was duplicated 3x) - Email templates: extract _order_items_table.html.twig partial (shared by notification + cancelled) - SonarQube: exclude src/Entity/** from CPD (getters/setters duplication) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
E-Ticket
Plateforme destinee aux associations pour la vente de tickets evenementiels, la reservation de tables, l'organisation de brocantes et le vote en ligne.
Stack technique
| Composant | Technologie |
|---|---|
| Backend | Symfony 8 / PHP 8.4 |
| Base de donnees | PostgreSQL 16 |
| Cache / Queue | Redis 7 |
| Async | Symfony Messenger |
| Frontend | Bun / Vite / Tailwind CSS |
| Serveur web | Caddy |
| Amazon SES | |
| DNS / CDN | Cloudflare |
| Deploiement | Ansible / Gitea Actions |
Architecture
Developpement
| Service | Port |
|---|---|
| Caddy (web) | localhost:8000 |
| Vite (HMR) | localhost:5173 |
| PostgreSQL | localhost:5432 |
| Redis | localhost:6379 |
| Mailpit (SMTP) | localhost:1025 |
| Mailpit (UI) | localhost:8025 |
| RedisInsight | localhost:5540 |
Production
- 2x PHP-FPM (load balancing via Caddy)
- PostgreSQL master / slave (replication)
- PgBouncer (connection pooling)
- 2x Messenger workers
- Redis
- Caddy installe sur la machine hote
Prerequis
- Docker & Docker Compose
- Make
Installation
# Build les images
make build_dev
# Lance les containers
make start_dev
# Install les dependances
make install_dev
Commandes disponibles
make help
| Commande | Description |
|---|---|
make build_dev |
Build les images Docker dev |
make build_prod |
Build les images Docker prod |
make start_dev |
Lance les containers dev |
make start_prod |
Lance les containers prod (background) |
make stop_dev |
Arrete les containers dev |
make stop_prod |
Arrete les containers prod |
make purge_dev |
Arrete et purge tout (volumes, images) |
make install_dev |
Install les dependances via Docker |
make install_prod |
Install les dependances et build les assets |
make migration_dev |
Genere une migration |
make migrate_dev |
Execute les migrations en dev |
make migrate_prod |
Execute les migrations en prod |
Base de donnees
Dev
| Param | Valeur |
|---|---|
| Host | localhost |
| Port | 5432 |
| Database | e-ticket |
| User | app |
| Password | secret |
Prod
PostgreSQL master/slave avec PgBouncer. Replication streaming asynchrone.
Deploiement
Le deploiement se fait via Gitea Actions (declenchement manuel) + Ansible.
# Deployer la config Caddy
ansible-playbook -i ansible/hosts.ini ansible/deploy-caddy.yml --ask-vault-pass
Mode maintenance
Pour activer la maintenance :
touch /var/www/e-ticket/public/.update
Pour desactiver :
rm /var/www/e-ticket/public/.update
Licence
Licence proprietaire. Voir LICENSE.md.
Description
Languages
PHP
59.3%
Twig
31.5%
JavaScript
6.3%
Shell
1%
SCSS
0.6%
Other
1.3%