51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
import { exec } from 'child_process'
|
|
import { promisify } from 'util'
|
|
|
|
const execAsync = promisify(exec)
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
export const maxDuration = 60
|
|
|
|
// POST /api/aos/seed — reseed the database (destructive, dev only)
|
|
export async function POST() {
|
|
if (process.env.NODE_ENV === 'production') {
|
|
return NextResponse.json({ error: 'not in production' }, { status: 403 })
|
|
}
|
|
try {
|
|
// wipe via prisma (SQLite TRUNCATE not supported, use deleteMany per model in order)
|
|
const { db } = await import('@/lib/db')
|
|
await db.dunningRun.deleteMany()
|
|
await db.vatReturn.deleteMany()
|
|
await db.bankTransaction.deleteMany()
|
|
await db.estimateLine.deleteMany()
|
|
await db.estimate.deleteMany()
|
|
await db.ticketMessage.deleteMany()
|
|
await db.ticket.deleteMany()
|
|
await db.expense.deleteMany()
|
|
await db.contract.deleteMany()
|
|
await db.invoiceLine.deleteMany()
|
|
await db.invoice.deleteMany()
|
|
await db.asset.deleteMany()
|
|
await db.licenseActivation.deleteMany()
|
|
await db.license.deleteMany()
|
|
await db.timeEntry.deleteMany()
|
|
await db.task.deleteMany()
|
|
await db.project.deleteMany()
|
|
await db.lead.deleteMany()
|
|
await db.deal.deleteMany()
|
|
await db.person.deleteMany()
|
|
await db.company.deleteMany()
|
|
await db.auditLog.deleteMany()
|
|
await db.setting.deleteMany()
|
|
await db.module.deleteMany()
|
|
await db.user.deleteMany()
|
|
|
|
await execAsync('bun run src/lib/seed.ts', { cwd: process.cwd() })
|
|
return NextResponse.json({ ok: true })
|
|
} catch (err) {
|
|
const msg = err instanceof Error ? err.message : 'seed failed'
|
|
return NextResponse.json({ error: msg }, { status: 500 })
|
|
}
|
|
}
|