middle 2
This commit is contained in:
72
app/api/contents/handleupdate/route.ts
Normal file
72
app/api/contents/handleupdate/route.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
export const runtime = 'nodejs'
|
||||
import { NextResponse } from 'next/server'
|
||||
import { PrismaClient } from '@/app/generated/prisma'
|
||||
|
||||
export async function GET(request: Request) {
|
||||
const prisma = new PrismaClient()
|
||||
try {
|
||||
const { searchParams } = new URL(request.url)
|
||||
const limitRaw = searchParams.get('limit')
|
||||
let limit = Number(limitRaw ?? '10')
|
||||
if (!Number.isFinite(limit) || limit <= 0) limit = 100
|
||||
if (limit > 1000) limit = 1000
|
||||
|
||||
const rows = await prisma.content.findMany({
|
||||
where: { handleId: null },
|
||||
select: { id: true },
|
||||
take: limit,
|
||||
orderBy: { pubDate: 'desc' },
|
||||
})
|
||||
const ids = rows.map(r => r.id)
|
||||
console.log(`[contents/handleupdate] fetched ${ids.length}/${limit} ids without handle`)
|
||||
// Call local parsingServer with body { ids }
|
||||
try {
|
||||
const upstream = await fetch('http://localhost:9556/gethandle', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ ids }),
|
||||
})
|
||||
const text = await upstream.text()
|
||||
let forwarded: any = null
|
||||
try { forwarded = text ? JSON.parse(text) : null } catch { forwarded = { message: text } }
|
||||
// Map handles back to Content rows
|
||||
let mapped = 0
|
||||
const failures: Array<{ id: string, reason: string }> = []
|
||||
if (forwarded?.success && Array.isArray(forwarded?.items)) {
|
||||
for (const item of forwarded.items as Array<{ id?: string, handle?: string, avatar?: string }>) {
|
||||
const cid = String(item?.id ?? '')
|
||||
let h = String(item?.handle ?? '').trim()
|
||||
const avatar = typeof item?.avatar === 'string' ? item.avatar : undefined
|
||||
if (!cid || !h) { if (cid) failures.push({ id: cid, reason: 'missing_handle' }); continue }
|
||||
try {
|
||||
const handleRow = await prisma.handle.upsert({
|
||||
where: { handle: h },
|
||||
update: { ...(avatar ? { avatar } : {}) },
|
||||
create: { handle: h, ...(avatar ? { avatar } : {}) },
|
||||
select: { id: true }
|
||||
})
|
||||
await prisma.content.update({
|
||||
where: { id: cid },
|
||||
data: { handle: { connect: { id: handleRow.id } } },
|
||||
})
|
||||
mapped += 1
|
||||
} catch (e) {
|
||||
failures.push({ id: cid, reason: 'db_update_failed' })
|
||||
console.error('[contents/handleupdate] map failed for', cid, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
return NextResponse.json({ success: true, count: ids.length, ids, mapped, failures, upstream: forwarded }, { status: upstream.status })
|
||||
} catch (e) {
|
||||
console.error('[contents/handleupdate] upstream call error:', e)
|
||||
return NextResponse.json({ success: true, count: ids.length, ids, upstream: { error: 'upstream failed' } })
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[contents/handleupdate] query error:', e)
|
||||
return NextResponse.json({ error: 'query failed' }, { status: 500 })
|
||||
} finally {
|
||||
try { await (prisma as any).$disconnect() } catch {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user