57 lines
2.4 KiB
TypeScript
57 lines
2.4 KiB
TypeScript
// src/lib/ssg.ts — SSG 构建专用接口层(仅 Node 构建期)
|
||
//
|
||
// 本文件只装「构建期 SSG 取数」:所有函数调用 /api/internal/ssg/* 内部端口
|
||
// (仅 127.0.0.1,nginx 不反代,由 astro build 时的 Node 进程调用),
|
||
// 走 request.ts 的 requestSsg()(自动带 SSG_TOKEN + ?locale=)。
|
||
//
|
||
// 与 api.ts 的「浏览器运行期公开业务 + 鉴权 + 收藏 + 历史」隔离,
|
||
// 避免「仅构建期才有意义」的代码混进客户端逻辑(这些函数从不进客户端 bundle)。
|
||
|
||
import { requestSsg } from "./request"
|
||
import { endpoints } from "./endpoints"
|
||
import type { BrandEntry, StreetSnapItem } from "./api"
|
||
|
||
// 后端热门品牌项(与 SSG popular brand 对齐)。
|
||
export interface SsgPopularBrand {
|
||
id: string
|
||
article_id: string
|
||
brand: string
|
||
cover: string
|
||
title: string
|
||
}
|
||
|
||
// 接口:GET /api/internal/ssg/home/runway(SSG 内部端口,构建期 Node 调用)
|
||
// 首页 runway 区块数据,含多个模块;hotBrand 为其中之一(当前仅此模块)。
|
||
export async function getSsgIndexRunway(): Promise<{ hotBrand: SsgPopularBrand[] }> {
|
||
const j = await requestSsg<{ data?: { hotBrand?: SsgPopularBrand[] } }>(endpoints.ssg.homeRunway)
|
||
return { hotBrand: j?.data?.hotBrand ?? [] }
|
||
}
|
||
|
||
// 接口:GET /api/internal/ssg/brands/popular(SSG 内部端口,构建期 Node 调用)
|
||
// 走秀页热门品牌(按图片总数排名,结果按热度顺序)。后端固定返回前 30 个。
|
||
export async function getSsgHotBrands(): Promise<BrandEntry[]> {
|
||
const j = await requestSsg<{ data?: any[] }>(endpoints.ssg.hotBrands)
|
||
return (j?.data ?? []).map((b: any) => {
|
||
const nameEn = (b.name_en || b.name || "").toString()
|
||
return {
|
||
id: String(b.id),
|
||
name: nameEn,
|
||
nameCn: (b.name_cn || "").toString(),
|
||
display: nameEn,
|
||
}
|
||
})
|
||
}
|
||
|
||
// 接口:GET /api/internal/ssg/street-snaps/popular(SSG 内部端口,构建期 Node 调用)
|
||
// 首页「Street Style」热门街拍(按图片数前 N,返回完整对象含封面)。
|
||
export async function getSsgStreetSnapPopular(limit = 12): Promise<StreetSnapItem[]> {
|
||
const j = await requestSsg<{ data?: any[] }>(`${endpoints.ssg.streetSnapPopular}?limit=${limit}`)
|
||
return (j?.data ?? []).map((b: any) => ({
|
||
id: String(b.id),
|
||
title: b.title ?? "",
|
||
cover: b.cover ?? "",
|
||
image_count: Number(b.image_count ?? 0),
|
||
images: [],
|
||
}))
|
||
}
|