40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
/**
|
|
* C 端主播 API 客户端:与后端 MongoDB 一致,头像用 getStreamerAvatarUrl 统一展示
|
|
*/
|
|
|
|
export interface AppStreamer {
|
|
id: string
|
|
name: string
|
|
title?: string
|
|
game?: string
|
|
gameId?: number
|
|
avatar?: string | null
|
|
coverImage?: string | null
|
|
isLive?: boolean
|
|
fans?: number
|
|
hotValue?: number
|
|
tags?: string[]
|
|
intro?: string
|
|
[k: string]: unknown
|
|
}
|
|
|
|
async function fetchJson<T>(url: string): Promise<{ success: boolean; data?: T; message?: string }> {
|
|
const res = await fetch(url, { cache: "no-store" })
|
|
const json = await res.json().catch(() => ({}))
|
|
if (!res.ok) return { success: false, message: (json as { message?: string }).message ?? res.statusText }
|
|
return json as { success: boolean; data?: T; message?: string }
|
|
}
|
|
|
|
/** C 端获取主播列表(与后台数据一致) */
|
|
export async function getStreamersForApp(): Promise<AppStreamer[]> {
|
|
const r = await fetchJson<AppStreamer[]>("/api/streamers")
|
|
if (!r.success || !r.data) return []
|
|
return Array.isArray(r.data) ? r.data : []
|
|
}
|
|
|
|
/** C 端获取单条主播(与后台数据一致) */
|
|
export async function getStreamerById(id: string): Promise<AppStreamer | null> {
|
|
const r = await fetchJson<AppStreamer>(`/api/streamers/${id}`)
|
|
return r.success && r.data ? r.data : null
|
|
}
|