| import { db } from '@/lib/db'; |
| import { hashPassword, generateApiKey } from '@/lib/auth'; |
| import { NextResponse } from 'next/server'; |
|
|
| export async function GET() { |
| try { |
| |
| const hashedPw = await hashPassword('demo1234'); |
| const apiKey = generateApiKey(); |
|
|
| const user = await db.user.upsert({ |
| where: { email: 'demo@omniparse.ai' }, |
| update: {}, |
| create: { |
| email: 'demo@omniparse.ai', |
| name: 'Demo User', |
| password: hashedPw, |
| plan: 'pro', |
| apiKey, |
| }, |
| }); |
|
|
| |
| await db.invoice.deleteMany({ |
| where: { userId: user.id }, |
| }); |
|
|
| |
| const invoiceData = [ |
| |
| { |
| vendor: 'Acme Corp', |
| invNumber: 'INV-2024-001', |
| invDate: '2025-01-05', |
| dueDate: '2025-02-04', |
| amount: 1200, |
| vatPct: 0.20, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.95, |
| filename: 'invoice_acme_jan.pdf', |
| createdAt: new Date('2025-01-06T09:15:00Z'), |
| }, |
| { |
| vendor: 'TechVision Inc', |
| invNumber: 'INV-2024-002', |
| invDate: '2025-01-12', |
| dueDate: '2025-02-11', |
| amount: 3450, |
| vatPct: 0.21, |
| currency: 'EUR', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.97, |
| filename: 'invoice_techvision_jan.pdf', |
| createdAt: new Date('2025-01-13T14:30:00Z'), |
| }, |
| { |
| vendor: 'Global Supplies Ltd', |
| invNumber: 'INV-2024-003', |
| invDate: '2025-01-18', |
| dueDate: '2025-02-17', |
| amount: 890, |
| vatPct: 0.15, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.92, |
| filename: 'receipt_global_jan.png', |
| createdAt: new Date('2025-01-19T11:00:00Z'), |
| }, |
| { |
| vendor: 'CloudNine Services', |
| invNumber: 'INV-2024-004', |
| invDate: '2025-01-22', |
| dueDate: '2025-02-21', |
| amount: 5200, |
| vatPct: 0.20, |
| currency: 'USD', |
| status: 'review' as const, |
| isDuplicate: false, |
| confidence: 0.88, |
| filename: 'invoice_cloudnine_jan.pdf', |
| createdAt: new Date('2025-01-23T08:45:00Z'), |
| }, |
| { |
| vendor: 'DataFlow Systems', |
| invNumber: 'INV-2024-005', |
| invDate: '2025-01-28', |
| dueDate: '2025-02-27', |
| amount: 750, |
| vatPct: 0.10, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.96, |
| filename: 'receipt_dataflow_jan.pdf', |
| createdAt: new Date('2025-01-29T16:20:00Z'), |
| }, |
|
|
| |
| { |
| vendor: 'Pinnacle Solutions', |
| invNumber: 'INV-2024-006', |
| invDate: '2025-02-03', |
| dueDate: '2025-03-05', |
| amount: 1250, |
| vatPct: 0.18, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.94, |
| filename: 'invoice_pinnacle_feb.pdf', |
| createdAt: new Date('2025-02-04T10:00:00Z'), |
| }, |
| { |
| vendor: 'TechVision Inc', |
| invNumber: 'INV-2024-007', |
| invDate: '2025-02-08', |
| dueDate: '2025-03-10', |
| amount: 2100, |
| vatPct: 0.20, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.98, |
| filename: 'invoice_techvision_feb.pdf', |
| createdAt: new Date('2025-02-09T13:15:00Z'), |
| }, |
| { |
| vendor: 'Acme Corp', |
| invNumber: 'INV-2024-008', |
| invDate: '2025-02-14', |
| dueDate: '2025-03-16', |
| amount: 8750, |
| vatPct: 0.20, |
| currency: 'GBP', |
| status: 'review' as const, |
| isDuplicate: false, |
| confidence: 0.87, |
| filename: 'invoice_acme_feb.pdf', |
| createdAt: new Date('2025-02-15T09:30:00Z'), |
| }, |
| { |
| vendor: 'Meridian Group', |
| invNumber: 'INV-2024-009', |
| invDate: '2025-02-20', |
| dueDate: '2025-03-22', |
| amount: 430, |
| vatPct: 0.12, |
| currency: 'USD', |
| status: 'pending' as const, |
| isDuplicate: false, |
| confidence: 0.99, |
| filename: 'receipt_meridian_feb.png', |
| createdAt: new Date('2025-02-21T15:45:00Z'), |
| }, |
| { |
| vendor: 'Nexus Technologies', |
| invNumber: 'INV-2024-010', |
| invDate: '2025-02-26', |
| dueDate: '2025-03-28', |
| amount: 6300, |
| vatPct: 0.25, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.91, |
| filename: 'invoice_nexus_feb.pdf', |
| createdAt: new Date('2025-02-27T11:10:00Z'), |
| }, |
|
|
| |
| { |
| vendor: 'CloudNine Services', |
| invNumber: 'INV-2024-011', |
| invDate: '2025-03-04', |
| dueDate: '2025-04-03', |
| amount: 4800, |
| vatPct: 0.20, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.93, |
| filename: 'invoice_cloudnine_mar.pdf', |
| createdAt: new Date('2025-03-05T08:00:00Z'), |
| }, |
| { |
| vendor: 'Pinnacle Solutions', |
| invNumber: 'INV-2024-012', |
| invDate: '2025-03-10', |
| dueDate: '2025-04-09', |
| amount: 15000, |
| vatPct: 0.22, |
| currency: 'USD', |
| status: 'review' as const, |
| isDuplicate: false, |
| confidence: 0.86, |
| filename: 'invoice_pinnacle_mar.pdf', |
| createdAt: new Date('2025-03-11T14:25:00Z'), |
| }, |
| { |
| vendor: 'Global Supplies Ltd', |
| invNumber: 'INV-2024-013', |
| invDate: '2025-03-15', |
| dueDate: '2025-04-14', |
| amount: 2350, |
| vatPct: 0.19, |
| currency: 'EUR', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.95, |
| filename: 'invoice_global_mar.pdf', |
| createdAt: new Date('2025-03-16T10:40:00Z'), |
| }, |
| { |
| vendor: 'DataFlow Systems', |
| invNumber: 'INV-2024-014', |
| invDate: '2025-03-19', |
| dueDate: '2025-04-18', |
| amount: 1100, |
| vatPct: 0.15, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.97, |
| filename: 'receipt_dataflow_mar.png', |
| createdAt: new Date('2025-03-20T09:55:00Z'), |
| }, |
| { |
| vendor: 'Acme Corp', |
| invNumber: 'INV-2024-015', |
| invDate: '2025-03-25', |
| dueDate: '2025-04-24', |
| amount: 9200, |
| vatPct: 0.20, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.89, |
| filename: 'invoice_acme_mar.pdf', |
| createdAt: new Date('2025-03-26T16:30:00Z'), |
| }, |
|
|
| |
| { |
| vendor: 'Nexus Technologies', |
| invNumber: 'INV-2024-016', |
| invDate: '2025-04-02', |
| dueDate: '2025-05-02', |
| amount: 6280, |
| vatPct: 0.23, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: true, |
| confidence: 0.88, |
| filename: 'invoice_nexus_apr.pdf', |
| createdAt: new Date('2025-04-03T11:20:00Z'), |
| }, |
| { |
| vendor: 'Meridian Group', |
| invNumber: 'INV-2024-017', |
| invDate: '2025-04-08', |
| dueDate: '2025-05-08', |
| amount: 780, |
| vatPct: 0.14, |
| currency: 'EUR', |
| status: 'pending' as const, |
| isDuplicate: false, |
| confidence: 0.96, |
| filename: 'receipt_meridian_apr.png', |
| createdAt: new Date('2025-04-09T08:10:00Z'), |
| }, |
| { |
| vendor: 'CloudNine Services', |
| invNumber: 'INV-2024-018', |
| invDate: '2025-04-14', |
| dueDate: '2025-05-14', |
| amount: 5150, |
| vatPct: 0.20, |
| currency: 'USD', |
| status: 'done' as const, |
| isDuplicate: true, |
| confidence: 0.92, |
| filename: 'invoice_cloudnine_apr.pdf', |
| createdAt: new Date('2025-04-15T13:50:00Z'), |
| }, |
| { |
| vendor: 'Pinnacle Solutions', |
| invNumber: 'INV-2024-019', |
| invDate: '2025-04-20', |
| dueDate: '2025-05-20', |
| amount: 3200, |
| vatPct: 0.20, |
| currency: 'GBP', |
| status: 'done' as const, |
| isDuplicate: false, |
| confidence: 0.94, |
| filename: 'invoice_pinnacle_apr.pdf', |
| createdAt: new Date('2025-04-21T10:05:00Z'), |
| }, |
| { |
| vendor: 'TechVision Inc', |
| invNumber: 'INV-2024-020', |
| invDate: '2025-04-27', |
| dueDate: '2025-05-27', |
| amount: 2800, |
| vatPct: 0.17, |
| currency: 'USD', |
| status: 'review' as const, |
| isDuplicate: false, |
| confidence: 0.85, |
| filename: 'invoice_techvision_apr.pdf', |
| createdAt: new Date('2025-04-28T15:00:00Z'), |
| }, |
| ]; |
|
|
| |
| const invoices = await db.invoice.createMany({ |
| data: invoiceData.map((inv) => ({ |
| userId: user.id, |
| vendor: inv.vendor, |
| invNumber: inv.invNumber, |
| invDate: inv.invDate, |
| dueDate: inv.dueDate, |
| amount: inv.amount, |
| vatAmount: Math.round(inv.amount * inv.vatPct * 100) / 100, |
| total: Math.round(inv.amount * (1 + inv.vatPct) * 100) / 100, |
| currency: inv.currency, |
| status: inv.status, |
| isDuplicate: inv.isDuplicate, |
| confidence: inv.confidence, |
| filename: inv.filename, |
| rawJson: null, |
| createdAt: inv.createdAt, |
| })), |
| }); |
|
|
| return NextResponse.json({ |
| message: `Seed complete: ${invoices.count} invoices created for demo user`, |
| userId: user.id, |
| invoiceCount: invoices.count, |
| breakdown: { |
| byVendor: { |
| 'Acme Corp': 3, |
| 'TechVision Inc': 3, |
| 'Global Supplies Ltd': 2, |
| 'CloudNine Services': 3, |
| 'DataFlow Systems': 2, |
| 'Pinnacle Solutions': 3, |
| 'Meridian Group': 2, |
| 'Nexus Technologies': 2, |
| }, |
| byStatus: { done: 14, review: 4, pending: 2 }, |
| duplicates: 2, |
| byCurrency: { USD: 15, EUR: 3, GBP: 2 }, |
| }, |
| }); |
| } catch (error) { |
| console.error('[SEED_ERROR]', error); |
| return NextResponse.json({ error: 'Seed failed' }, { status: 500 }); |
| } |
| } |