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

107 lines
3.3 KiB
TypeScript

import { Client } from 'pg';
import dotenv from 'dotenv';
import populate from "./examplevals";
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 UNIQUE,
email varchar NOT NULL UNIQUE,
password varchar NOT NULL,
active boolean 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. Attempting to populate...");
await populate();
process.exit(1);
})();