60 lines
1.7 KiB
SQL
Executable File
60 lines
1.7 KiB
SQL
Executable File
CREATE TABLE IF NOT EXISTS items (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
price_cents INTEGER NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'available',
|
|
reserved_until TIMESTAMPTZ,
|
|
sold_at TIMESTAMPTZ,
|
|
paypal_order_id TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS item_images (
|
|
id SERIAL PRIMARY KEY,
|
|
item_id INTEGER NOT NULL REFERENCES items(id) ON DELETE CASCADE,
|
|
image_path TEXT NOT NULL,
|
|
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS customers (
|
|
id SERIAL PRIMARY KEY,
|
|
email TEXT NOT NULL UNIQUE,
|
|
password_hash TEXT NOT NULL,
|
|
name TEXT,
|
|
email_verified BOOLEAN NOT NULL DEFAULT false,
|
|
marketing_consent BOOLEAN NOT NULL DEFAULT false,
|
|
marketing_consent_at TIMESTAMPTZ,
|
|
marketing_consent_text TEXT,
|
|
unsubscribe_token TEXT NOT NULL UNIQUE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS customer_sessions (
|
|
token TEXT PRIMARY KEY,
|
|
customer_id INTEGER NOT NULL REFERENCES customers(id) ON DELETE CASCADE,
|
|
expires_at TIMESTAMPTZ NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS customer_tokens (
|
|
token TEXT PRIMARY KEY,
|
|
customer_id INTEGER NOT NULL REFERENCES customers(id) ON DELETE CASCADE,
|
|
kind TEXT NOT NULL,
|
|
expires_at TIMESTAMPTZ NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id SERIAL PRIMARY KEY,
|
|
item_id INTEGER REFERENCES items(id),
|
|
customer_id INTEGER REFERENCES customers(id) ON DELETE SET NULL,
|
|
processor TEXT NOT NULL,
|
|
processor_order_id TEXT,
|
|
amount_cents INTEGER,
|
|
status TEXT,
|
|
raw_event JSONB,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|