cryptoindex / supabase_schema.sql
igriv's picture
Debug and fix Supabase initialization for HF Spaces
5d435b4
-- Create table for caching index calculations
CREATE TABLE IF NOT EXISTS index_cache (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
cache_key VARCHAR(32) UNIQUE NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
locale VARCHAR(50) NOT NULL,
market_type VARCHAR(50) NOT NULL,
index_data JSONB NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Create index for faster lookups
CREATE INDEX IF NOT EXISTS idx_cache_key ON index_cache(cache_key);
CREATE INDEX IF NOT EXISTS idx_cache_dates ON index_cache(start_date, end_date);
-- Create table for user-specific weights
CREATE TABLE IF NOT EXISTS user_weights (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
session_id VARCHAR(255) NOT NULL,
locale VARCHAR(50) NOT NULL,
market_type VARCHAR(50) NOT NULL,
weights_data JSONB NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Create indexes for user weights
CREATE INDEX IF NOT EXISTS idx_user_session ON user_weights(session_id);
CREATE INDEX IF NOT EXISTS idx_user_params ON user_weights(session_id, locale, market_type);
-- Optional: Create table for user sessions (if you want persistent user management)
CREATE TABLE IF NOT EXISTS user_sessions (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
session_id VARCHAR(255) UNIQUE NOT NULL,
user_email VARCHAR(255),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
last_active TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Enable Row Level Security (RLS) for better data isolation
ALTER TABLE index_cache ENABLE ROW LEVEL SECURITY;
ALTER TABLE user_weights ENABLE ROW LEVEL SECURITY;
ALTER TABLE user_sessions ENABLE ROW LEVEL SECURITY;
-- Create policies for public access (adjust based on your auth strategy)
-- For now, allowing all authenticated users to read cached data
CREATE POLICY "Public read access for index cache" ON index_cache
FOR SELECT USING (true);
CREATE POLICY "Public insert access for index cache" ON index_cache
FOR INSERT WITH CHECK (true);
CREATE POLICY "Public update access for index cache" ON index_cache
FOR UPDATE USING (true);
-- User weights should be session-specific
CREATE POLICY "Session-specific access for user weights" ON user_weights
FOR ALL USING (true);
-- Function to clean up old cache entries (optional)
CREATE OR REPLACE FUNCTION cleanup_old_cache()
RETURNS void AS $$
BEGIN
DELETE FROM index_cache WHERE created_at < NOW() - INTERVAL '30 days';
DELETE FROM user_weights WHERE created_at < NOW() - INTERVAL '7 days';
END;
$$ LANGUAGE plpgsql;
-- Optional: Create a scheduled job to run cleanup (requires pg_cron extension)
-- SELECT cron.schedule('cleanup-old-cache', '0 0 * * *', 'SELECT cleanup_old_cache();');