Refactor admin stats API and charts data models for consistency

- Updated `AdminStatsResponse` with streamlined type annotations and added `AdminStatsData` type definition.
- Renamed chart data model fields (`totalUsers` → `total_users`, `activeUsers` → `active_users`, `members` → `value`, etc.) for alignment with backend naming conventions.
- Adjusted related test files to reflect updated data model structure.
- Improved readability of `AdminPage` component by reformatting destructuring in `useQuery`.
This commit is contained in:
Felipe Cardoso
2025-11-24 12:44:45 +01:00
parent 2e4700ae9b
commit acfe59c8b3
4 changed files with 40 additions and 29 deletions

View File

@@ -19,7 +19,11 @@ import { useQuery } from '@tanstack/react-query';
import { getAdminStats } from '@/lib/api/admin';
export default function AdminPage() {
const { data: stats, isLoading, error } = useQuery({
const {
data: stats,
isLoading,
error,
} = useQuery({
queryKey: ['admin', 'stats'],
queryFn: async () => {
const response = await getAdminStats();

View File

@@ -2,44 +2,51 @@ import { apiClient } from './client';
import type { Options } from './generated/sdk.gen';
export interface UserGrowthData {
date: string;
total_users: number;
active_users: number;
date: string;
total_users: number;
active_users: number;
}
export interface OrgDistributionData {
name: string;
value: number;
name: string;
value: number;
}
export interface UserStatusData {
name: string;
value: number;
name: string;
value: number;
}
export interface AdminStatsResponse {
user_growth: UserGrowthData[];
organization_distribution: OrgDistributionData[];
user_status: UserStatusData[];
user_growth: UserGrowthData[];
organization_distribution: OrgDistributionData[];
user_status: UserStatusData[];
}
export type AdminStatsData = {
body?: never;
path?: never;
query?: never;
url: '/api/v1/admin/stats';
};
/**
* Admin: Get Dashboard Stats
*
* Get aggregated statistics for the admin dashboard (admin only)
*/
export const getAdminStats = <ThrowOnError extends boolean = false>(
options?: Options<any, ThrowOnError>
options?: Options<AdminStatsData, ThrowOnError>
) => {
return (options?.client ?? apiClient).get<AdminStatsResponse, any, ThrowOnError>({
responseType: 'json',
security: [
{
scheme: 'bearer',
type: 'http',
},
],
url: '/api/v1/admin/stats',
...options,
});
return (options?.client ?? apiClient).get<AdminStatsResponse, unknown, ThrowOnError>({
responseType: 'json',
security: [
{
scheme: 'bearer',
type: 'http',
},
],
url: '/api/v1/admin/stats',
...options,
});
};