diff --git a/db/init.sql b/db/init.sql index 09a777f..fe05bb0 100644 --- a/db/init.sql +++ b/db/init.sql @@ -1,23 +1,27 @@ -CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; - -CREATE TABLE lnauth( - k1 VARCHAR(64) NOT NULL PRIMARY KEY, - lnurl TEXT NOT NULL, - created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, - session_id VARCHAR(48) NOT NULL DEFAULT encode(gen_random_uuid()::text::bytea, 'base64') -); CREATE TABLE users( - pubkey TEXT PRIMARY KEY, - last_seen TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + id SERIAL PRIMARY KEY, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + ln_pubkey TEXT, + nostr_pubkey TEXT, msats BIGINT NOT NULL DEFAULT 0 ); + CREATE TABLE sessions( - pubkey TEXT NOT NULL REFERENCES users(pubkey), + user_id INTEGER NOT NULL REFERENCES users(id), + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, session_id VARCHAR(48) ); + +CREATE TABLE lnauth( + k1 VARCHAR(64) PRIMARY KEY, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + lnurl TEXT NOT NULL, + session_id VARCHAR(48) NOT NULL DEFAULT encode(gen_random_uuid()::text::bytea, 'base64') +); + CREATE TABLE invoices( - id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), - pubkey TEXT NOT NULL REFERENCES users(pubkey), + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL REFERENCES users(id), msats BIGINT NOT NULL, msats_received BIGINT, preimage TEXT NOT NULL UNIQUE, @@ -29,40 +33,47 @@ CREATE TABLE invoices( held_since TIMESTAMP WITH TIME ZONE, description TEXT ); + CREATE TABLE markets( id SERIAL PRIMARY KEY, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, description TEXT NOT NULL, end_date TIMESTAMP WITH TIME ZONE NOT NULL, settled_at TIMESTAMP WITH TIME ZONE, - pubkey TEXT NOT NULL REFERENCES users(pubkey), - invoice_id UUID NOT NULL UNIQUE REFERENCES invoices(id) + user_id INTEGER NOT NULL REFERENCES users(id), + invoice_id INTEGER NOT NULL UNIQUE REFERENCES invoices(id) ); + CREATE TABLE shares( - id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), + id SERIAL PRIMARY KEY, market_id INTEGER NOT NULL REFERENCES markets(id), - win BOOLEAN, - description TEXT NOT NULL + description TEXT NOT NULL, + win BOOLEAN ); + CREATE TYPE order_side AS ENUM ('BUY', 'SELL'); + CREATE TABLE orders( - id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), + id SERIAL PRIMARY KEY, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP WITH TIME ZONE, - share_id UUID NOT NULL REFERENCES shares(id), - pubkey TEXT NOT NULL REFERENCES users(pubkey), + share_id INTEGER NOT NULL REFERENCES shares(id), + user_id INTEGER NOT NULL REFERENCES users(id), side ORDER_SIDE NOT NULL, quantity BIGINT NOT NULL, price BIGINT NOT NULL, - invoice_id UUID REFERENCES invoices(id), - order_id UUID REFERENCES orders(id) + invoice_id INTEGER REFERENCES invoices(id), + order_id INTEGER REFERENCES orders(id) ); + ALTER TABLE orders ADD CONSTRAINT order_price CHECK(price > 0 AND price < 100); ALTER TABLE orders ADD CONSTRAINT order_quantity CHECK(quantity > 0); + CREATE TABLE withdrawals( - id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), + id SERIAL PRIMARY KEY, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP WITH TIME ZONE, - pubkey TEXT NOT NULL REFERENCES users(pubkey), + canceled_at TIMESTAMP WITH TIME ZONE, + user_id INTEGER NOT NULL REFERENCES users(id), bolt11 TEXT NOT NULL UNIQUE, paid_at TIMESTAMP WITH TIME ZONE );