Files
Classeo/CONTRIBUTING.md
Mathias STRASSER 6da5996340 feat: Setup projet Classeo avec infrastructure Docker et architecture DDD
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
2026-01-30 15:31:07 +01:00

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.md a la racine du projet pour les conventions specifiques (style d'imports PHP, format des messages de commit, etc.).

PHP Backend

  1. declare(strict_types=1); sur la premiere ligne de chaque fichier
  2. PHPStan level 9 - Zero erreur toleree
  3. Domain = PHP pur - Aucune dependance Symfony/Doctrine dans src/*/Domain/
  4. Value Objects immutables - final readonly class
  5. No null returns - Utiliser exceptions ou Null Object

TypeScript Frontend

  1. Strict mode active
  2. Svelte 5 Runes uniquement - $state, $derived, $effect
  3. Jamais writable(), on:click, export let (Svelte 4)
  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 - Production
  • develop - Integration
  • feature/XXX - Nouvelles fonctionnalites
  • fix/XXX - Corrections de bugs

Commits

Format : type(scope): description

Types :

  • feat - Nouvelle fonctionnalite
  • fix - Correction de bug
  • refactor - Refactoring
  • docs - Documentation
  • test - Ajout de tests
  • chore - 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.