36 lines
2.1 KiB
SQL
36 lines
2.1 KiB
SQL
ALTER TABLE "bottles" ADD COLUMN "active_lease_id" UUID;
|
|
-- Legacy leases predate recoverable idempotency tokens. Expire them rather than
|
|
-- fabricating ciphertext that could ever be returned as a valid bearer secret.
|
|
ALTER TABLE "bottle_pick_leases" ADD COLUMN "lease_token_ciphertext" BYTEA;
|
|
WITH expired AS (
|
|
UPDATE "bottle_pick_leases"
|
|
SET "status" = 'EXPIRED', "ended_at" = COALESCE("ended_at", CURRENT_TIMESTAMP)
|
|
WHERE "status" = 'ACTIVE'
|
|
RETURNING "bottle_id"
|
|
)
|
|
UPDATE "bottles" b
|
|
SET "pool_status" = 'IN_POOL', "version" = b."version" + 1
|
|
WHERE b."pool_status" = 'LEASED'
|
|
AND b."id" IN (SELECT "bottle_id" FROM expired);
|
|
UPDATE "bottle_pick_leases"
|
|
SET "lease_token_ciphertext" = decode(repeat('00', 48), 'hex')
|
|
WHERE "lease_token_ciphertext" IS NULL;
|
|
ALTER TABLE "bottle_pick_leases"
|
|
ALTER COLUMN "lease_token_ciphertext" SET NOT NULL;
|
|
|
|
CREATE TABLE "bottle_pick_requests" (
|
|
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
|
|
"picker_id" UUID NOT NULL,
|
|
"request_id" VARCHAR(128) NOT NULL,
|
|
"lease_id" UUID,
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "bottle_pick_requests_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "bottles_active_lease_id_key" ON "bottles"("active_lease_id");
|
|
CREATE UNIQUE INDEX "bottle_pick_requests_picker_id_request_id_key" ON "bottle_pick_requests"("picker_id", "request_id");
|
|
CREATE UNIQUE INDEX "bottle_pick_requests_lease_id_key" ON "bottle_pick_requests"("lease_id");
|
|
CREATE INDEX "bottle_pick_requests_created_at_idx" ON "bottle_pick_requests"("created_at");
|
|
ALTER TABLE "bottles" ADD CONSTRAINT "bottles_active_lease_id_fkey" FOREIGN KEY ("active_lease_id") REFERENCES "bottle_pick_leases"("id") ON DELETE SET NULL ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
|
|
ALTER TABLE "bottle_pick_requests" ADD CONSTRAINT "bottle_pick_requests_picker_id_fkey" FOREIGN KEY ("picker_id") REFERENCES "accounts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "bottle_pick_requests" ADD CONSTRAINT "bottle_pick_requests_lease_id_fkey" FOREIGN KEY ("lease_id") REFERENCES "bottle_pick_leases"("id") ON DELETE SET NULL ON UPDATE CASCADE; |