42 lines
1.3 KiB
SQL
42 lines
1.3 KiB
SQL
CREATE TABLE IF NOT EXISTS users (
|
|
id SERIAL PRIMARY KEY,
|
|
username TEXT UNIQUE NOT NULL,
|
|
password_hash TEXT NOT NULL,
|
|
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
|
|
is_approved BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS pads (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
brand TEXT,
|
|
description TEXT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
UNIQUE (user_id, name)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS reviews (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
pad_id INTEGER NOT NULL REFERENCES pads(id) ON DELETE CASCADE,
|
|
overall INTEGER CHECK (overall BETWEEN 1 AND 5),
|
|
fit INTEGER NOT NULL CHECK (fit BETWEEN 1 AND 5),
|
|
comfort INTEGER NOT NULL CHECK (comfort BETWEEN 1 AND 5),
|
|
absorbency INTEGER NOT NULL CHECK (absorbency BETWEEN 1 AND 5),
|
|
notes TEXT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
UNIQUE (user_id, pad_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS photos (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
pad_id INTEGER NOT NULL REFERENCES pads(id) ON DELETE CASCADE,
|
|
filename TEXT UNIQUE NOT NULL,
|
|
original_name TEXT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|