From 3ede9d78632634d92400b898c9bd2c1d52265b49 Mon Sep 17 00:00:00 2001 From: Stevche Radevski Date: Sat, 1 Jun 2024 16:25:04 +0200 Subject: [PATCH] fix: Use integer for variant and category ranks (#7572) --- .../services/product-category/index.ts | 38 +++++++++---------- .../product-categories.spec.ts | 32 ++++++++-------- .../migrations/.snapshot-medusa-products.json | 8 ++-- .../src/migrations/Migration20240601111544.ts | 23 +++++++++++ .../product/src/models/product-category.ts | 6 ++- .../product/src/models/product-variant.ts | 4 +- 6 files changed, 68 insertions(+), 43 deletions(-) create mode 100644 packages/modules/product/src/migrations/Migration20240601111544.ts diff --git a/packages/modules/product/integration-tests/__tests__/services/product-category/index.ts b/packages/modules/product/integration-tests/__tests__/services/product-category/index.ts index 1b05e63758..ab8bf465cb 100644 --- a/packages/modules/product/integration-tests/__tests__/services/product-category/index.ts +++ b/packages/modules/product/integration-tests/__tests__/services/product-category/index.ts @@ -314,7 +314,7 @@ moduleIntegrationTestRunner({ mpath: "electronics.computers.laptops.gaming-laptops.high-performance.", parent_category_id: "gaming-laptops", - category_children: [ + category_children: expect.arrayContaining([ { id: "4k-gaming", handle: "4k-gaming-laptops", @@ -331,7 +331,7 @@ moduleIntegrationTestRunner({ parent_category_id: "high-performance", category_children: [], }, - ], + ]), }, ], }, @@ -900,10 +900,10 @@ moduleIntegrationTestRunner({ } ) - expect(productCategory).toEqual( + expect(JSON.parse(JSON.stringify(productCategory))).toEqual( expect.objectContaining({ name: "New Category", - rank: "0", + rank: 0, }) ) }) @@ -932,7 +932,7 @@ moduleIntegrationTestRunner({ expect(productCategoryNew).toEqual( expect.objectContaining({ name: "New Category 2", - rank: "1", + rank: 1, }) ) @@ -954,7 +954,7 @@ moduleIntegrationTestRunner({ expect.objectContaining({ name: "New Category 2.1", parent_category_id: productCategoryNew.id, - rank: "0", + rank: 0, }) ) }) @@ -1032,15 +1032,15 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryTwo.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryZero.id, - rank: "1", + rank: 1, }), expect.objectContaining({ id: productCategoryOne.id, - rank: "2", + rank: 2, }), ]) ) @@ -1065,19 +1065,19 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryTwo.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryZeroZero.id, - rank: "1", + rank: 1, }), expect.objectContaining({ id: productCategoryZeroOne.id, - rank: "2", + rank: 2, }), expect.objectContaining({ id: productCategoryZeroTwo.id, - rank: "3", + rank: 3, }), ]) ) @@ -1102,19 +1102,19 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryTwo.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryZeroZero.id, - rank: "1", + rank: 1, }), expect.objectContaining({ id: productCategoryZeroOne.id, - rank: "2", + rank: 2, }), expect.objectContaining({ id: productCategoryZeroTwo.id, - rank: "3", + rank: 3, }), ]) ) @@ -1182,11 +1182,11 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryZero.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryTwo.id, - rank: "1", + rank: 1, }), ]) ) diff --git a/packages/modules/product/integration-tests/__tests__/services/product-module-service/product-categories.spec.ts b/packages/modules/product/integration-tests/__tests__/services/product-module-service/product-categories.spec.ts index a3f1bfb7ce..29cf2c2eba 100644 --- a/packages/modules/product/integration-tests/__tests__/services/product-module-service/product-categories.spec.ts +++ b/packages/modules/product/integration-tests/__tests__/services/product-module-service/product-categories.spec.ts @@ -281,7 +281,7 @@ moduleIntegrationTestRunner({ expect(productCategory).toEqual( expect.objectContaining({ name: "New Category", - rank: "0", + rank: 0, }) ) }) @@ -324,7 +324,7 @@ moduleIntegrationTestRunner({ expect(productCategoryNew).toEqual( expect.objectContaining({ name: "New Category 2", - rank: "1", + rank: 1, }) ) @@ -346,7 +346,7 @@ moduleIntegrationTestRunner({ expect.objectContaining({ name: "New Category 2.1", parent_category_id: productCategoryNew.id, - rank: "0", + rank: 0, }) ) }) @@ -438,15 +438,15 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryTwo.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryZero.id, - rank: "1", + rank: 1, }), expect.objectContaining({ id: productCategoryOne.id, - rank: "2", + rank: 2, }), ]) ) @@ -471,19 +471,19 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryTwo.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryZeroZero.id, - rank: "1", + rank: 1, }), expect.objectContaining({ id: productCategoryZeroOne.id, - rank: "2", + rank: 2, }), expect.objectContaining({ id: productCategoryZeroTwo.id, - rank: "3", + rank: 3, }), ]) ) @@ -508,19 +508,19 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryTwo.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryZeroZero.id, - rank: "1", + rank: 1, }), expect.objectContaining({ id: productCategoryZeroOne.id, - rank: "2", + rank: 2, }), expect.objectContaining({ id: productCategoryZeroTwo.id, - rank: "3", + rank: 3, }), ]) ) @@ -600,11 +600,11 @@ moduleIntegrationTestRunner({ expect.arrayContaining([ expect.objectContaining({ id: productCategoryZero.id, - rank: "0", + rank: 0, }), expect.objectContaining({ id: productCategoryTwo.id, - rank: "1", + rank: 1, }), ]) ) diff --git a/packages/modules/product/src/migrations/.snapshot-medusa-products.json b/packages/modules/product/src/migrations/.snapshot-medusa-products.json index 776583d0d2..0c1027f2c3 100644 --- a/packages/modules/product/src/migrations/.snapshot-medusa-products.json +++ b/packages/modules/product/src/migrations/.snapshot-medusa-products.json @@ -74,13 +74,13 @@ }, "rank": { "name": "rank", - "type": "numeric", + "type": "integer", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "default": "0", - "mappedType": "decimal" + "mappedType": "integer" }, "parent_category_id": { "name": "parent_category_id", @@ -1378,13 +1378,13 @@ }, "variant_rank": { "name": "variant_rank", - "type": "numeric", + "type": "integer", "unsigned": false, "autoincrement": false, "primary": false, "nullable": true, "default": "0", - "mappedType": "decimal" + "mappedType": "integer" }, "product_id": { "name": "product_id", diff --git a/packages/modules/product/src/migrations/Migration20240601111544.ts b/packages/modules/product/src/migrations/Migration20240601111544.ts new file mode 100644 index 0000000000..86899676a7 --- /dev/null +++ b/packages/modules/product/src/migrations/Migration20240601111544.ts @@ -0,0 +1,23 @@ +import { Migration } from "@mikro-orm/migrations" + +export class Migration20240601111544 extends Migration { + async up(): Promise { + this.addSql( + 'alter table if exists "product_category" alter column "rank" type integer using ("rank"::integer);' + ) + + this.addSql( + 'alter table if exists "product_variant" alter column "variant_rank" type integer using ("variant_rank"::integer);' + ) + } + + async down(): Promise { + this.addSql( + 'alter table if exists "product_category" alter column "rank" type numeric using ("rank"::numeric);' + ) + + this.addSql( + 'alter table if exists "product_variant" alter column "variant_rank" type numeric using ("variant_rank"::numeric);' + ) + } +} diff --git a/packages/modules/product/src/models/product-category.ts b/packages/modules/product/src/models/product-category.ts index e7fb24efae..7db8eaf68f 100644 --- a/packages/modules/product/src/models/product-category.ts +++ b/packages/modules/product/src/models/product-category.ts @@ -68,7 +68,11 @@ class ProductCategory { @Property({ columnType: "boolean", default: false }) is_internal?: boolean - @Property({ columnType: "numeric", nullable: false, default: 0 }) + @Property({ + columnType: "integer", + nullable: false, + default: 0, + }) rank?: number @ManyToOne(() => ProductCategory, { diff --git a/packages/modules/product/src/models/product-variant.ts b/packages/modules/product/src/models/product-variant.ts index f372a7b4aa..371732ae5e 100644 --- a/packages/modules/product/src/models/product-variant.ts +++ b/packages/modules/product/src/models/product-variant.ts @@ -130,12 +130,10 @@ class ProductVariant { @Property({ columnType: "jsonb", nullable: true }) metadata?: Record | null - // TODO: replace with BigNumber, or in this case a normal int should work @Property({ - columnType: "numeric", + columnType: "integer", nullable: true, default: 0, - serializer: optionalNumericSerializer, }) variant_rank?: number | null