* * @template T of UserRole */ interface UserRoleRepository { /** * @return DomainCollection */ public function findAllByUserId(UserId $userId, int $offset = 0, int $limit = 0): DomainCollection; /** * @return T */ public function find(UserId $userId, string $roleName): UserRole; public function exists(UserId $userId, string $roleName): bool; /** * @param T $userRole */ public function save(UserRole $userRole): void; /** * @param T $userRole */ public function delete(UserRole $userRole): void; }