diff --git a/.changeset/stupid-worms-mate.md b/.changeset/stupid-worms-mate.md new file mode 100644 index 0000000000..54e60832a6 --- /dev/null +++ b/.changeset/stupid-worms-mate.md @@ -0,0 +1,5 @@ +--- +"@medusajs/product": patch +--- + +fix(): product image missing index diff --git a/packages/modules/product/src/migrations/.snapshot-medusa-product.json b/packages/modules/product/src/migrations/.snapshot-medusa-product.json index 669b52670a..8e44625e1c 100644 --- a/packages/modules/product/src/migrations/.snapshot-medusa-product.json +++ b/packages/modules/product/src/migrations/.snapshot-medusa-product.json @@ -1189,6 +1189,33 @@ "unique": false, "expression": "CREATE INDEX IF NOT EXISTS \"IDX_product_image_url\" ON \"image\" (url) WHERE deleted_at IS NULL" }, + { + "keyName": "IDX_product_image_rank", + "columnNames": [], + "composite": false, + "constraint": false, + "primary": false, + "unique": false, + "expression": "CREATE INDEX IF NOT EXISTS \"IDX_product_image_rank\" ON \"image\" (rank) WHERE deleted_at IS NULL" + }, + { + "keyName": "IDX_product_image_url_rank_product_id", + "columnNames": [], + "composite": false, + "constraint": false, + "primary": false, + "unique": false, + "expression": "CREATE INDEX IF NOT EXISTS \"IDX_product_image_url_rank_product_id\" ON \"image\" (url, rank, product_id) WHERE deleted_at IS NULL" + }, + { + "keyName": "IDX_product_image_rank_product_id", + "columnNames": [], + "composite": false, + "constraint": false, + "primary": false, + "unique": false, + "expression": "CREATE INDEX IF NOT EXISTS \"IDX_product_image_rank_product_id\" ON \"image\" (rank, product_id) WHERE deleted_at IS NULL" + }, { "keyName": "image_pkey", "columnNames": [ diff --git a/packages/modules/product/src/migrations/Migration20250910154539.ts b/packages/modules/product/src/migrations/Migration20250910154539.ts new file mode 100644 index 0000000000..f496cd103d --- /dev/null +++ b/packages/modules/product/src/migrations/Migration20250910154539.ts @@ -0,0 +1,36 @@ +import { Migration } from "@mikro-orm/migrations" + +export class Migration20250910154539 extends Migration { + override async up(): Promise { + this.addSql( + `CREATE INDEX IF NOT EXISTS "IDX_image_product_id" ON "image" (product_id) WHERE deleted_at IS NULL;` + ) + this.addSql( + `CREATE INDEX IF NOT EXISTS "IDX_image_deleted_at" ON "image" (deleted_at) WHERE deleted_at IS NULL;` + ) + this.addSql( + `CREATE INDEX IF NOT EXISTS "IDX_product_image_url" ON "image" (url) WHERE deleted_at IS NULL;` + ) + this.addSql( + `CREATE INDEX IF NOT EXISTS "IDX_product_image_rank" ON "image" (rank) WHERE deleted_at IS NULL;` + ) + this.addSql( + `CREATE INDEX IF NOT EXISTS "IDX_product_image_url_rank_product_id" ON "image" (url, rank, product_id) WHERE deleted_at IS NULL;` + ) + this.addSql( + `CREATE INDEX IF NOT EXISTS "IDX_product_image_rank_product_id" ON "image" (rank, product_id) WHERE deleted_at IS NULL;` + ) + } + + override async down(): Promise { + this.addSql(`drop index if exists "IDX_image_product_id";`) + this.addSql(`drop index if exists "IDX_image_deleted_at";`) + this.addSql(`drop index if exists "IDX_product_image_url";`) + this.addSql(`drop index if exists "IDX_product_image_rank";`) + this.addSql(`drop index if exists "IDX_product_image_url_rank_product_id";`) + this.addSql( + `alter table if exists "image" drop constraint if exists "image_pkey";` + ) + this.addSql(`drop index if exists "IDX_product_image_rank_product_id";`) + } +} diff --git a/packages/modules/product/src/models/product-image.ts b/packages/modules/product/src/models/product-image.ts index 0b605ec051..4d06e91c21 100644 --- a/packages/modules/product/src/models/product-image.ts +++ b/packages/modules/product/src/models/product-image.ts @@ -21,6 +21,24 @@ const ProductImage = model unique: false, where: "deleted_at IS NULL", }, + { + name: "IDX_product_image_rank", + on: ["rank"], + unique: false, + where: "deleted_at IS NULL", + }, + { + name: "IDX_product_image_url_rank_product_id", + on: ["url", "rank", "product_id"], + unique: false, + where: "deleted_at IS NULL", + }, + { + name: "IDX_product_image_rank_product_id", + on: ["rank", "product_id"], + unique: false, + where: "deleted_at IS NULL", + }, ]) export default ProductImage