Commit 9a01df2c authored by duanjinfei's avatar duanjinfei

fix user rank background exec

parent 61c8e9a2
...@@ -17,6 +17,53 @@ async function count_holders(supabase) { ...@@ -17,6 +17,53 @@ async function count_holders(supabase) {
return count return count
} }
async function cacheUserRank(supabase) {
const { data: userData, error: userError } = await supabase.from('user').select('*').gt('rank', 0).order('rank', { ascending: true }).limit(100);
if (userError) {
console.error('Error fetching top 100 users:', error);
return new Response(JSON.stringify({ error: 'Failed to fetch users' }), { status: 500 });
}
// 2. 将数据 JSON 序列化
const jsonData = JSON.stringify(userData);
// 3. 生成文件名
const timestamp = Math.floor(Date.now() / 3600000) * 3600; // 计算整点的时间戳
const directory = `user-rank/${timestamp}`;
const fileName = `${directory}/user_top_100.json`;
const bucketName = 'cache'; // 替换为你的存储桶名称
const { error: uploadError } = await supabase.storage
.from(bucketName)
.upload(fileName, new Blob([jsonData]), {
contentType: 'application/json',
upsert: true, // 如果文件已存在则覆盖
});
if (uploadError) {
console.error('Error uploading file to storage:', uploadError);
}
const holdersCountFileName = `${directory}/user_holders.json`;
let holdersCount = await count_holders(supabase);
const holdersJson = JSON.stringify({
holders_count: holdersCount
});
const { error: uploadHolderError } = await supabase.storage
.from(bucketName)
.upload(holdersCountFileName, new Blob([holdersJson]), {
contentType: 'application/json',
upsert: true, // 如果文件已存在则覆盖
});
if (uploadHolderError) {
console.error('Error uploading file to storage:', uploadHolderError);
}
}
Deno.serve(async (req) => { Deno.serve(async (req) => {
if (req.method === 'OPTIONS') { if (req.method === 'OPTIONS') {
return new Response('ok', { headers: corsHeaders }) return new Response('ok', { headers: corsHeaders })
...@@ -29,51 +76,7 @@ Deno.serve(async (req) => { ...@@ -29,51 +76,7 @@ Deno.serve(async (req) => {
{ global: { headers: { Authorization: req.headers.get('Authorization')! } } } { global: { headers: { Authorization: req.headers.get('Authorization')! } } }
) )
const { data: userData, error: userError } = await supabase.from('user').select('*').gt('rank', 0).order('rank', { ascending: true }).limit(100); EdgeRuntime.waitUntil(cacheUserRank(supabase));
if (userError) {
console.error('Error fetching top 100 users:', error);
return new Response(JSON.stringify({ error: 'Failed to fetch users' }), { status: 500 });
}
// 2. 将数据 JSON 序列化
const jsonData = JSON.stringify(userData);
// 3. 生成文件名
const timestamp = Math.floor(Date.now() / 3600000) * 3600; // 计算整点的时间戳
const directory = `user-rank/${timestamp}`;
const fileName = `${directory}/user_top_100.json`;
const bucketName = 'cache'; // 替换为你的存储桶名称
const { error: uploadError } = await supabase.storage
.from(bucketName)
.upload(fileName, new Blob([jsonData]), {
contentType: 'application/json',
upsert: true, // 如果文件已存在则覆盖
});
if (uploadError) {
console.error('Error uploading file to storage:', uploadError);
return new Response(JSON.stringify({ error: 'Failed to upload file' }), { status: 500 });
}
const holdersCountFileName = `${directory}/user_holders.json`;
let holdersCount = await count_holders(supabase);
const holdersJson = JSON.stringify({
holders_count: holdersCount
});
const { error: uploadHolderError } = await supabase.storage
.from(bucketName)
.upload(holdersCountFileName, new Blob([holdersJson]), {
contentType: 'application/json',
upsert: true, // 如果文件已存在则覆盖
});
if (uploadHolderError) {
console.error('Error uploading file to storage:', uploadHolderError);
return new Response(JSON.stringify({ error: 'Failed to upload file' }), { status: 500 });
}
return new Response(JSON.stringify({ return new Response(JSON.stringify({
code: 200, code: 200,
...@@ -87,15 +90,3 @@ Deno.serve(async (req) => { ...@@ -87,15 +90,3 @@ Deno.serve(async (req) => {
return new Response(String(err?.message ?? err), { status: 500 }) return new Response(String(err?.message ?? err), { status: 500 })
} }
}) })
/* 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