*/ public function findPaginated(int $page, int $perPage): PaginatedResult; public function findById(int $id): ?User; public function delete(int $id): void; /** * @throws DuplicateUsernameException * @throws DuplicateEmailException * @throws WeakPasswordException * @throws InvalidRoleException */ public function createUser(string $username, string $email, string $plainPassword, string $role = User::ROLE_USER): User; /** * @throws InvalidRoleException */ public function updateRole(int $id, string $role): void; }