admin-projects/src/services/admin-api.ts

137 lines
3.9 KiB
TypeScript
Raw Normal View History

import type {
AdminUser,
DashboardStats,
AuditLog,
} from '@/types/admin'
import type { PaginatedResult, PaginationParams } from '@/types/api'
import { api } from './http-client'
import { MOCK_DASHBOARD_STATS, MOCK_AUDIT_LOGS } from './mock-data'
// ── Auth ──────────────────────────────────────────────
interface LoginResponse {
accessToken: string
refreshToken: string
adminUser: AdminUser
}
export function loginAdmin(email: string, password: string): Promise<LoginResponse> {
return api.post<LoginResponse>('/admin-api/auth/login', { email, password })
}
interface TokenPair {
accessToken: string
refreshToken: string
adminUser: AdminUser
}
export function refreshAdminToken(refreshToken: string): Promise<TokenPair> {
return api.post<TokenPair>('/admin-api/auth/refresh', { refreshToken })
}
export function logoutAdmin(refreshToken: string): Promise<void> {
return api.post<void>('/admin-api/auth/logout', { refreshToken })
}
export function getCurrentAdmin(): Promise<AdminUser> {
return api.get<AdminUser>('/admin-api/auth/me')
}
// ── Dashboard ─────────────────────────────────────────
export async function getDashboardStats(): Promise<DashboardStats> {
try {
return await api.get<DashboardStats>('/admin-api/dashboard/stats')
} catch {
if (import.meta.env.DEV) return MOCK_DASHBOARD_STATS
throw new Error('获取仪表盘数据失败')
}
}
// ── Admin Users ───────────────────────────────────────
export interface AdminUsersQuery extends PaginationParams {
search?: string
role?: string
status?: string
}
export async function getAdminUsers(
params: AdminUsersQuery,
): Promise<PaginatedResult<AdminUser>> {
try {
return await api.get<PaginatedResult<AdminUser>>(
`/admin-api/admin-users?${new URLSearchParams(params as Record<string, string>).toString()}`,
)
} catch {
if (import.meta.env.DEV) {
return {
items: [],
total: 0,
page: params.page ?? 1,
limit: params.limit ?? 20,
totalPages: 0,
}
}
throw new Error('获取管理员列表失败')
}
}
export function getAdminUserById(id: string): Promise<AdminUser> {
return api.get<AdminUser>(`/admin-api/admin-users/${id}`)
}
export function createAdminUser(data: {
email: string
password: string
displayName: string
role: string
}): Promise<AdminUser> {
return api.post<AdminUser>('/admin-api/admin-users', data)
}
export function updateAdminUser(
id: string,
data: { role?: string; status?: string; displayName?: string },
): Promise<AdminUser> {
return api.put<AdminUser>(`/admin-api/admin-users/${id}`, data)
}
export function deleteAdminUser(id: string): Promise<void> {
return api.delete<void>(`/admin-api/admin-users/${id}`)
}
// ── Audit Logs ────────────────────────────────────────
export interface AuditLogsQuery extends PaginationParams {
adminUserId?: string
action?: string
startDate?: string
endDate?: string
}
export async function getAuditLogs(
params: AuditLogsQuery,
): Promise<PaginatedResult<AuditLog>> {
try {
return await api.get<PaginatedResult<AuditLog>>(
`/admin-api/audit-logs?${new URLSearchParams(params as Record<string, string>).toString()}`,
)
} catch {
if (import.meta.env.DEV) {
return {
items: MOCK_AUDIT_LOGS,
total: MOCK_AUDIT_LOGS.length,
page: params.page ?? 1,
limit: params.limit ?? 20,
totalPages: 1,
}
}
throw new Error('获取审计日志失败')
}
}
export function getAuditLogById(id: string): Promise<AuditLog> {
return api.get<AuditLog>(`/admin-api/audit-logs/${id}`)
}