23 lines
1.1 KiB
SQL
23 lines
1.1 KiB
SQL
-- 009: Trading orders (trading-service)
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id),
|
|
coupon_id UUID NOT NULL REFERENCES coupons(id),
|
|
side VARCHAR(4) NOT NULL CHECK (side IN ('buy', 'sell')),
|
|
order_type VARCHAR(10) NOT NULL DEFAULT 'limit' CHECK (order_type IN ('limit', 'market')),
|
|
price NUMERIC(12,2) NOT NULL CHECK (price > 0),
|
|
quantity INTEGER NOT NULL DEFAULT 1 CHECK (quantity > 0),
|
|
filled_quantity INTEGER NOT NULL DEFAULT 0,
|
|
status VARCHAR(20) NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'partial', 'filled', 'cancelled')),
|
|
is_maker BOOLEAN NOT NULL DEFAULT false,
|
|
cancelled_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_orders_user_id ON orders(user_id);
|
|
CREATE INDEX idx_orders_coupon_id ON orders(coupon_id);
|
|
CREATE INDEX idx_orders_status ON orders(status);
|
|
CREATE INDEX idx_orders_side ON orders(side);
|
|
CREATE INDEX idx_orders_created_at ON orders(created_at DESC);
|