Conventions — Services
Les services sont le foyer par défaut des workflows métier.
Règles
- Injecter les dépendances via le constructeur
- Accepter des tableaux validés ou des DTOs, pas de
Requestbrut - Utiliser des transactions pour les opérations multi-write
- Logger les états de succès et d'échec sensibles
- Re-lancer les exceptions sauf si l'appelant peut se remettre
Checklist
- ✅ Les entrées sont validées avant l'appel au service
- ✅ L'autorisation se fait avant l'appel au service sensible
- ✅ Les opérations multi-write utilisent
DB::transaction() - ✅ Les logs incluent des IDs stables, pas de secrets
Exemple complet
final class UserService
{
public function __construct(
private readonly UserRepository $users,
) {}
public function create(array $data): User
{
try {
return DB::transaction(function () use ($data): User {
$user = $this->users->create($data);
Log::info('User created', ['id_user' => $user->id_user]);
return $user;
});
} catch (Throwable $e) {
Log::error('User creation failed', ['error' => $e->getMessage()]);
throw $e;
}
}
}