Files
e-commerce/db/Seed.js
2022-10-01 12:56:03 -05:00

126 lines
4.3 KiB
JavaScript

const { Client } = require('pg');
const insertAll = require('./util/insertAll');
require('dotenv').config({ path: "../.env" });
async function main() {
console.log("Beginning database setup.");
const client = new Client({ connectionString: process.env.CONNECTION });
console.log(process.env.CONNECTION);
await client.connect().then(console.log("Now connected to postgres"));
// user
const createUserTable = `
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
email VARCHAR NOT NULL,
password VARCHAR NOT NULL,
firstname VARCHAR,
lastname VARCHAR,
isadmin BOOLEAN DEFAULT FALSE
);
`;
// cart
const createCartTable = `
CREATE TABLE IF NOT EXISTS cart (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
userid INT REFERENCES users(id)
);
`;
// order
const createOrderTable = `
CREATE TABLE IF NOT EXISTS orders (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
userId INT REFERENCES users(id),
total NUMERIC,
delivered BOOLEAN,
processed BOOLEAN,
shipped BOOLEAN
);
`;
// region
const createRegionTable = `
CREATE TABLE IF NOT EXISTS region (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
name VARCHAR NOT NULL
);
`;
// category
const createCategoryTable = `
CREATE TABLE IF NOT EXISTS category (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
name VARCHAR NOT NULL,
description VARCHAR
);
`;
// product
const createProductTable = `
CREATE TABLE IF NOT EXISTS product (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
name VARCHAR NOT NULL,
description VARCHAR,
categoryId INT REFERENCES category(id),
regionId INT REFERENCES region(id),
price MONEY,
unit VARCHAR,
inventory INT
);
`;
// const populateProductTable = `
// \copy products(name, regionid, categoryid, price, inventory, unit, description) FROM './data/products.csv' DELIMITER ',' CSV HEADER
// `;
// products_carts
const createProductsCarts = `
CREATE TABLE IF NOT EXISTS products_carts (
productId INT REFERENCES product(id),
cartId INT REFERENCES cart(id),
quantity INT
);
`;
// products_orders
const createProductsOrders = `
CREATE TABLE IF NOT EXISTS products_orders (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY NOT NULL,
quantity INT NOT NULL,
productId INT REFERENCES product(id),
orderId INT REFERENCES orders(id)
);
`;
const allQueries = [
createUserTable, createCartTable, createCategoryTable, createRegionTable,
createProductTable, /* populateProductTable, */ createOrderTable,
createProductsCarts, createProductsOrders
];
let status;
try {
await client.query("DROP SCHEMA public CASCADE; CREATE SCHEMA public");
for (let q of allQueries) {
await client.query(q);
}
await client.end();
status = "Database initialization successful.";
} catch(e) {
status = e;
} finally {
if (status !== "Database initialization successful.") {
throw new Error(status);
}
}
console.log(status);
}
main();