feat: 完成分龄页开发
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"timeout": 20
|
||||
}
|
||||
@@ -214,17 +214,58 @@ async function buildHomeData(db, event) {
|
||||
return { homeData };
|
||||
}
|
||||
|
||||
function normalizeIdArray(value) {
|
||||
if (!Array.isArray(value)) return [];
|
||||
return value.map((x) => String(x || '').trim()).filter(Boolean);
|
||||
}
|
||||
|
||||
function extractHomeSeedFromCurrentConfig(home) {
|
||||
const featuredIds = normalizeIdArray(home?.featured?.map((x) => x?.id));
|
||||
const hotIds = normalizeIdArray(home?.hot?.map((x) => x?.id));
|
||||
const sections = Array.isArray(home?.sections)
|
||||
? home.sections
|
||||
.map((s) => ({
|
||||
id: String(s?.id || '').trim(),
|
||||
subtitle: String(s?.subtitle || '').trim(),
|
||||
morePath: String(s?.morePath || '').trim(),
|
||||
worksheetIds: normalizeIdArray(s?.items?.map((it) => it?.id)),
|
||||
}))
|
||||
.filter((s) => s.id && Array.isArray(s.worksheetIds))
|
||||
: [];
|
||||
|
||||
return { featuredIds, hotIds, sections };
|
||||
}
|
||||
|
||||
exports.main = async (event) => {
|
||||
try {
|
||||
const db = cloud.database();
|
||||
const page = String(event.page || '').trim();
|
||||
|
||||
if (page !== 'category' && page !== 'home') {
|
||||
throw new Error('page 参数不合法,支持 category / home');
|
||||
if (page !== 'category' && page !== 'home' && page !== 'all') {
|
||||
throw new Error('page 参数不合法,支持 category / home / all');
|
||||
}
|
||||
|
||||
const config = await readCurrentConfig();
|
||||
|
||||
// 当未提供 featuredIds/hotIds/sections 时,默认从现有 home 配置反推出 worksheetIds
|
||||
// 用于“只想重建展示数据(比如 ageBand/previewImg/difficultyLabel),但不想手工维护 id 列表”的场景。
|
||||
const homeSeed = extractHomeSeedFromCurrentConfig(config.home || {});
|
||||
const homeEvent = {
|
||||
...event,
|
||||
featuredIds:
|
||||
Array.isArray(event.featuredIds) && event.featuredIds.length > 0
|
||||
? event.featuredIds
|
||||
: homeSeed.featuredIds,
|
||||
hotIds:
|
||||
Array.isArray(event.hotIds) && event.hotIds.length > 0
|
||||
? event.hotIds
|
||||
: homeSeed.hotIds,
|
||||
sections:
|
||||
Array.isArray(event.sections) && event.sections.length > 0
|
||||
? event.sections
|
||||
: homeSeed.sections,
|
||||
};
|
||||
|
||||
if (page === 'category') {
|
||||
const { categoryData, stats } = await buildCategoryData(db);
|
||||
config.category = categoryData;
|
||||
@@ -244,7 +285,7 @@ exports.main = async (event) => {
|
||||
}
|
||||
|
||||
if (page === 'home') {
|
||||
const { homeData } = await buildHomeData(db, event);
|
||||
const { homeData } = await buildHomeData(db, homeEvent);
|
||||
config.home = homeData;
|
||||
config.version = (config.version || 0) + 1;
|
||||
config.updatedAt = new Date().toISOString();
|
||||
@@ -262,6 +303,29 @@ exports.main = async (event) => {
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
if (page === 'all') {
|
||||
const { categoryData, stats } = await buildCategoryData(db);
|
||||
const { homeData } = await buildHomeData(db, homeEvent);
|
||||
config.category = categoryData;
|
||||
config.home = homeData;
|
||||
config.version = (config.version || 0) + 1;
|
||||
config.updatedAt = new Date().toISOString();
|
||||
|
||||
await saveConfig(config);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
data: {
|
||||
version: config.version,
|
||||
updatedAt: config.updatedAt,
|
||||
stats,
|
||||
featured: homeData.featured.length,
|
||||
hot: homeData.hot.length,
|
||||
sections: homeData.sections.length,
|
||||
},
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
|
||||
Reference in New Issue
Block a user