mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
fix(frontend): fetch user tier on admin rate-limits page
The Subscription Tier dropdown showed "PRO" for all users because the tier was never fetched from the backend. Now fetches the tier via getV2GetUserRateLimitTier after loading rate limits, and uses postV2SetUserRateLimitTier (generated client) instead of raw fetch for tier changes.
This commit is contained in:
@@ -2,10 +2,13 @@
|
||||
|
||||
import { useState } from "react";
|
||||
import { useToast } from "@/components/molecules/Toast/use-toast";
|
||||
import type { SetUserTierRequest } from "@/app/api/__generated__/models/setUserTierRequest";
|
||||
import type { UserRateLimitResponse } from "@/app/api/__generated__/models/userRateLimitResponse";
|
||||
import {
|
||||
getV2GetUserRateLimit,
|
||||
getV2GetUserRateLimitTier,
|
||||
postV2ResetUserRateLimitUsage,
|
||||
postV2SetUserRateLimitTier,
|
||||
} from "@/app/api/__generated__/endpoints/admin/admin";
|
||||
|
||||
export interface UserOption {
|
||||
@@ -55,7 +58,9 @@ export function useRateLimitManager() {
|
||||
if (response.status !== 200) {
|
||||
throw new Error("Failed to fetch rate limit");
|
||||
}
|
||||
setRateLimitData(response.data);
|
||||
const tier = await fetchTier(response.data.user_id);
|
||||
const data = tier ? { ...response.data, tier } : response.data;
|
||||
setRateLimitData(data as typeof response.data);
|
||||
setSelectedUser({
|
||||
user_id: response.data.user_id,
|
||||
user_email: response.data.user_email ?? response.data.user_id,
|
||||
@@ -123,6 +128,18 @@ export function useRateLimitManager() {
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchTier(userId: string): Promise<string | undefined> {
|
||||
try {
|
||||
const res = await getV2GetUserRateLimitTier({ user_id: userId });
|
||||
if (res.status === 200) {
|
||||
return res.data.tier;
|
||||
}
|
||||
} catch {
|
||||
// Tier fetch is best-effort — falls back to "PRO" in the display.
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
async function fetchRateLimit(userId: string) {
|
||||
setIsLoadingRateLimit(true);
|
||||
try {
|
||||
@@ -130,7 +147,10 @@ export function useRateLimitManager() {
|
||||
if (response.status !== 200) {
|
||||
throw new Error("Failed to fetch rate limit");
|
||||
}
|
||||
setRateLimitData(response.data);
|
||||
// Fetch the user's tier in parallel so the dropdown shows the correct value.
|
||||
const tier = await fetchTier(userId);
|
||||
const data = tier ? { ...response.data, tier } : response.data;
|
||||
setRateLimitData(data as typeof response.data);
|
||||
} catch (error) {
|
||||
console.error("Error fetching rate limit:", error);
|
||||
toast({
|
||||
@@ -181,19 +201,12 @@ export function useRateLimitManager() {
|
||||
async function handleTierChange(newTier: string) {
|
||||
if (!rateLimitData) return;
|
||||
|
||||
const response = await fetch(
|
||||
"/api/proxy/api/copilot/admin/rate_limit/tier",
|
||||
{
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
user_id: rateLimitData.user_id,
|
||||
tier: newTier,
|
||||
}),
|
||||
},
|
||||
);
|
||||
const response = await postV2SetUserRateLimitTier({
|
||||
user_id: rateLimitData.user_id,
|
||||
tier: newTier as SetUserTierRequest["tier"],
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
if (response.status !== 200) {
|
||||
throw new Error("Failed to update tier");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user