-- CreateTable CREATE TABLE "exchange_currency_rate_snapshots" ( "id" SERIAL NOT NULL, "uuid" TEXT NOT NULL, "base_currency" VARCHAR(3) NOT NULL, "effective_date" DATE NOT NULL, "quoted_at" TIMESTAMP(3) NOT NULL, "next_update_at" TIMESTAMP(3), "provider" VARCHAR(255) NOT NULL, "documentation" VARCHAR(500) NOT NULL, "terms_of_use" VARCHAR(500) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "exchange_currency_rate_snapshots_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "exchange_currency_rates" ( "id" SERIAL NOT NULL, "snapshot_id" INTEGER NOT NULL, "quote_currency" VARCHAR(3) NOT NULL, "rate" DECIMAL(24,10) NOT NULL, CONSTRAINT "exchange_currency_rates_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "exchange_pricing_currency_policies" ( "country_code" VARCHAR(2) NOT NULL, "currency_code" VARCHAR(3) NOT NULL, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "exchange_pricing_currency_policies_pkey" PRIMARY KEY ("country_code") ); -- CreateIndex CREATE UNIQUE INDEX "exchange_currency_rate_snapshots_uuid_key" ON "exchange_currency_rate_snapshots"("uuid"); -- CreateIndex CREATE INDEX "exchange_currency_rate_snapshots_effective_date_idx" ON "exchange_currency_rate_snapshots"("effective_date"); -- CreateIndex CREATE UNIQUE INDEX "exchange_currency_rate_snapshots_base_currency_effective_da_key" ON "exchange_currency_rate_snapshots"("base_currency", "effective_date"); -- CreateIndex CREATE INDEX "exchange_currency_rates_quote_currency_idx" ON "exchange_currency_rates"("quote_currency"); -- CreateIndex CREATE UNIQUE INDEX "exchange_currency_rates_snapshot_id_quote_currency_key" ON "exchange_currency_rates"("snapshot_id", "quote_currency"); -- CreateIndex CREATE INDEX "exchange_pricing_currency_policies_currency_code_idx" ON "exchange_pricing_currency_policies"("currency_code"); -- AddForeignKey ALTER TABLE "exchange_currency_rates" ADD CONSTRAINT "exchange_currency_rates_snapshot_id_fkey" FOREIGN KEY ("snapshot_id") REFERENCES "exchange_currency_rate_snapshots"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- Seed pricing currencies for countries already present in Optovia data. INSERT INTO "exchange_pricing_currency_policies" ("country_code", "currency_code", "updated_at") VALUES ('AE', 'AED', CURRENT_TIMESTAMP), ('AO', 'AOA', CURRENT_TIMESTAMP), ('BF', 'XOF', CURRENT_TIMESTAMP), ('BI', 'BIF', CURRENT_TIMESTAMP), ('BJ', 'XOF', CURRENT_TIMESTAMP), ('BW', 'BWP', CURRENT_TIMESTAMP), ('CD', 'CDF', CURRENT_TIMESTAMP), ('CF', 'XAF', CURRENT_TIMESTAMP), ('CG', 'XAF', CURRENT_TIMESTAMP), ('CI', 'XOF', CURRENT_TIMESTAMP), ('CM', 'XAF', CURRENT_TIMESTAMP), ('CN', 'CNY', CURRENT_TIMESTAMP), ('CV', 'CVE', CURRENT_TIMESTAMP), ('DJ', 'DJF', CURRENT_TIMESTAMP), ('DZ', 'DZD', CURRENT_TIMESTAMP), ('EG', 'EGP', CURRENT_TIMESTAMP), ('ET', 'ETB', CURRENT_TIMESTAMP), ('GA', 'XAF', CURRENT_TIMESTAMP), ('GH', 'GHS', CURRENT_TIMESTAMP), ('GM', 'GMD', CURRENT_TIMESTAMP), ('GN', 'GNF', CURRENT_TIMESTAMP), ('GQ', 'XAF', CURRENT_TIMESTAMP), ('GW', 'XOF', CURRENT_TIMESTAMP), ('KE', 'KES', CURRENT_TIMESTAMP), ('KM', 'KMF', CURRENT_TIMESTAMP), ('KZ', 'KZT', CURRENT_TIMESTAMP), ('LR', 'LRD', CURRENT_TIMESTAMP), ('LS', 'LSL', CURRENT_TIMESTAMP), ('LY', 'LYD', CURRENT_TIMESTAMP), ('MA', 'MAD', CURRENT_TIMESTAMP), ('MG', 'MGA', CURRENT_TIMESTAMP), ('ML', 'XOF', CURRENT_TIMESTAMP), ('MR', 'MRU', CURRENT_TIMESTAMP), ('MU', 'MUR', CURRENT_TIMESTAMP), ('MW', 'MWK', CURRENT_TIMESTAMP), ('MZ', 'MZN', CURRENT_TIMESTAMP), ('NA', 'NAD', CURRENT_TIMESTAMP), ('NE', 'XOF', CURRENT_TIMESTAMP), ('NG', 'NGN', CURRENT_TIMESTAMP), ('PL', 'PLN', CURRENT_TIMESTAMP), ('RU', 'RUB', CURRENT_TIMESTAMP), ('RW', 'RWF', CURRENT_TIMESTAMP), ('SC', 'SCR', CURRENT_TIMESTAMP), ('SD', 'SDG', CURRENT_TIMESTAMP), ('SL', 'SLE', CURRENT_TIMESTAMP), ('SN', 'XOF', CURRENT_TIMESTAMP), ('SO', 'SOS', CURRENT_TIMESTAMP), ('SS', 'SSP', CURRENT_TIMESTAMP), ('ST', 'STN', CURRENT_TIMESTAMP), ('SZ', 'SZL', CURRENT_TIMESTAMP), ('TD', 'XAF', CURRENT_TIMESTAMP), ('TG', 'XOF', CURRENT_TIMESTAMP), ('TN', 'TND', CURRENT_TIMESTAMP), ('TZ', 'TZS', CURRENT_TIMESTAMP), ('UG', 'UGX', CURRENT_TIMESTAMP), ('ZA', 'ZAR', CURRENT_TIMESTAMP), ('ZM', 'ZMW', CURRENT_TIMESTAMP), ('ZW', 'ZWG', CURRENT_TIMESTAMP);