Aller au contenu principal

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 Request brut
  • 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;
}
}
}