Files
wzdj/lib/api/streamers.ts

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
}