Persist daily currency rate snapshots
Build and deploy Docker image / build (push) Successful in 58s
Build and deploy Docker image / build (push) Successful in 58s
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
-- 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);
|
||||
@@ -69,3 +69,42 @@ model Product {
|
||||
@@index([categoryName, isActive])
|
||||
@@map("exchange_products")
|
||||
}
|
||||
|
||||
model CurrencyRateSnapshot {
|
||||
id Int @id @default(autoincrement())
|
||||
uuid String @unique @default(uuid())
|
||||
baseCurrency String @map("base_currency") @db.VarChar(3)
|
||||
effectiveDate DateTime @map("effective_date") @db.Date
|
||||
quotedAt DateTime @map("quoted_at")
|
||||
nextUpdateAt DateTime? @map("next_update_at")
|
||||
provider String @db.VarChar(255)
|
||||
documentation String @db.VarChar(500)
|
||||
termsOfUse String @map("terms_of_use") @db.VarChar(500)
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
rates CurrencyRate[]
|
||||
|
||||
@@unique([baseCurrency, effectiveDate])
|
||||
@@index([effectiveDate])
|
||||
@@map("exchange_currency_rate_snapshots")
|
||||
}
|
||||
|
||||
model CurrencyRate {
|
||||
id Int @id @default(autoincrement())
|
||||
snapshotId Int @map("snapshot_id")
|
||||
snapshot CurrencyRateSnapshot @relation(fields: [snapshotId], references: [id], onDelete: Cascade)
|
||||
quoteCurrency String @map("quote_currency") @db.VarChar(3)
|
||||
rate Decimal @db.Decimal(24, 10)
|
||||
|
||||
@@unique([snapshotId, quoteCurrency])
|
||||
@@index([quoteCurrency])
|
||||
@@map("exchange_currency_rates")
|
||||
}
|
||||
|
||||
model PricingCurrencyPolicy {
|
||||
countryCode String @id @map("country_code") @db.VarChar(2)
|
||||
currencyCode String @map("currency_code") @db.VarChar(3)
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
|
||||
@@index([currencyCode])
|
||||
@@map("exchange_pricing_currency_policies")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user