docs: 清理过时文档,新增首页API契约并更新相关内容

- 删除backend-plan.md、backend-api-service.md等多份过时项目文档
- 新增home-api.md规范首页三类内容的Admin API补充契约
- 更新docs/README.md的文档清单与展示格式
- 优化integration-workflow.md、admin-api-requirements.md等文档的表格与内容
- 为WonderQ-MiniAPP的homeExperienceData.ts新增API适配类型与归一化函数
This commit is contained in:
duanshuwen committed 2026-08-18 20:00:25 +08:00
1 parent ca6f9397e0
commit cda8069630
11 files changed
+475 -512

No files matched your search

@@ -8,6 +8,20 @@ export type HomeExperience = {
demandKeyword: string;
};
export type HomeExperienceApiItem = {
id?: string | null;
badge?: string | null;
category?: string | null;
title?: string | null;
englishTitle?: string | null;
image?: string | null;
demandKeyword?: string | null;
isActive?: boolean | null;
sortOrder?: number | null;
};
export type HomeExperiences = HomeExperienceApiItem[];
export const homeExperienceMocks: HomeExperience[] = [
{
id: "waterfall-descent",
@@ -28,3 +42,37 @@ export const homeExperienceMocks: HomeExperience[] = [
demandKeyword: "地心探险",
},
];
export const homeExperienceFallback = homeExperienceMocks;
export function normalizeHomeExperiences(
items: HomeExperiences | null | undefined,
): HomeExperience[] {
const fallback = homeExperienceFallback.map((item) => ({ ...item }));
const activeItems = (items ?? [])
.map((item, index) => ({ item, index }))
.filter(({ item }) => item.isActive !== false && Boolean(item.title?.trim()))
.sort(
(left, right) =>
(left.item.sortOrder ?? left.index) - (right.item.sortOrder ?? right.index),
);
if (activeItems.length === 0) {
return fallback;
}
return activeItems.map(({ item }, index) => {
const fallbackItem = homeExperienceFallback[index] ?? homeExperienceFallback[0];
const title = item.title?.trim() || fallbackItem.title;
return {
id: item.id?.trim() || fallbackItem.id,
badge: item.badge?.trim() || fallbackItem.badge,
category: item.category?.trim() || fallbackItem.category,
title,
englishTitle: item.englishTitle?.trim() || fallbackItem.englishTitle,
image: item.image?.trim() || fallbackItem.image,
demandKeyword: item.demandKeyword?.trim() || title,
};
});
}