forked from UKSOURCE/ipv6
Adding UI of FeedBack, Registration, Admin console
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
/**
|
||||
* Idempotent seed: upserts rows from app/data/admin.json, then optional legacy data/user-submissions.json.
|
||||
* Run: npm run db:seed
|
||||
* Requires MONGODB_URI in .env or .env.local
|
||||
*/
|
||||
import { config } from "dotenv";
|
||||
import { existsSync, readFileSync } from "fs";
|
||||
import path from "path";
|
||||
|
||||
config({ path: path.join(process.cwd(), ".env.local") });
|
||||
config({ path: path.join(process.cwd(), ".env") });
|
||||
|
||||
import connectDB from "../lib/mongodb";
|
||||
import SummitRequest from "../models/SummitRequest";
|
||||
import type { AdminRequestRow } from "../types/admin-submission";
|
||||
|
||||
type AdminJson = { requests: AdminRequestRow[] };
|
||||
|
||||
function loadJsonRequests(): AdminRequestRow[] {
|
||||
const adminPath = path.join(process.cwd(), "app", "data", "admin.json");
|
||||
const raw = JSON.parse(readFileSync(adminPath, "utf-8")) as AdminJson;
|
||||
return raw.requests ?? [];
|
||||
}
|
||||
|
||||
function loadLegacyFileRequests(): AdminRequestRow[] {
|
||||
const p = path.join(process.cwd(), "data", "user-submissions.json");
|
||||
if (!existsSync(p)) return [];
|
||||
try {
|
||||
const raw = JSON.parse(readFileSync(p, "utf-8")) as unknown;
|
||||
return Array.isArray(raw) ? (raw as AdminRequestRow[]) : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function rowToInsert(row: AdminRequestRow) {
|
||||
return {
|
||||
publicId: row.id,
|
||||
submittedAt: row.submittedAt,
|
||||
displayDate: row.displayDate,
|
||||
fullName: row.fullName,
|
||||
jobTitle: row.jobTitle ?? "",
|
||||
company: row.company ?? "",
|
||||
segment: row.segment,
|
||||
email: row.email ?? "",
|
||||
phone: row.phone ?? "",
|
||||
status: row.status,
|
||||
notes: row.notes ?? "",
|
||||
source: row.source,
|
||||
};
|
||||
}
|
||||
|
||||
async function upsertRow(row: AdminRequestRow) {
|
||||
return SummitRequest.updateOne(
|
||||
{ publicId: row.id },
|
||||
{ $setOnInsert: rowToInsert(row) },
|
||||
{ upsert: true },
|
||||
);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await connectDB();
|
||||
|
||||
let inserted = 0;
|
||||
let skipped = 0;
|
||||
|
||||
const fromAdmin = loadJsonRequests();
|
||||
for (const row of fromAdmin) {
|
||||
const res = await upsertRow(row);
|
||||
if (res.upsertedCount) inserted++;
|
||||
else skipped++;
|
||||
}
|
||||
|
||||
const fromLegacy = loadLegacyFileRequests();
|
||||
for (const row of fromLegacy) {
|
||||
const res = await upsertRow(row);
|
||||
if (res.upsertedCount) inserted++;
|
||||
else skipped++;
|
||||
}
|
||||
|
||||
console.log(
|
||||
`Seed finished. admin.json: ${fromAdmin.length} rows, legacy file: ${fromLegacy.length} rows. New documents: ${inserted}, already existed: ${skipped}.`,
|
||||
);
|
||||
}
|
||||
|
||||
main().catch((err) => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user