import { apiDelete, apiGet, apiPost, compactApiParams } from "@/services/api/request"; import type { Prompt, PromptListResponse } from "@/services/api/prompts"; export type AdminPromptCategory = { category: string; name: string; description: string; file: string; githubUrl: string; remote: boolean; }; export type AdminUser = { id: string; username: string; email: string; displayName: string; avatarUrl: string; role: "user" | "admin"; credits: number; affCode: string; affCount: number; inviterId: string; linuxDoId: string; status: "active" | "ban"; lastLoginAt: string; createdAt: string; updatedAt: string; }; export type AdminUserListResponse = { items: AdminUser[]; total: number; }; export type AdminUserQuery = { keyword?: string; page?: number; pageSize?: number; }; export async function fetchAdminUsers(token: string, query: AdminUserQuery = {}) { return apiGet("/api/admin/users", compactApiParams(query), token); } export async function saveAdminUser(token: string, user: Partial & { password?: string }) { return apiPost("/api/admin/users", user, token); } export async function deleteAdminUser(token: string, id: string) { return apiDelete(`/api/admin/users/${encodeURIComponent(id)}`, token); } export async function fetchAdminPromptCategories(token: string) { return apiGet("/api/admin/prompt-categories", undefined, token); } export async function syncAdminPromptCategory(token: string, category: string) { return apiPost("/api/admin/prompt-categories/sync", { category }, token); } export type AdminPromptQuery = { keyword?: string; category?: string; tag?: string[]; page?: number; pageSize?: number; }; export type AdminAsset = { id: string; title: string; type: "text" | "image" | "video"; coverUrl: string; tags: string[]; category: string; description: string; content: string; url: string; createdAt: string; updatedAt: string; }; export type AdminAssetListResponse = { items: AdminAsset[]; tags: string[]; total: number; }; export async function fetchAdminPrompts(token: string, query: AdminPromptQuery = {}) { return apiGet("/api/admin/prompts", compactApiParams(query), token); } export async function saveAdminPrompt(token: string, prompt: Partial) { return apiPost("/api/admin/prompts", prompt, token); } export async function deleteAdminPrompt(token: string, id: string) { return apiDelete(`/api/admin/prompts/${encodeURIComponent(id)}`, token); } export async function deleteAdminPrompts(token: string, ids: string[]) { return apiPost("/api/admin/prompts/batch-delete", { ids }, token); } export type AdminAssetQuery = { keyword?: string; type?: string; tag?: string[]; page?: number; pageSize?: number; }; export async function fetchAdminAssets(token: string, query: AdminAssetQuery = {}) { return apiGet("/api/admin/assets", compactApiParams(query), token); } export async function saveAdminAsset(token: string, asset: Partial) { return apiPost("/api/admin/assets", asset, token); } export async function deleteAdminAsset(token: string, id: string) { return apiDelete(`/api/admin/assets/${encodeURIComponent(id)}`, token); } export type AdminModelChannel = { protocol: "openai"; name: string; baseUrl: string; apiKey: string; models: string[]; weight: number; enabled: boolean; remark: string; }; export type AdminPublicModelChannelSettings = { availableModels: string[]; defaultModel: string; defaultImageModel: string; defaultVideoModel: string; defaultTextModel: string; systemPrompt: string; allowCustomChannel: boolean; }; export type AdminPublicSettings = { modelChannel: AdminPublicModelChannelSettings; auth: { linuxDo: { enabled: boolean; }; }; }; export type AdminPrivateSettings = { channels: AdminModelChannel[]; promptSync: { enabled: boolean; cron: string; }; auth: { linuxDo: { clientId: string; clientSecret: string; redirectUri: string; minimumTrustLevel: number; }; }; }; export type AdminSettings = { public: AdminPublicSettings; private: AdminPrivateSettings; }; export async function fetchAdminSettings(token: string) { return apiGet("/api/admin/settings", undefined, token); } export async function saveAdminSettings(token: string, settings: AdminSettings) { return apiPost("/api/admin/settings", settings, token); } export type AdminChannelActionRequest = { index?: number; channel: AdminModelChannel; model?: string; }; export async function fetchChannelModels(token: string, payload: AdminChannelActionRequest) { return apiPost("/api/admin/settings/channel-models", payload, token); } export async function testChannelModel(token: string, payload: AdminChannelActionRequest) { return apiPost("/api/admin/settings/channel-test", payload, token); }