Configure l'environnement de développement complet avec Docker Compose, structure DDD 4 Bounded Contexts, et pipeline CI/CD GitHub Actions. Corrections compatibilité CI: - Symfony 8 nécessite monolog-bundle ^4.0 (la v3.x ne supporte que jusqu'à Symfony 7) - ESLint v9 nécessite flat config (eslint.config.js) - le format .eslintrc.cjs est obsolète
3.2 KiB
3.2 KiB
Guide de Contribution - Classeo
Pre-requis
- Docker Desktop 24+
- Git
Setup Developpeur
1. Cloner et lancer
git clone https://github.com/ClasseoEdu/classeo.git
cd classeo
docker compose up -d
2. Verifier le setup
# Tous les services doivent etre "healthy"
docker compose ps
# Backend repond (port 18000 pour eviter conflit avec services locaux)
curl http://localhost:18000/api
# Frontend repond (port 5174 pour eviter conflit avec services locaux)
curl http://localhost:5174
Regles de Code
Important
: Lire le fichier
CLAUDE.mda la racine du projet pour les conventions specifiques (style d'imports PHP, format des messages de commit, etc.).
PHP Backend
declare(strict_types=1);sur la premiere ligne de chaque fichier- PHPStan level 9 - Zero erreur toleree
- Domain = PHP pur - Aucune dependance Symfony/Doctrine dans
src/*/Domain/ - Value Objects immutables -
final readonly class - No null returns - Utiliser exceptions ou Null Object
TypeScript Frontend
- Strict mode active
- Svelte 5 Runes uniquement -
$state,$derived,$effect - Jamais
writable(),on:click,export let(Svelte 4) - Composants PascalCase -
MyComponent.svelte
Conventions Nommage
| Element | Convention | Exemple |
|---|---|---|
| Classes PHP | PascalCase | NoteRepository |
| Methodes | camelCase | findByStudent() |
| Events | FR nom + EN verbe passe | NoteRecorded |
| Value Objects | final readonly class |
NoteId |
| Composants Svelte | PascalCase.svelte | GradeCard.svelte |
Workflow Git
Branches
main- Productiondevelop- Integrationfeature/XXX- Nouvelles fonctionnalitesfix/XXX- Corrections de bugs
Commits
Format : type(scope): description
Types :
feat- Nouvelle fonctionnalitefix- Correction de bugrefactor- Refactoringdocs- Documentationtest- Ajout de testschore- Maintenance
Exemples :
feat(auth): add JWT authentication
fix(notes): correct average calculation
refactor(admin): extract user service
Tests
Avant de commit
# Backend
docker compose exec php composer phpstan
docker compose exec php composer test
# Frontend
docker compose exec frontend pnpm run lint
docker compose exec frontend pnpm run check
docker compose exec frontend pnpm run test
CI/CD
GitHub Actions execute automatiquement :
- PHPStan level 9
- PHPUnit tests
- ESLint
- TypeScript check
- Vitest
- Playwright E2E
- BC isolation check
- Naming conventions check
Architecture
Bounded Contexts
Ne pas creer de dependances directes entre BC. Utiliser :
- Contracts pour les interfaces partagees
- Domain Events pour la communication async
Domain Layer
// ✅ CORRECT - Pure PHP
namespace App\Scolarite\Domain\Model;
final readonly class NoteId extends EntityId {}
// ❌ INCORRECT - Framework dependency
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class Note {}
Infrastructure Layer
Les mappings Doctrine vont dans Infrastructure/Persistence/Mapping/.
Questions ?
Ouvrir une issue sur GitHub ou contacter l'equipe sur le canal #classeo-dev.