- Rate fetcher now scrapes CD, Money Market, and High Yield Savings rates from Bankrate.com with pauses between fetches to avoid rate limiting - Historical rate data is preserved (no longer deleted on each fetch) - Database migration adds rate_type column and tenant ai_recommendations table - Backend returns market rates grouped by type with latest-batch-only queries - AI prompt now includes all three rate types for comprehensive analysis - AI recommendations are saved per-tenant for retrieval on page load - Frontend: "Market CD Rates" replaced with "Today's Market Rates" tabbed view - Rates section is collapsible (expanded by default) to save screen space - Saved recommendations load automatically with "Last Updated" timestamp Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
37 lines
1.3 KiB
SQL
37 lines
1.3 KiB
SQL
-- Migration: Expand cd_rates for multiple market rate types + tenant AI recommendation storage
|
|
-- Phase 6: AI Features Part 2
|
|
|
|
-- 1) Add rate_type column to shared.cd_rates to support CD, Money Market, and High Yield Savings
|
|
ALTER TABLE shared.cd_rates
|
|
ADD COLUMN IF NOT EXISTS rate_type VARCHAR(50) DEFAULT 'cd' NOT NULL;
|
|
|
|
-- Index for filtering by rate type
|
|
CREATE INDEX IF NOT EXISTS idx_cd_rates_type ON shared.cd_rates(rate_type);
|
|
|
|
-- Composite index for getting latest rates by type efficiently
|
|
CREATE INDEX IF NOT EXISTS idx_cd_rates_type_fetched ON shared.cd_rates(rate_type, fetched_at DESC);
|
|
|
|
-- 2) Create ai_recommendations table in each existing tenant schema
|
|
-- This stores saved AI investment recommendations per tenant
|
|
-- For new tenants, this is handled by tenant-schema.service.ts
|
|
DO $$
|
|
DECLARE
|
|
tenant_schema TEXT;
|
|
BEGIN
|
|
FOR tenant_schema IN
|
|
SELECT schema_name FROM shared.organizations WHERE schema_name IS NOT NULL
|
|
LOOP
|
|
EXECUTE format(
|
|
'CREATE TABLE IF NOT EXISTS %I.ai_recommendations (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
recommendations_json JSONB NOT NULL,
|
|
overall_assessment TEXT,
|
|
risk_notes JSONB,
|
|
requested_by UUID,
|
|
response_time_ms INTEGER,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
)', tenant_schema
|
|
);
|
|
END LOOP;
|
|
END $$;
|