-- 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);