API Symfony pour gérer des parcours de progression personnels (domaine → branche → compétence → objectif → étape) et déclencher des scénarios d’accompagnement générés par OpenAI.
🐘 PHP 8.3 · 🎼 Symfony 7.3 · 🗃️ PostgreSQL 16 · 🐳 Docker Compose · 🌐 Nginx · 📫 Mailpit · 🛠️ Adminer · 🤖 OpenAI (gpt-5-mini)
- CRUD JSON sur domaines, branches, compétences, objectifs et étapes.
- Découverte de compétences à partir d’un message libre (
/api/progression/skill/discover). - Génération de plans d’apprentissage pour un objectif via la file de jobs Messenger (
/api/progression/portal/open/{objective_id}). - Génération de scènes narratives autour d’une étape (
/api/progression/quest/open/{step_id}). - File interne
QueueJobavec persistance en base et reprise automatique des échecs. - Jeux de données de démo (santé, créativité…) disponibles via les fixtures.
- PHP 8.3 · Symfony 7.3 (Doctrine ORM, Serializer/ObjectMapper, Validator, Messenger)
- Base PostgreSQL 16 + migrations Doctrine
- Docker Compose : PHP-FPM, Nginx (8000), Postgres (5432), Mailpit (8025/1025), Adminer (8080)
- Provider IA :
openai-php/client(modèlegpt-5-mini) - Tests : PHPUnit · Zenstruck Foundry pour les fixtures
Prérequis : Docker et Docker Compose.
cp .env .env.local
# Adapter DATABASE_URL sur le service "database" (admin / 123456 / leveling)
# Renseigner OPENAI_API_KEY pour activer les scénarios IA
docker compose up --build -d
docker compose exec app php bin/console doctrine:migrations:migrate --no-interaction
# Optionnel : charger les données de démonstration
docker compose exec app php bin/console doctrine:fixtures:load --no-interactionPoints d’accès :
- Application : http://localhost:8000
- Mailpit : http://localhost:8025
- Adminer : http://localhost:8080
- Authentification basique :
POST /api/auth/register. - Référentiels :
/api/domains,/api/domains/{id}/branches,/api/branches/{id}/skills,/api/skills/{id}/objectives,/api/objectives/{id}/steps(CRUD). - Scénarios de progression : portal open et quest open en file async, skill discover en direct.
- Données d’exemple :
src/Fixtures/Story/DevStoryData.jsonsi les fixtures sont chargées.