83 lines
2.6 KiB
JavaScript
83 lines
2.6 KiB
JavaScript
|
|
const fs = require('node:fs');
|
||
|
|
const path = require('node:path');
|
||
|
|
const Papa = require('papaparse');
|
||
|
|
const { PrismaClient } = require('../app/generated/prisma');
|
||
|
|
|
||
|
|
async function seedContentHandle(prisma) {
|
||
|
|
const csvPath = path.resolve(process.cwd(), 'datas/ch2.csv');
|
||
|
|
if (!fs.existsSync(csvPath)) {
|
||
|
|
console.warn('content_handle.csv not found, skip');
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const csv = fs.readFileSync(csvPath, 'utf8');
|
||
|
|
const parsed = Papa.parse(csv, { header: true, skipEmptyLines: true });
|
||
|
|
if (parsed.errors && parsed.errors.length) {
|
||
|
|
console.error('CSV parse errors (content_handle):', parsed.errors);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
let ok = 0, skip = 0;
|
||
|
|
for (const r of parsed.data) {
|
||
|
|
// Keep raw Id to match previously seeded content ids (some have spaces)
|
||
|
|
const contentId = String(r.Id || '');
|
||
|
|
const handle = (r.Handle || '').trim();
|
||
|
|
if (!contentId || !handle) { skip++; continue; }
|
||
|
|
|
||
|
|
// Ensure user handle exists; if not, skip (email is required to create)
|
||
|
|
const existsUser = await prisma.userHandle.findUnique({ where: { handle } });
|
||
|
|
if (!existsUser) { skip++; continue; }
|
||
|
|
|
||
|
|
await prisma.contentHandle.upsert({
|
||
|
|
where: { contentId },
|
||
|
|
update: { handle },
|
||
|
|
create: { contentId, handle },
|
||
|
|
});
|
||
|
|
ok++;
|
||
|
|
}
|
||
|
|
console.log(`ContentHandle seeded: ok=${ok}, skip=${skip}`);
|
||
|
|
}
|
||
|
|
|
||
|
|
async function seedViewPerDay(prisma) {
|
||
|
|
const csvPath = path.resolve(process.cwd(), 'datas/viewperdate.csv');
|
||
|
|
if (!fs.existsSync(csvPath)) {
|
||
|
|
console.warn('viewperdate.csv not found, skip');
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const csv = fs.readFileSync(csvPath, 'utf8');
|
||
|
|
const parsed = Papa.parse(csv, { header: true, skipEmptyLines: true });
|
||
|
|
if (parsed.errors && parsed.errors.length) {
|
||
|
|
console.error('CSV parse errors (viewperdate):', parsed.errors);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
let ok = 0, bad = 0;
|
||
|
|
for (const r of parsed.data) {
|
||
|
|
const dateStr = (r.Date || '').trim();
|
||
|
|
const contented = (r.Contented || '').trim();
|
||
|
|
const v = Number(r.Validviewday ?? 0);
|
||
|
|
if (!dateStr || !contented) { bad++; continue; }
|
||
|
|
const date = new Date(dateStr);
|
||
|
|
if (isNaN(date.getTime())) { bad++; continue; }
|
||
|
|
|
||
|
|
await prisma.viewPerDay.upsert({
|
||
|
|
where: { date_contented: { date, contented } },
|
||
|
|
update: { validViewDay: v },
|
||
|
|
create: { date, contented, validViewDay: v },
|
||
|
|
});
|
||
|
|
ok++;
|
||
|
|
}
|
||
|
|
console.log(`ViewPerDay seeded: ok=${ok}, bad=${bad}`);
|
||
|
|
}
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
const prisma = new PrismaClient();
|
||
|
|
await seedContentHandle(prisma);
|
||
|
|
await prisma.$disconnect();
|
||
|
|
console.log('Done.');
|
||
|
|
}
|
||
|
|
|
||
|
|
main().catch((e) => {
|
||
|
|
console.error(e);
|
||
|
|
process.exit(1);
|
||
|
|
});
|
||
|
|
|
||
|
|
|