Login sequence and inventory/protocol storage groundwork
This commit is contained in:
15
server/src/db/migrate.ts
Normal file
15
server/src/db/migrate.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { pool } from './pool';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
async function migrate() {
|
||||
const sql = fs.readFileSync(path.join(__dirname, 'schema.sql'), 'utf-8');
|
||||
await pool.query(sql);
|
||||
console.log('Migration complete');
|
||||
await pool.end();
|
||||
}
|
||||
|
||||
migrate().catch(err => {
|
||||
console.error('Migration failed:', err);
|
||||
process.exit(1);
|
||||
});
|
||||
9
server/src/db/pool.ts
Normal file
9
server/src/db/pool.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Pool } from 'pg';
|
||||
|
||||
export const pool = new Pool({
|
||||
connectionString: process.env.DATABASE_URL ||
|
||||
'postgresql://labwise:labwise_dev_pw@localhost:5432/labwise_db',
|
||||
max: 10,
|
||||
idleTimeoutMillis: 30000,
|
||||
connectionTimeoutMillis: 2000,
|
||||
});
|
||||
63
server/src/db/schema.sql
Normal file
63
server/src/db/schema.sql
Normal file
@@ -0,0 +1,63 @@
|
||||
-- Chemical inventory, scoped per user
|
||||
CREATE TABLE IF NOT EXISTS chemicals (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id TEXT NOT NULL,
|
||||
|
||||
-- Required fields
|
||||
pi_first_name TEXT NOT NULL,
|
||||
physical_state TEXT NOT NULL,
|
||||
chemical_name TEXT NOT NULL,
|
||||
bldg_code TEXT NOT NULL,
|
||||
lab TEXT NOT NULL,
|
||||
storage_location TEXT NOT NULL,
|
||||
storage_device TEXT NOT NULL,
|
||||
number_of_containers TEXT NOT NULL,
|
||||
amount_per_container TEXT NOT NULL,
|
||||
unit_of_measure TEXT NOT NULL,
|
||||
cas_number TEXT NOT NULL,
|
||||
|
||||
-- Optional fields
|
||||
chemical_formula TEXT,
|
||||
molecular_weight TEXT,
|
||||
vendor TEXT,
|
||||
catalog_number TEXT,
|
||||
found_in_catalog TEXT,
|
||||
po_number TEXT,
|
||||
receipt_date TEXT,
|
||||
open_date TEXT,
|
||||
max_on_hand TEXT,
|
||||
expiration_date DATE,
|
||||
contact TEXT,
|
||||
comments TEXT,
|
||||
permit_number TEXT,
|
||||
barcode TEXT,
|
||||
concentration TEXT,
|
||||
chemical_number TEXT,
|
||||
lot_number TEXT,
|
||||
multiple_cas TEXT,
|
||||
msds TEXT,
|
||||
percentage_full NUMERIC(5,2),
|
||||
needs_manual_entry TEXT[],
|
||||
scanned_image TEXT,
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS chemicals_user_id_idx ON chemicals(user_id);
|
||||
CREATE INDEX IF NOT EXISTS chemicals_cas_number_idx ON chemicals(cas_number);
|
||||
|
||||
-- Protocols with JSONB analysis results
|
||||
CREATE TABLE IF NOT EXISTS protocols (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
content TEXT NOT NULL DEFAULT '',
|
||||
file_url TEXT,
|
||||
analysis_results JSONB,
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS protocols_user_id_idx ON protocols(user_id);
|
||||
Reference in New Issue
Block a user