122 lines
3.9 KiB
TypeScript
122 lines
3.9 KiB
TypeScript
import { Client } from 'pg';
|
|
import dotenv from 'dotenv';
|
|
import populate from "./examplevals";
|
|
import pool from ".";
|
|
|
|
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,
|
|
dateregistered varchar NOT NULL,
|
|
datelastactive 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,
|
|
datecreated varchar NOT NULL,
|
|
createdbyid int REFERENCES recipin.appusers (id)
|
|
);
|
|
`
|
|
|
|
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,
|
|
datecreated varchar NOT NULL,
|
|
datemodified varchar 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,
|
|
datecreated varchar NOT NULL,
|
|
datemodified varchar 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,
|
|
preptime varchar NOT NULL,
|
|
datecreated varchar NOT NULL,
|
|
datemodified varchar NOT NULL,
|
|
description 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 NOT NULL,
|
|
unit varchar NOT NULL,
|
|
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 userfriendships = `
|
|
CREATE TABLE IF NOT EXISTS recipin.cmp_userfriendships (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
datecreated varchar NOT NULL,
|
|
active boolean NOT NULL,
|
|
dateterminated varchar,
|
|
firstuserid int REFERENCES recipin.appusers (id),
|
|
seconduserid int REFERENCES recipin.appusers (id)
|
|
);
|
|
`
|
|
|
|
const allStatements = [
|
|
setRole, appusers, ingredient, collection, recipe,
|
|
groceryList, recipeingredient, userscollections, userfriendships
|
|
]
|
|
|
|
try {
|
|
for (let s of allStatements) {
|
|
await pool.query(s);
|
|
}
|
|
} catch(e: any) {
|
|
throw new Error(e);
|
|
}
|
|
|
|
console.log("Database seed successful. Attempting to populate...");
|
|
await populate();
|
|
|
|
process.exit(1);
|
|
})(); |