From 1d47d47ef7597e1310f13ffbb124999108f5ad96 Mon Sep 17 00:00:00 2001 From: Bas van den Aakster Date: Sun, 7 Dec 2025 22:28:14 +0100 Subject: [PATCH] feat: add database migration for service-to-offers refactor - Add service_id column to offers table - Remove offer_id column from services table - Update VERSION to 0.4.0 in wrangler.toml --- migrations/0006_service_offer_refactor.sql | 40 ++++++++++++++++++++++ wrangler.toml | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 migrations/0006_service_offer_refactor.sql diff --git a/migrations/0006_service_offer_refactor.sql b/migrations/0006_service_offer_refactor.sql new file mode 100644 index 0000000..43dd72a --- /dev/null +++ b/migrations/0006_service_offer_refactor.sql @@ -0,0 +1,40 @@ +-- V0.4.0 Migration: Refactor service-to-offer relationship +-- Change from one-to-one (service has offer_id) to one-to-many (offer has service_id) + +-- Step 1: Add service_id column to offers table +ALTER TABLE offers ADD COLUMN service_id TEXT; + +-- Step 2: Create new services table without offer_id +CREATE TABLE services_new ( + id TEXT PRIMARY KEY, + username TEXT NOT NULL, + service_fqn TEXT NOT NULL, + created_at INTEGER NOT NULL, + expires_at INTEGER NOT NULL, + is_public INTEGER NOT NULL DEFAULT 0, + metadata TEXT, + FOREIGN KEY (username) REFERENCES usernames(username) ON DELETE CASCADE, + UNIQUE(username, service_fqn) +); + +-- Step 3: Copy data from old services table (if any exists) +INSERT INTO services_new (id, username, service_fqn, created_at, expires_at, is_public, metadata) +SELECT id, username, service_fqn, created_at, expires_at, is_public, metadata +FROM services; + +-- Step 4: Drop old services table +DROP TABLE services; + +-- Step 5: Rename new table to services +ALTER TABLE services_new RENAME TO services; + +-- Step 6: Recreate indexes +CREATE INDEX IF NOT EXISTS idx_services_username ON services(username); +CREATE INDEX IF NOT EXISTS idx_services_fqn ON services(service_fqn); +CREATE INDEX IF NOT EXISTS idx_services_expires ON services(expires_at); + +-- Step 7: Add index for service_id in offers +CREATE INDEX IF NOT EXISTS idx_offers_service ON offers(service_id); + +-- Step 8: Add foreign key constraint (D1 doesn't enforce FK in ALTER, but good for documentation) +-- FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE diff --git a/wrangler.toml b/wrangler.toml index c389757..7fd56c1 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -17,7 +17,7 @@ OFFER_MIN_TTL = "60000" # Min offer TTL: 1 minute MAX_OFFERS_PER_REQUEST = "100" # Max offers per request MAX_TOPICS_PER_OFFER = "50" # Max topics per offer CORS_ORIGINS = "*" # Comma-separated list of allowed origins -VERSION = "0.1.0" # Semantic version +VERSION = "0.4.0" # Semantic version # AUTH_SECRET should be set as a secret, not a var # Run: npx wrangler secret put AUTH_SECRET