43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
import fs from 'node:fs';
|
|
import { fileURLToPath } from 'node:url';
|
|
import dotenv from 'dotenv';
|
|
|
|
dotenv.config({ path: fileURLToPath(new URL('./.env', import.meta.url)) });
|
|
|
|
const BASE = `http://localhost:${process.env.PORT || 3001}`;
|
|
const USER = process.env.ADMIN_USERNAME || 'admin';
|
|
const PASS = process.env.ADMIN_PASSWORD;
|
|
|
|
const payloads = JSON.parse(fs.readFileSync(new URL('./imports-data.json', import.meta.url)));
|
|
|
|
// 1) login
|
|
const loginRes = await fetch(`${BASE}/api/auth/login`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ username: USER, password: PASS }),
|
|
});
|
|
if (!loginRes.ok) {
|
|
console.error('LOGIN FAILED', loginRes.status, await loginRes.text());
|
|
process.exit(1);
|
|
}
|
|
const { token } = await loginRes.json();
|
|
console.log('✓ logged in\n');
|
|
|
|
// 2) import each
|
|
let ok = 0;
|
|
for (const p of payloads) {
|
|
const res = await fetch(`${BASE}/api/admin/import`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },
|
|
body: JSON.stringify(p),
|
|
});
|
|
const data = await res.json();
|
|
if (res.ok) {
|
|
ok++;
|
|
console.log(`✓ ${p.report.id} → article + ${data.radar.length} radar items`);
|
|
} else {
|
|
console.error(`✗ ${p.report.id} → ${res.status}`, data);
|
|
}
|
|
}
|
|
console.log(`\nDone: ${ok}/${payloads.length} imported`);
|