Commit 873005dd authored by duanjinfei's avatar duanjinfei

fix cache recommend app data

parent ec0e7219
......@@ -42,25 +42,7 @@ const getTimestampForMidnight3AM = () => {
};
Deno.serve(async (req) => {
if (req.method === 'OPTIONS') {
return new Response('ok', { headers: corsHeaders })
}
try {
// const { name } = await req.json()
const supabase = createClient(
Deno.env.get('SUPABASE_URL') ?? '',
Deno.env.get('SUPABASE_ANON_KEY') ?? '',
{ global: { headers: { Authorization: req.headers.get('Authorization')! } } }
)
// 获取所有 app 数据
const allApps = await fetchAllData(supabase, 'app');
// 获取当前时间的整点时间戳
const timestamp = getTimestampForMidnight3AM();
// 上传所有 app 数据到 storage
const directory = `app-category/${timestamp}`;
const bucketName = 'cache'; // 替换为存储桶名称
async function cacheAllApp(supabase, allApps, directory, bucketName) {
// 分页参数
const pageSize = 30;
const totalCount = allApps.length;
......@@ -88,47 +70,12 @@ Deno.serve(async (req) => {
if (pageUploadError) {
console.error(`Error uploading page ${pageNum} JSON:`, pageUploadError);
return new Response(
JSON.stringify({ error: `Failed to upload app_all_${pageNum}.json` }),
{ status: 500 }
);
}
}
const recommandPageSize = 3;
const recommandApps = allApps.filter(app => app.recommand > 0);
const recommandTotalCount = recommandApps.length;
const recommandPaginatedApps = [];
for (let i = 0; i < recommandTotalCount; i += recommandPageSize) {
recommandPaginatedApps.push(recommandApps.slice(i, i + recommandPageSize));
}
}
// 遍历分页后的数据并上传
for (let pageNum = 1; pageNum <= recommandPageSize.length; pageNum++) {
const pageApps = recommandPageSize[pageNum - 1];
const pageJson = JSON.stringify({
total_count: recommandTotalCount,
apps: pageApps,
});
const pageFileName = `${directory}/app_recommand_${pageNum}.json`;
const { error: pageUploadError } = await supabase.storage
.from(bucketName)
.upload(pageFileName, new Blob([pageJson]), {
contentType: 'application/json',
upsert: true,
});
if (pageUploadError) {
console.error(`Error uploading page ${pageNum} JSON:`, pageUploadError);
return new Response(
JSON.stringify({ error: `Failed to upload app_recommand_${pageNum}.json` }),
{ status: 500 }
);
}
}
async function cacheCategoryApp(supabase, allApps, directory, bucketName) {
// 按 category_id 分组
const groupedData: Record<string, any[]> = {};
allApps.forEach((app) => {
......@@ -170,19 +117,120 @@ Deno.serve(async (req) => {
`Error uploading category ${categoryId} page ${pageNum} JSON:`,
categoryPageUploadError
);
return new Response(
JSON.stringify({
error: `Failed to upload category ${categoryId} page ${pageNum} JSON`,
}),
{ status: 500 }
);
}
}
}
}
async function cacheRecommendApp(supabase, allApps, directory, bucketName) {
const recommendPageSize = 3;
const recommendApps = allApps.filter(app => app.recommend > 0)
.sort((a, b) => b.recommend - a.recommend); // 按 recommend 字段降序排序
const recommendTotalCount = recommendApps.length;
const recommendPaginatedApps = [];
for (let i = 0; i < recommendTotalCount; i += recommendPageSize) {
recommendPaginatedApps.push(recommendApps.slice(i, i + recommendPageSize));
}
// 遍历分页后的数据并上传
for (let pageNum = 1; pageNum <= recommendPaginatedApps.length; pageNum++) {
const pageApps = recommendPaginatedApps[pageNum - 1];
const pageJson = JSON.stringify({
total_count: recommendTotalCount,
apps: pageApps,
});
const pageFileName = `${directory}/app_recommend_${pageNum}.json`;
const { error: pageUploadError } = await supabase.storage
.from(bucketName)
.upload(pageFileName, new Blob([pageJson]), {
contentType: 'application/json',
upsert: true,
});
if (pageUploadError) {
console.error(`Error uploading page ${pageNum} JSON:`, pageUploadError);
} else {
console.log(`Uploading page ${pageNum} JSON successful`);
}
}
}
async function cacheTaskCount(supabase, directory, bucketName) {
const pageFileName = `${directory}/task_count.json`;
// // 获取所有任务组 ID
// const { data: taskGroupArr, error: groupError } = await supabase
// .from('task')
// .select('task_group_id');
// if (groupError) {
// console.error("Error fetching task groups:", groupError);
// return;
// }
// // 提取所有任务组 ID
// const groupIds = taskGroupArr.map(group => group.task_group_id);
// // 使用 IN 操作符来一次性查询所有匹配的任务组任务数量
// const { data, error } = await supabase
// .from('taskcenter.task')
// .select('group_id, id', { count: 'exact' })
// .in('group_id', groupIds);
// if (error) {
// console.error("Error fetching task counts:", error);
// return;
// }
const pageJson = JSON.stringify({
total_count: 4,
});
const { error: pageUploadError } = await supabase.storage
.from(bucketName)
.upload(pageFileName, new Blob([pageJson]), {
contentType: 'application/json',
upsert: true,
});
if (pageUploadError) {
console.error(`Error uploading page ${pageNum} JSON:`, pageUploadError);
}
}
Deno.serve(async (req) => {
if (req.method === 'OPTIONS') {
return new Response('ok', { headers: corsHeaders })
}
try {
// const { name } = await req.json()
const supabase = createClient(
Deno.env.get('SUPABASE_URL') ?? '',
Deno.env.get('SUPABASE_ANON_KEY') ?? '',
{ global: { headers: { Authorization: req.headers.get('Authorization')! } } }
)
// 获取所有 app 数据
const allApps = await fetchAllData(supabase, 'app');
// 获取当前时间的整点时间戳
const timestamp = getTimestampForMidnight3AM();
// 上传所有 app 数据到 storage
const directory = `app-category/${timestamp}`;
const bucketName = 'cache'; // 替换为存储桶名称
await cacheAllApp(supabase, allApps, directory, bucketName)
await cacheRecommendApp(supabase, allApps, directory, bucketName)
await cacheCategoryApp(supabase, allApps, directory, bucketName)
await cacheTaskCount(supabase, directory, bucketName)
return new Response(
JSON.stringify({
message: 'All data uploaded successfully',
fileName: allAppsFileName,
}),
{
headers: { 'Content-Type': 'application/json' },
......@@ -197,18 +245,3 @@ Deno.serve(async (req) => {
});
}
})
\ No newline at end of file
/* To invoke locally:
1. Run `supabase start` (see: https://supabase.com/docs/reference/cli/supabase-start)
2. Make an HTTP request:
curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/hello-world' \
--header 'Authorization: Bearer ' \
--header 'Content-Type: application/json' \
--data '{"name":"Functions"}'
*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment