Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions artifacts/script.sql
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ DROP TABLE IF EXISTS "DP_API_LABELS";
DROP TABLE IF EXISTS "DP_APPLICATION" CASCADE;
DROP TABLE IF EXISTS "DP_API_SUBSCRIPTION";
DROP TABLE IF EXISTS "session";
DROP TABLE IF EXISTS "DP_BILLING_ENGINE_KEYS";


CREATE TABLE "DP_ORGANIZATION" (
Expand Down Expand Up @@ -134,6 +135,7 @@ CREATE TABLE "DP_API_METADATA" (
"METADATA_SEARCH" JSON,
"PROVIDER" VARCHAR(256),
"TAGS" VARCHAR(256),
"MONETIZATION_ENABLED" BOOLEAN DEFAULT FALSE,
FOREIGN KEY ("ORG_ID") REFERENCES "DP_ORGANIZATION"("ORG_ID") ON DELETE CASCADE,
UNIQUE ("ORG_ID", "API_NAME", "API_VERSION"),
PRIMARY KEY ("API_ID")
Expand Down Expand Up @@ -262,3 +264,39 @@ CREATE INDEX idx_metadata_org_id ON "DP_API_METADATA"("ORG_ID");

CREATE INDEX idx_metadata_search ON "DP_API_METADATA" USING gin(to_tsvector('english', "METADATA_SEARCH"));
CREATE INDEX "IDX_session_expire" ON "session" ("expire");
CREATE INDEX "IDX_DP_SUB_ORG_APP_API" ON "DP_API_SUBSCRIPTION" ("ORG_ID","APP_ID","API_ID");

CREATE INDEX "IDX_DP_SUB_BILLING_SUB" ON "DP_API_SUBSCRIPTION" ("BILLING_SUBSCRIPTION_ID");

CREATE INDEX "IDX_DP_SUB_BILLING_CUSTOMER" ON "DP_API_SUBSCRIPTION" ("BILLING_CUSTOMER_ID");
Comment on lines +267 to +271
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Indexes reference columns that don't exist yet in CREATE TABLE.

The indexes IDX_DP_SUB_BILLING_SUB and IDX_DP_SUB_BILLING_CUSTOMER reference BILLING_SUBSCRIPTION_ID and BILLING_CUSTOMER_ID columns, but these columns are only added via ALTER TABLE statements at lines 296-300. The CREATE TABLE for DP_API_SUBSCRIPTION (lines 208-218) doesn't include these columns.

For a fresh database install, this script will fail because the indexes are created before the columns exist.

🔎 Proposed fix

Move the index creation statements after the ALTER TABLE statements, or add the columns directly in the CREATE TABLE statement:

 CREATE TABLE "DP_API_SUBSCRIPTION" (
     "SUB_ID" VARCHAR(256) NOT NULL,
     "APP_ID" VARCHAR(256) NOT NULL,
     "ORG_ID" VARCHAR(256) NOT NULL,
     "API_ID" VARCHAR(256) NOT NULL,
     "POLICY_ID" VARCHAR(256) NOT NULL,
+    "BILLING_CUSTOMER_ID" VARCHAR(256),
+    "BILLING_SUBSCRIPTION_ID" VARCHAR(256),
+    "PAYMENT_PROVIDER" VARCHAR(64),
+    "PAYMENT_STATUS" VARCHAR(64),
+    "CHECKOUT_SESSION_ID" VARCHAR(256),
     PRIMARY KEY ("SUB_ID"),
     ...
 );

Then remove the corresponding ALTER TABLE statements at lines 296-300.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In artifacts/script.sql around lines 267 to 271, the two index statements
IDX_DP_SUB_BILLING_SUB and IDX_DP_SUB_BILLING_CUSTOMER reference
BILLING_SUBSCRIPTION_ID and BILLING_CUSTOMER_ID which are not present in the
CREATE TABLE for DP_API_SUBSCRIPTION (lines ~208-218) and are only added later
via ALTER TABLE (lines ~296-300); to fix, either move these CREATE INDEX
statements so they appear after the ALTER TABLE block that adds those columns,
or instead add BILLING_SUBSCRIPTION_ID and BILLING_CUSTOMER_ID directly into the
DP_API_SUBSCRIPTION CREATE TABLE and then remove the later ALTER TABLE
statements; ensure index creation happens only after the columns exist.


-- DP_BILLING_ENGINE_KEYS: Billing engine keys for each org (Stripe, etc.)
CREATE TABLE IF NOT EXISTS "DP_BILLING_ENGINE_KEYS" (
"ID" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
"ORG_ID" UUID NOT NULL,
"BILLING_ENGINE" VARCHAR(32) NOT NULL,
"SECRET_KEY_ENC" TEXT NOT NULL,
"PUBLISHABLE_KEY_ENC" TEXT NOT NULL,
"WEBHOOK_SECRET_ENC" TEXT NOT NULL,
"CREATED_AT" TIMESTAMP DEFAULT NOW(),
"UPDATED_AT" TIMESTAMP DEFAULT NOW(),
UNIQUE ("ORG_ID", "BILLING_ENGINE")
);
CREATE INDEX IF NOT EXISTS "IDX_BILLING_ENGINE_KEYS_ORG_ID" ON "DP_BILLING_ENGINE_KEYS"("ORG_ID");
Comment on lines +273 to +285
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Type mismatch: ORG_ID is UUID here but VARCHAR(256) in DP_ORGANIZATION.

DP_BILLING_ENGINE_KEYS defines ORG_ID as UUID NOT NULL, but DP_ORGANIZATION (line 24) uses VARCHAR(256) for its primary key ORG_ID. This type mismatch will prevent establishing a proper foreign key relationship and may cause join/lookup issues.

🔎 Proposed fix
 CREATE TABLE IF NOT EXISTS "DP_BILLING_ENGINE_KEYS" (
     "ID" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-    "ORG_ID" UUID NOT NULL,
+    "ORG_ID" VARCHAR(256) NOT NULL,
     "BILLING_ENGINE" VARCHAR(32) NOT NULL,
     ...
+    FOREIGN KEY ("ORG_ID") REFERENCES "DP_ORGANIZATION"("ORG_ID") ON DELETE CASCADE
 );

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In artifacts/script.sql around lines 273 to 285, DP_BILLING_ENGINE_KEYS defines
ORG_ID as UUID while DP_ORGANIZATION (line 24) defines ORG_ID as VARCHAR(256);
change DP_BILLING_ENGINE_KEYS.ORG_ID to VARCHAR(256) to match the organization
table (or alternatively change DP_ORGANIZATION to UUID if you intend UUIDs
everywhere), then add an explicit FOREIGN KEY constraint referencing
DP_ORGANIZATION(ORG_ID) and ensure the index and any related code use the same
type to avoid join and FK failures.


-- Add missing monetization fields to DP_SUBSCRIPTION_POLICY if not present
ALTER TABLE "DP_SUBSCRIPTION_POLICY" ADD COLUMN IF NOT EXISTS "PRICING_MODEL" VARCHAR(256);
ALTER TABLE "DP_SUBSCRIPTION_POLICY" ADD COLUMN IF NOT EXISTS "CURRENCY" VARCHAR(256);
ALTER TABLE "DP_SUBSCRIPTION_POLICY" ADD COLUMN IF NOT EXISTS "BILLING_PERIOD" VARCHAR(256);
ALTER TABLE "DP_SUBSCRIPTION_POLICY" ADD COLUMN IF NOT EXISTS "FLAT_AMOUNT" DECIMAL;
ALTER TABLE "DP_SUBSCRIPTION_POLICY" ADD COLUMN IF NOT EXISTS "UNIT_AMOUNT" DECIMAL;
ALTER TABLE "DP_SUBSCRIPTION_POLICY" ADD COLUMN IF NOT EXISTS "PRICING_METADATA" JSONB;

-- Add missing monetization/billing fields to DP_API_SUBSCRIPTION if not present
ALTER TABLE "DP_API_SUBSCRIPTION" ADD COLUMN IF NOT EXISTS "BILLING_CUSTOMER_ID" VARCHAR(256);
ALTER TABLE "DP_API_SUBSCRIPTION" ADD COLUMN IF NOT EXISTS "BILLING_SUBSCRIPTION_ID" VARCHAR(256);
ALTER TABLE "DP_API_SUBSCRIPTION" ADD COLUMN IF NOT EXISTS "PAYMENT_PROVIDER" VARCHAR(64);
ALTER TABLE "DP_API_SUBSCRIPTION" ADD COLUMN IF NOT EXISTS "PAYMENT_STATUS" VARCHAR(64);
ALTER TABLE "DP_API_SUBSCRIPTION" ADD COLUMN IF NOT EXISTS "CHECKOUT_SESSION_ID" VARCHAR(256);


167 changes: 48 additions & 119 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"chokidar": "3.6.0",
"connect-pg-simple": "10.0.0",
"crypto": "1.0.1",
"dotenv": "^17.2.3",
"express": "4.21.2",
"express-handlebars": "7.1.3",
"express-session": "1.18.1",
Expand All @@ -54,7 +55,7 @@
"minimatch": "10.0.1",
"multer": "1.4.5-lts.1",
"node": "22.0.0",
"node-fetch": "3.3.2",
"node-fetch": "^2.7.0",
"nodemon": "3.1.4",
"npm": "11.2.0",
"passport": "0.7.0",
Expand All @@ -70,6 +71,7 @@
"redis": "4.6.0",
"sequelize": "6.37.3",
"shelljs": "0.8.5",
"stripe": "^20.0.0",
"unzipper": "0.12.3",
"uuid": "11.1.0",
"winston": "3.17.0",
Expand Down
Loading