65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
const { Pool } = require('pg');
|
|
require('dotenv').config();
|
|
|
|
const pool = new Pool({
|
|
connectionString: process.env.DATABASE_URL
|
|
});
|
|
|
|
const initDb = async () => {
|
|
try {
|
|
// 1. Users table
|
|
await pool.query(`
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
`);
|
|
|
|
// 2. Beans table
|
|
await pool.query(`
|
|
CREATE TABLE IF NOT EXISTS beans (
|
|
id VARCHAR(50) PRIMARY KEY,
|
|
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
|
name VARCHAR(255) NOT NULL,
|
|
roastery VARCHAR(255),
|
|
tasting_notes TEXT,
|
|
roast_type VARCHAR(50),
|
|
roast_date VARCHAR(50),
|
|
image TEXT,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
is_deleted BOOLEAN DEFAULT FALSE
|
|
)
|
|
`);
|
|
|
|
// 3. Brew logs table
|
|
await pool.query(`
|
|
CREATE TABLE IF NOT EXISTS brew_logs (
|
|
id VARCHAR(50) PRIMARY KEY,
|
|
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
|
bean_id VARCHAR(50) REFERENCES beans(id) ON DELETE CASCADE,
|
|
method VARCHAR(50),
|
|
grind VARCHAR(100),
|
|
water_temp VARCHAR(50),
|
|
ratio VARCHAR(50),
|
|
yield VARCHAR(50),
|
|
time VARCHAR(50),
|
|
notes TEXT,
|
|
rating INTEGER,
|
|
created_at BIGINT,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
is_deleted BOOLEAN DEFAULT FALSE
|
|
)
|
|
`);
|
|
console.log('Database initialized');
|
|
} catch (err) {
|
|
console.error('Error initializing database', err);
|
|
}
|
|
};
|
|
|
|
initDb();
|
|
|
|
module.exports = pool;
|