Files
infohliadka/pages/api/admin/bulk-import.ts

80 lines
2.0 KiB
TypeScript

import type { NextApiRequest, NextApiResponse } from "next"
import sqlite3 from "sqlite3"
import path from "path"
interface BulkImportItem {
domain: string
risk_level: number
categories: string[]
description?: string
}
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method !== "POST") return res.status(405).json({ error: "Method not allowed" })
const { sources } = req.body as { sources: BulkImportItem[] }
if (!sources || !Array.isArray(sources)) {
return res.status(400).json({ error: "Sources array required" })
}
const dbPath = path.join(process.cwd(), "database", "antihoax.db")
const db = new sqlite3.Database(dbPath)
try {
let imported = 0
let skipped = 0
for (const source of sources) {
if (!source.domain || !source.risk_level) {
skipped++
continue
}
// Check if domain already exists
const existing = await new Promise<any>((resolve, reject) => {
db.get(
"SELECT id FROM sources WHERE domain = ?",
[source.domain],
(err, row) => {
if (err) reject(err)
else resolve(row)
}
)
})
if (existing) {
skipped++
continue
}
// Insert new source
await new Promise<void>((resolve, reject) => {
db.run(
`INSERT INTO sources (domain, title, risk_level, status, description, created_at)
VALUES (?, ?, ?, 'verified', ?, datetime('now'))`,
[source.domain, source.domain, source.risk_level, source.description || ''],
function(err) {
if (err) reject(err)
else resolve()
}
)
})
imported++
}
res.json({
success: true,
imported,
skipped,
total: sources.length
})
} catch (error) {
console.error('Bulk import error:', error)
res.status(500).json({ error: "Import failed" })
} finally {
db.close()
}
}