121 lines
3.1 KiB
TypeScript
121 lines
3.1 KiB
TypeScript
// 주의사항: vercel/postgres 생성제한 -> neon을 통해 postgresql 생성 필요.
|
|
import bcrypt from 'bcrypt';
|
|
import { db } from '@vercel/postgres';
|
|
import { invoices, customers, revenue, users } from '../lib/placeholder-data';
|
|
|
|
const client = await db.connect();
|
|
|
|
async function seedUsers() {
|
|
await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`;
|
|
await client.sql`
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
email TEXT NOT NULL UNIQUE,
|
|
password TEXT NOT NULL
|
|
);
|
|
`;
|
|
|
|
const insertedUsers = await Promise.all(
|
|
users.map(async (user) => {
|
|
const hashedPassword = await bcrypt.hash(user.password, 10);
|
|
return client.sql`
|
|
INSERT INTO users (id, name, email, password)
|
|
VALUES (${user.id}, ${user.name}, ${user.email}, ${hashedPassword})
|
|
ON CONFLICT (id) DO NOTHING;
|
|
`;
|
|
}),
|
|
);
|
|
|
|
return insertedUsers;
|
|
}
|
|
|
|
async function seedInvoices() {
|
|
await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`;
|
|
|
|
await client.sql`
|
|
CREATE TABLE IF NOT EXISTS invoices (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
customer_id UUID NOT NULL,
|
|
amount INT NOT NULL,
|
|
status VARCHAR(255) NOT NULL,
|
|
date DATE NOT NULL
|
|
);
|
|
`;
|
|
|
|
const insertedInvoices = await Promise.all(
|
|
invoices.map(
|
|
(invoice) => client.sql`
|
|
INSERT INTO invoices (customer_id, amount, status, date)
|
|
VALUES (${invoice.customer_id}, ${invoice.amount}, ${invoice.status}, ${invoice.date})
|
|
ON CONFLICT (id) DO NOTHING;
|
|
`,
|
|
),
|
|
);
|
|
|
|
return insertedInvoices;
|
|
}
|
|
|
|
async function seedCustomers() {
|
|
await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`;
|
|
|
|
await client.sql`
|
|
CREATE TABLE IF NOT EXISTS customers (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
email VARCHAR(255) NOT NULL,
|
|
image_url VARCHAR(255) NOT NULL
|
|
);
|
|
`;
|
|
|
|
const insertedCustomers = await Promise.all(
|
|
customers.map(
|
|
(customers) => client.sql`
|
|
INSERT INTO customers (id, name, email, image_url)
|
|
VALUES (${customers.id}, ${customers.name}, ${customers.email}, ${customers.image_url})
|
|
ON CONFLICT (id) DO NOTHING;
|
|
`,
|
|
),
|
|
);
|
|
|
|
return insertedCustomers;
|
|
}
|
|
|
|
async function seedRevenue() {
|
|
await client.sql`
|
|
CREATE TABLE IF NOT EXISTS revenue (
|
|
month VARCHAR(4) NOT NULL UNIQUE,
|
|
revenue INT NOT NULL
|
|
);
|
|
`;
|
|
|
|
const insertedRevenue = await Promise.all(
|
|
revenue.map(
|
|
(rev) => client.sql`
|
|
INSERT INTO revenue (month, revenue)
|
|
VALUES (${rev.month}, ${rev.revenue})
|
|
ON CONFLICT (month) DO NOTHING;
|
|
`,
|
|
),
|
|
);
|
|
|
|
return insertedRevenue;
|
|
}
|
|
|
|
export async function GET() {
|
|
try {
|
|
await client.sql`BEGIN`;
|
|
await seedUsers();
|
|
await seedCustomers();
|
|
await seedInvoices();
|
|
await seedRevenue();
|
|
await client.sql`COMMIT`;
|
|
|
|
return Response.json({ message: 'Database seeded successfully' });
|
|
} catch (error) {
|
|
console.error('error', error);
|
|
await client.sql`ROLLBACK`;
|
|
return Response.json({ error }, { status: 500 });
|
|
}
|
|
}
|