From 0dde2b37fad458e43bc80e1969d949e9680b8055 Mon Sep 17 00:00:00 2001 From: John Yeo Date: Mon, 23 Mar 2026 19:38:17 +0000 Subject: [PATCH] fix: reward indexes --- .../internal/rewards/RewardRedemptionService.ts | 16 +++++++++------- shared/models/cusModels/cusTable.ts | 1 + .../referralModels/referralCodeTable.ts | 7 +++++++ .../referralModels/rewardRedemptionTable.ts | 5 +++++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/server/src/internal/rewards/RewardRedemptionService.ts b/server/src/internal/rewards/RewardRedemptionService.ts index c9b03ab07..1d9ca261c 100644 --- a/server/src/internal/rewards/RewardRedemptionService.ts +++ b/server/src/internal/rewards/RewardRedemptionService.ts @@ -8,7 +8,7 @@ import { rewardRedemptions, rewards, } from "@autumn/shared"; -import { and, eq, inArray, or } from "drizzle-orm"; +import { and, eq, or, sql } from "drizzle-orm"; import type { DrizzleCli } from "@/db/initDrizzle.js"; import RecaseError from "@/utils/errorUtils.js"; @@ -95,7 +95,7 @@ export class RewardRedemptionService { ) .innerJoin( customers, - eq(rewardRedemptions.internal_customer_id, customers.internal_id), + sql`${rewardRedemptions.internal_customer_id} COLLATE "C" = ${customers.internal_id}`, ); if (withRewardProgram) { @@ -108,7 +108,9 @@ export class RewardRedemptionService { ); } const data = await query - .where(eq(referralCodes.internal_customer_id, internalCustomerId)) + .where( + sql`${referralCodes.internal_customer_id} COLLATE "C" = ${internalCustomerId}`, + ) .limit(limit); const processed = data.map((d) => ({ @@ -187,7 +189,7 @@ export class RewardRedemptionService { ) .innerJoin( customers, - eq(rewardRedemptions.internal_customer_id, customers.internal_id), + sql`${rewardRedemptions.internal_customer_id} COLLATE "C" = ${customers.internal_id}`, ) .innerJoin( rewardPrograms, @@ -203,12 +205,12 @@ export class RewardRedemptionService { .where( or( and( - eq(referralCodes.internal_customer_id, internalCustomerId), + sql`${referralCodes.internal_customer_id} COLLATE "C" = ${internalCustomerId}`, eq(rewardRedemptions.triggered, true), eq(rewardRedemptions.applied, false), ), and( - eq(rewardRedemptions.internal_customer_id, internalCustomerId), + sql`${rewardRedemptions.internal_customer_id} COLLATE "C" = ${internalCustomerId}`, eq(rewardRedemptions.triggered, true), eq(rewardRedemptions.redeemer_applied, false), ), @@ -241,7 +243,7 @@ export class RewardRedemptionService { return await db .delete(rewardRedemptions) .where( - inArray(rewardRedemptions.internal_customer_id, internalCustomerId), + sql`${rewardRedemptions.internal_customer_id} COLLATE "C" = ANY(${internalCustomerId})`, ); } } diff --git a/shared/models/cusModels/cusTable.ts b/shared/models/cusModels/cusTable.ts index f73d5544c..14e59dbf3 100644 --- a/shared/models/cusModels/cusTable.ts +++ b/shared/models/cusModels/cusTable.ts @@ -61,6 +61,7 @@ export const customers = pgTable( index("idx_customers_org_env_fingerprint") .on(table.org_id, table.env, table.fingerprint) .where(sql`${table.fingerprint} IS NOT NULL`), + index("idx_customers_processor_id").on(sql`(${table.processor} ->> 'id')`), ], ).enableRLS(); diff --git a/shared/models/rewardModels/referralModels/referralCodeTable.ts b/shared/models/rewardModels/referralModels/referralCodeTable.ts index 07726d05b..aa2d36df3 100644 --- a/shared/models/rewardModels/referralModels/referralCodeTable.ts +++ b/shared/models/rewardModels/referralModels/referralCodeTable.ts @@ -1,11 +1,13 @@ import { foreignKey, + index, numeric, pgTable, primaryKey, text, unique, } from "drizzle-orm/pg-core"; +import { collatePgColumn } from "../../../db/utils.js"; import { customers } from "../../cusModels/cusTable"; import { organizations } from "../../orgModels/orgTable"; import { rewardPrograms } from "../rewardProgramModels/rewardProgramTable"; @@ -43,5 +45,10 @@ export const referralCodes = pgTable( name: "referral_codes_pkey", }), unique("referral_codes_id_key").on(table.id), + index("idx_referral_codes_internal_customer_id").on( + table.internal_customer_id, + ), ], ); + +collatePgColumn(referralCodes.internal_customer_id, "C"); diff --git a/shared/models/rewardModels/referralModels/rewardRedemptionTable.ts b/shared/models/rewardModels/referralModels/rewardRedemptionTable.ts index 734bca622..65a454978 100644 --- a/shared/models/rewardModels/referralModels/rewardRedemptionTable.ts +++ b/shared/models/rewardModels/referralModels/rewardRedemptionTable.ts @@ -1,10 +1,12 @@ import { boolean, foreignKey, + index, numeric, pgTable, text, } from "drizzle-orm/pg-core"; +import { collatePgColumn } from "../../../db/utils.js"; import { customers } from "../../cusModels/cusTable"; import { rewardPrograms } from "../rewardProgramModels/rewardProgramTable"; import { referralCodes } from "./referralCodeTable"; @@ -38,5 +40,8 @@ export const rewardRedemptions = pgTable( foreignColumns: [referralCodes.id], name: "reward_redemptions_referral_code_id_fkey", }).onDelete("cascade"), + index("idx_reward_redemptions_referral_code_id").on(table.referral_code_id), ], ); + +collatePgColumn(rewardRedemptions.internal_customer_id, "C");