generated from fahricansecer/boilerplate-fe
This commit is contained in:
@@ -366,3 +366,126 @@ export const notificationsApi = {
|
||||
apiClient.delete(`/notifications/${id}`).then((r) => r.data),
|
||||
};
|
||||
|
||||
// ── Admin API Types ────────────────────────────────────────────────────────
|
||||
|
||||
export interface AdminUser {
|
||||
id: string;
|
||||
email: string;
|
||||
firstName?: string;
|
||||
lastName?: string;
|
||||
isActive: boolean;
|
||||
createdAt: string;
|
||||
roles?: Array<{ role: { id: string; name: string } }>;
|
||||
}
|
||||
|
||||
export interface AdminProject {
|
||||
id: string;
|
||||
title: string;
|
||||
status: string;
|
||||
progress: number;
|
||||
creditsUsed: number;
|
||||
language: string;
|
||||
sourceType: string;
|
||||
createdAt: string;
|
||||
user: { id: string; email: string; firstName?: string; lastName?: string };
|
||||
_count: { scenes: number; renderJobs: number };
|
||||
}
|
||||
|
||||
export interface AdminRenderJob {
|
||||
id: string;
|
||||
status: string;
|
||||
currentStage?: string;
|
||||
attemptNumber: number;
|
||||
processingTimeMs?: number;
|
||||
errorMessage?: string;
|
||||
workerHostname?: string;
|
||||
createdAt: string;
|
||||
startedAt?: string;
|
||||
completedAt?: string;
|
||||
project: {
|
||||
id: string;
|
||||
title: string;
|
||||
user: { id: string; email: string; firstName?: string; lastName?: string };
|
||||
};
|
||||
}
|
||||
|
||||
export interface AdminPlan {
|
||||
id: string;
|
||||
name: string;
|
||||
displayName: string;
|
||||
description?: string;
|
||||
monthlyPrice: number;
|
||||
yearlyPrice?: number;
|
||||
currency: string;
|
||||
monthlyCredits: number;
|
||||
maxDuration: number;
|
||||
maxResolution: string;
|
||||
maxProjects: number;
|
||||
isActive: boolean;
|
||||
sortOrder: number;
|
||||
features?: Record<string, unknown>;
|
||||
_count: { subscriptions: number };
|
||||
}
|
||||
|
||||
export interface AdminStats {
|
||||
users: { total: number; active: number; inactive: number };
|
||||
projects: { total: number; byStatus: Record<string, number> };
|
||||
renderJobs: { byStatus: Record<string, number>; active: number };
|
||||
credits: { totalGranted: number; totalUsed: number };
|
||||
plans: { total: number };
|
||||
templates: { total: number };
|
||||
storage?: unknown;
|
||||
recentUsers: AdminUser[];
|
||||
}
|
||||
|
||||
// ── Admin API Functions ─────────────────────────────────────────────────────
|
||||
|
||||
export const adminApi = {
|
||||
getStats: () =>
|
||||
apiClient.get<AdminStats>('/admin/stats').then((r) => r.data),
|
||||
|
||||
getUsers: (params?: { page?: number; limit?: number }) =>
|
||||
apiClient.get<PaginatedResponse<AdminUser>>('/admin/users', { params }).then((r) => r.data),
|
||||
|
||||
getUserDetail: (id: string) =>
|
||||
apiClient.get(`/admin/users/${id}/detail`).then((r) => r.data),
|
||||
|
||||
toggleUserActive: (id: string) =>
|
||||
apiClient.put(`/admin/users/${id}/toggle-active`).then((r) => r.data),
|
||||
|
||||
banUser: (id: string) =>
|
||||
apiClient.put(`/admin/users/${id}/ban`).then((r) => r.data),
|
||||
|
||||
activateUser: (id: string) =>
|
||||
apiClient.put(`/admin/users/${id}/activate`).then((r) => r.data),
|
||||
|
||||
grantCredits: (userId: string, data: { amount: number; description: string }) =>
|
||||
apiClient.post(`/admin/users/${userId}/credits`, data).then((r) => r.data),
|
||||
|
||||
assignRole: (userId: string, roleId: string) =>
|
||||
apiClient.post(`/admin/users/${userId}/roles/${roleId}`).then((r) => r.data),
|
||||
|
||||
removeRole: (userId: string, roleId: string) =>
|
||||
apiClient.delete(`/admin/users/${userId}/roles/${roleId}`).then((r) => r.data),
|
||||
|
||||
getProjects: (params?: { page?: number; limit?: number; status?: string; userId?: string }) =>
|
||||
apiClient.get<PaginatedResponse<AdminProject>>('/admin/projects', { params }).then((r) => r.data),
|
||||
|
||||
deleteProject: (id: string) =>
|
||||
apiClient.delete(`/admin/projects/${id}`).then((r) => r.data),
|
||||
|
||||
getRenderJobs: (params?: { page?: number; limit?: number; status?: string }) =>
|
||||
apiClient.get<PaginatedResponse<AdminRenderJob>>('/admin/render-jobs', { params }).then((r) => r.data),
|
||||
|
||||
getPlans: () =>
|
||||
apiClient.get<AdminPlan[]>('/admin/plans').then((r) => r.data),
|
||||
|
||||
updatePlan: (id: string, data: Partial<AdminPlan>) =>
|
||||
apiClient.put(`/admin/plans/${id}`, data).then((r) => r.data),
|
||||
|
||||
getRoles: () =>
|
||||
apiClient.get('/admin/roles').then((r) => r.data),
|
||||
|
||||
createRole: (data: { name: string; description?: string }) =>
|
||||
apiClient.post('/admin/roles', data).then((r) => r.data),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user