Files
bt/server/api/search.get.ts
T

45 lines
1.3 KiB
TypeScript

import { runSearch } from '../utils/search'
import { tryMongo } from '../utils/mongo'
import { recordSearch, upsertSearchResults } from '../utils/store'
import type { ProviderReport } from '../utils/search/types'
export default defineEventHandler(async (event) => {
const query = getQuery(event)
const keyword = String(query.q || '').trim()
if (!keyword) throw createError({ statusCode: 400, statusMessage: '缺少查询参数 q' })
const providers = String(query.providers || '')
.split(',')
.map((s) => s.trim())
.filter(Boolean)
const limit = Number(query.limit) || 0
const started = Date.now()
const { results, reports } = await runSearch(keyword, {
providers: providers.length ? providers : undefined,
limit: limit || 300
})
const durationMs = Date.now() - started
const stored = await tryMongo(async () => {
await recordSearch({
keyword,
providers: reports.filter((r) => r.ok).map((r) => r.id),
resultCount: results.length,
durationMs,
ok: reports.some((r) => r.ok),
error: reports.filter((r) => !r.ok).map((r: ProviderReport) => `${r.label}: ${r.error}`).join(' | ') || null
})
await upsertSearchResults(results)
return true
})
return {
query: keyword,
durationMs,
results,
reports,
stored: stored === true
}
})