prepare('SELECT * FROM admins WHERE login = :login AND ativo = 1'); $stmt->execute(['login' => $login]); $row = $stmt->fetch(); return $row ?: null; } public static function all(): array { return Database::pdo() ->query('SELECT * FROM admins ORDER BY ativo DESC, login ASC') ->fetchAll(); } public static function countActiveAdmins(?int $excludeId = null): int { $sql = "SELECT COUNT(*) FROM admins WHERE ativo = 1 AND papel = 'admin'"; $params = []; if ($excludeId !== null) { $sql .= ' AND id != :id'; $params['id'] = $excludeId; } $stmt = Database::pdo()->prepare($sql); $stmt->execute($params); return (int) $stmt->fetchColumn(); } public static function add(string $login, ?string $nome, string $papel, string $criadoPor): void { $stmt = Database::pdo()->prepare( 'INSERT INTO admins (login, nome, papel, criado_por) VALUES (:login, :nome, :papel, :criado_por) ON DUPLICATE KEY UPDATE ativo = 1, papel = VALUES(papel), nome = VALUES(nome)' ); $stmt->execute([ 'login' => $login, 'nome' => $nome, 'papel' => $papel, 'criado_por' => $criadoPor, ]); } public static function setActive(int $id, bool $active): void { $stmt = Database::pdo()->prepare('UPDATE admins SET ativo = :ativo WHERE id = :id'); $stmt->execute(['ativo' => $active ? 1 : 0, 'id' => $id]); } public static function setPapel(int $id, string $papel): void { $stmt = Database::pdo()->prepare('UPDATE admins SET papel = :papel WHERE id = :id'); $stmt->execute(['papel' => $papel, 'id' => $id]); } public static function find(int $id): ?array { $stmt = Database::pdo()->prepare('SELECT * FROM admins WHERE id = :id'); $stmt->execute(['id' => $id]); $row = $stmt->fetch(); return $row ?: null; } public static function touchLoginCache(string $login, ?string $nome): void { $stmt = Database::pdo()->prepare('UPDATE admins SET nome = :nome WHERE login = :login'); $stmt->execute(['nome' => $nome, 'login' => $login]); } }