88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
import { Client } from 'pg';
|
|
import dotenv from 'dotenv';
|
|
dotenv.config();
|
|
|
|
(async function() {
|
|
const setRole = `
|
|
SET ROLE postgres;
|
|
CREATE SCHEMA IF NOT EXISTS recipin;
|
|
`
|
|
|
|
const appusers = `
|
|
CREATE TABLE IF NOT EXISTS recipin.app_users (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
first_name varchar NOT NULL,
|
|
last_name 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,
|
|
owner_id int REFERENCES recipin.app_users (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,
|
|
date_created varchar,
|
|
date_modified varchar,
|
|
author_user_id int REFERENCES recipin.app_users (id) NOT NULL
|
|
);
|
|
`
|
|
|
|
const recipeingredient = `
|
|
CREATE TABLE IF NOT EXISTS recipin.cmp_recipe_ingredient (
|
|
recipe_ingredient_id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
quantity decimal,
|
|
unit varchar,
|
|
ingredient_id int REFERENCES recipin.ingredient (id),
|
|
recipe_id int REFERENCES recipin.recipe (id),
|
|
collection_id int REFERENCES recipin.collection (id)
|
|
);
|
|
`
|
|
|
|
const userscollections = `
|
|
CREATE TABLE IF NOT EXISTS recipin.cmp_users_collections (
|
|
users_collections_id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
collection_id int REFERENCES recipin.collection (id),
|
|
owner_id int REFERENCES recipin.collection (owner_id),
|
|
user_member_id int REFERENCES recipin.app_users (id)
|
|
);
|
|
`;
|
|
|
|
const allStatements = [
|
|
setRole, appusers, ingredient, collection, recipe, recipeingredient, userscollections
|
|
]
|
|
|
|
const client = new Client({ connectionString: process.env.CONSTRING });
|
|
await client.connect().then(() => console.log('connected to pg at ' + process.env.CONSTRING));
|
|
|
|
try {
|
|
for (let s of allStatements) {
|
|
await client.query(s);
|
|
}
|
|
|
|
await client.end();
|
|
} catch(e: any) {
|
|
throw new Error(e);
|
|
}
|
|
|
|
console.log("Database seed successful.");
|
|
})(); |