101 lines
3.1 KiB
TypeScript
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.");
|
|
})(); |