<?php

declare(strict_types=1);

namespace App\Module\Core\Domain\Repository;

use App\Module\Core\Domain\Entity\Role;

/**
 * Contrat des roles RBAC.
 *
 * Utilise par les fixtures, la future API d'administration (ticket #344) et
 * le PermissionVoter pour resoudre les permissions effectives d'un role.
 */
interface RoleRepositoryInterface
{
    public function findById(int $id): ?Role;

    public function findByCode(string $code): ?Role;

    /**
     * @return array<int, Role>
     */
    public function findAll(): array;

    public function save(Role $role): void;
}
