73 lines
No EOL
3.1 KiB
SQL
73 lines
No EOL
3.1 KiB
SQL
-- Enhanced Schema with Provider Exchange Mappings
|
|
-- Connect to trading_bot database
|
|
\c trading_bot;
|
|
|
|
-- First, rename is_active to active in existing tables
|
|
ALTER TABLE IF EXISTS exchanges RENAME COLUMN is_active TO active;
|
|
ALTER TABLE IF EXISTS symbols RENAME COLUMN is_active TO active;
|
|
|
|
-- Provider Exchange Mappings Table
|
|
-- Maps provider-specific exchange codes to our master exchanges
|
|
CREATE TABLE IF NOT EXISTS provider_exchange_mappings (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
provider VARCHAR(50) NOT NULL, -- 'qm', 'eod', 'ib', etc.
|
|
provider_exchange_code VARCHAR(50) NOT NULL, -- Provider's exchange code: 'NYE', 'US', 'NASDAQ'
|
|
provider_exchange_name VARCHAR(255), -- Provider's exchange name
|
|
master_exchange_id UUID REFERENCES exchanges(id),
|
|
country_code CHAR(2), -- Provider's country code
|
|
currency CHAR(3), -- Provider's currency
|
|
confidence DECIMAL(3,2) DEFAULT 0.8, -- Mapping confidence (0.0 to 1.0)
|
|
active BOOLEAN DEFAULT false, -- Manual activation flag
|
|
verified BOOLEAN DEFAULT false, -- Manually verified flag
|
|
auto_mapped BOOLEAN DEFAULT true, -- Was this auto-created by sync?
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
updated_at TIMESTAMP DEFAULT NOW(),
|
|
UNIQUE(provider, provider_exchange_code)
|
|
);
|
|
|
|
-- Create indexes for provider exchange mappings
|
|
CREATE INDEX IF NOT EXISTS idx_provider_exchange_mappings_provider ON provider_exchange_mappings(provider);
|
|
CREATE INDEX IF NOT EXISTS idx_provider_exchange_mappings_master ON provider_exchange_mappings(master_exchange_id);
|
|
CREATE INDEX IF NOT EXISTS idx_provider_exchange_mappings_active ON provider_exchange_mappings(provider, active);
|
|
|
|
-- Update existing exchanges to be inactive by default (for new syncs)
|
|
-- But preserve any existing active status
|
|
-- This only affects future INSERTs, not existing data
|
|
|
|
-- Add some useful views for management
|
|
CREATE OR REPLACE VIEW exchange_provider_summary AS
|
|
SELECT
|
|
e.code as master_code,
|
|
e.name as master_name,
|
|
e.country,
|
|
e.currency,
|
|
e.active as master_active,
|
|
COUNT(pem.id) as provider_mappings,
|
|
COUNT(CASE WHEN pem.active = true THEN 1 END) as active_mappings,
|
|
COUNT(CASE WHEN pem.verified = true THEN 1 END) as verified_mappings,
|
|
STRING_AGG(DISTINCT pem.provider, ', ') as providers
|
|
FROM exchanges e
|
|
LEFT JOIN provider_exchange_mappings pem ON e.id = pem.master_exchange_id
|
|
GROUP BY e.id, e.code, e.name, e.country, e.currency, e.active
|
|
ORDER BY e.code;
|
|
|
|
CREATE OR REPLACE VIEW provider_exchange_details AS
|
|
SELECT
|
|
pem.provider,
|
|
pem.provider_exchange_code,
|
|
pem.provider_exchange_name,
|
|
pem.country_code,
|
|
pem.currency,
|
|
pem.active,
|
|
pem.verified,
|
|
pem.auto_mapped,
|
|
pem.confidence,
|
|
e.code as master_exchange_code,
|
|
e.name as master_exchange_name,
|
|
e.active as master_active
|
|
FROM provider_exchange_mappings pem
|
|
JOIN exchanges e ON pem.master_exchange_id = e.id
|
|
ORDER BY pem.provider, pem.provider_exchange_code;
|
|
|
|
-- Show what we created
|
|
SELECT 'Enhanced provider exchange mapping schema created' as status; |