Files
recipe-manager/server/db/seed.ts
2022-11-19 10:55:44 -06:00

101 lines
3.1 KiB
TypeScript

import { Client } from 'pg';
import dotenv from 'dotenv';
dotenv.config();
(async function() {
const setRole = `
SET ROLE postgres;
DROP SCHEMA IF EXISTS recipin CASCADE;
CREATE SCHEMA IF NOT EXISTS recipin;
`
const appusers = `
CREATE TABLE IF NOT EXISTS recipin.appusers (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
firstname varchar NOT NULL,
lastname varchar NOT NULL,
handle varchar NOT NULL,
email varchar NOT NULL,
password varchar NOT NULL
);
`
const ingredient = `
CREATE TABLE IF NOT EXISTS recipin.ingredient (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name varchar NOT NULL,
description varchar
);
`
const collection = `
CREATE TABLE IF NOT EXISTS recipin.collection (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name varchar NOT NULL,
active boolean NOT NULL,
ismaincollection boolean NOT NULL,
ownerid int REFERENCES recipin.appusers (id)
);
`
const groceryList = `
CREATE TABLE IF NOT EXISTS recipin.grocerylist (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name varchar NOT NULL,
active boolean NOT NULL,
ownerid int REFERENCES recipin.appusers (id)
);
`
const recipe = `
CREATE TABLE IF NOT EXISTS recipin.recipe (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name varchar NOT NULL,
description varchar,
preptime varchar,
datecreated varchar,
datemodified varchar,
authoruserid int REFERENCES recipin.appusers (id) NOT NULL
);
`
const recipeingredient = `
CREATE TABLE IF NOT EXISTS recipin.cmp_recipeingredient (
recipeingredientid INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
quantity decimal,
unit varchar,
ingredientid int REFERENCES recipin.ingredient (id),
recipeid int REFERENCES recipin.recipe (id),
collectionid int REFERENCES recipin.collection (id)
);
`
const userscollections = `
CREATE TABLE IF NOT EXISTS recipin.cmp_userscollections (
userscollectionsid INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
collectionid int REFERENCES recipin.collection (id),
usermemberid int REFERENCES recipin.appusers (id)
);
`;
const allStatements = [
setRole, appusers, ingredient, collection, recipe, groceryList, recipeingredient, userscollections
]
const client = new Client({ connectionString: process.env.CONSTRING });
await client.connect().then(() => console.log('connected to pg. seeding...'));
try {
for (let s of allStatements) {
await client.query(s);
}
await client.end();
} catch(e: any) {
await client.end();
throw new Error(e);
}
console.log("Database seed successful.");
})();