db seed, defined a pg schema to allow app db access

This commit is contained in:
Mikayla Dobson
2022-11-18 09:39:02 -06:00
parent 628d0dc04b
commit 74eefad05a
8 changed files with 639 additions and 14 deletions

88
server/db/seed.ts Normal file
View File

@@ -0,0 +1,88 @@
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.");
})();