gcx/backend/migrations/009_create_orders.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);