mirror of
https://github.com/joeseesun/wechat-radar.git
synced 2026-09-11 19:58:30 +09:00
Initial open source release
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { NextRequest } from 'next/server';
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import { mimeFor, resolveWxImage } from '@/lib/wx-image';
|
||||
import { db } from '@/lib/db';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
const url = new URL(req.url);
|
||||
const localIdStr = url.searchParams.get('local_id');
|
||||
const chatroomId = url.searchParams.get('chatroom') ?? undefined;
|
||||
const hintMonth = url.searchParams.get('month') ?? undefined;
|
||||
|
||||
const localId = Number(localIdStr);
|
||||
if (!localIdStr || !Number.isInteger(localId) || localId <= 0) {
|
||||
return new Response('invalid local_id', { status: 400 });
|
||||
}
|
||||
|
||||
// 自动推断 month:从本地 messages 表查这条消息的日期
|
||||
let resolvedMonth = hintMonth;
|
||||
if (!resolvedMonth && chatroomId) {
|
||||
const row = db()
|
||||
.prepare('SELECT date FROM messages WHERE chatroom_id = ? AND local_id = ?')
|
||||
.get(chatroomId, localId) as { date: string } | undefined;
|
||||
if (row?.date) resolvedMonth = row.date.slice(0, 7);
|
||||
}
|
||||
|
||||
const found = await resolveWxImage(localId, resolvedMonth);
|
||||
if (!found) {
|
||||
return new Response('image not found in wx cache', { status: 404 });
|
||||
}
|
||||
|
||||
const buf = await readFile(/*turbopackIgnore: true*/ found.path);
|
||||
return new Response(new Uint8Array(buf), {
|
||||
headers: {
|
||||
'Content-Type': mimeFor(found.format),
|
||||
'Cache-Control': 'public, max-age=86400, immutable',
|
||||
'X-Image-Type': found.type,
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user