From c9701c70da33bb81aca1560ac5b96ea53fb61060 Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:37:17 -0300 Subject: [PATCH] fix(utils): db migration big number default value (#13913) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary **What** — What changes are introduced in this PR? Generate db migrations with big number default values **Why** — Why are these changes relevant or necessary? **How** — How have these changes been implemented? **Testing** — How have these changes been tested, or how can the reviewer test the feature? --- ## Examples Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice. This helps with documentation and ensures maintainers can quickly understand and verify the change. ```ts // Example usage ``` --- ## Checklist Please ensure the following before requesting a review: - [x] I have added a **changeset** for this PR - Every non-breaking change should be marked as a **patch** - To add a changeset, run `yarn changeset` and follow the prompts - [x] The changes are covered by relevant **tests** - [x] I have verified the code works as intended locally - [ ] I have linked the related issue(s) if applicable --- ## Additional Context Add any additional context, related issues, or references that might help the reviewer understand this PR. --- .changeset/real-bananas-learn.md | 5 ++ .../src/dml/__tests__/entity-builder.spec.ts | 2 + .../create-big-number-properties.ts | 18 ++++++- .../utils/src/dml/properties/big-number.ts | 6 +++ .../__tests__/migrations-generate.spec.ts | 47 +++++++++++++++++-- 5 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 .changeset/real-bananas-learn.md diff --git a/.changeset/real-bananas-learn.md b/.changeset/real-bananas-learn.md new file mode 100644 index 0000000000..c7b1fa4316 --- /dev/null +++ b/.changeset/real-bananas-learn.md @@ -0,0 +1,5 @@ +--- +"@medusajs/utils": patch +--- + +fix(utils): db migration big number default value diff --git a/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts b/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts index 1e45d094bb..c5d7e95926 100644 --- a/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts +++ b/packages/core/utils/src/dml/__tests__/entity-builder.spec.ts @@ -564,6 +564,7 @@ describe("Entity builder", () => { }, raw_spend_limit: { columnType: "jsonb", + default: '{"value":"500.4","precision":20}', getter: false, name: "raw_spend_limit", fieldName: "raw_spend_limit", @@ -710,6 +711,7 @@ describe("Entity builder", () => { }, raw_spend_limit: { columnType: "jsonb", + default: '{"value":"500.4","precision":20}', getter: false, name: "raw_spend_limit", fieldName: "raw_spend_limit", diff --git a/packages/core/utils/src/dml/helpers/entity-builder/create-big-number-properties.ts b/packages/core/utils/src/dml/helpers/entity-builder/create-big-number-properties.ts index 55c9de8466..074d2f36b9 100644 --- a/packages/core/utils/src/dml/helpers/entity-builder/create-big-number-properties.ts +++ b/packages/core/utils/src/dml/helpers/entity-builder/create-big-number-properties.ts @@ -1,4 +1,8 @@ import { DMLSchema } from "@medusajs/types" +import { isBigNumber } from "../../../common/is-big-number" +import { isDefined } from "../../../common/is-defined" +import { trimZeros } from "../../../common/trim-zeros" +import { BigNumber } from "../../../totals/big-number" import { BigNumberProperty } from "../../properties/big-number" import { JSONProperty } from "../../properties/json" import { NullableModifier } from "../../properties/nullable" @@ -41,9 +45,19 @@ export function createBigNumberProperties( continue } + let defaultValue = parsed.defaultValue + if (isDefined(defaultValue)) { + const bigNumber = isBigNumber(defaultValue) + ? (defaultValue as unknown as BigNumber) + : new BigNumber(defaultValue) + + bigNumber.raw!.value = trimZeros(bigNumber.raw!.value + "") + defaultValue = bigNumber.raw + } + let jsonProperty = parsed.nullable - ? new JSONProperty().nullable() - : new JSONProperty() + ? new JSONProperty().default(defaultValue).nullable() + : new JSONProperty().default(defaultValue) if (parsed.computed) { jsonProperty = jsonProperty.computed() as unknown as diff --git a/packages/core/utils/src/dml/properties/big-number.ts b/packages/core/utils/src/dml/properties/big-number.ts index 76ebe9aef2..ed951b154d 100644 --- a/packages/core/utils/src/dml/properties/big-number.ts +++ b/packages/core/utils/src/dml/properties/big-number.ts @@ -1,3 +1,4 @@ +import { BigNumber } from "../../totals/big-number" import { BaseProperty } from "./base" /** @@ -12,4 +13,9 @@ export class BigNumberProperty extends BaseProperty { static isBigNumberProperty(obj: any): obj is BigNumberProperty { return obj?.dataType?.name === "bigNumber" } + + default(value: number | string | BigNumber) { + super.default(value as number) + return this + } } diff --git a/packages/core/utils/src/migrations/integration-tests/__tests__/migrations-generate.spec.ts b/packages/core/utils/src/migrations/integration-tests/__tests__/migrations-generate.spec.ts index b0cef88f44..1f793b27e1 100644 --- a/packages/core/utils/src/migrations/integration-tests/__tests__/migrations-generate.spec.ts +++ b/packages/core/utils/src/migrations/integration-tests/__tests__/migrations-generate.spec.ts @@ -1,11 +1,12 @@ +import { MetadataStorage } from "@medusajs/deps/mikro-orm/core" import { join } from "path" import { setTimeout } from "timers/promises" -import { MetadataStorage } from "@medusajs/deps/mikro-orm/core" -import { Migrations } from "../../index" import { FileSystem } from "../../../common" import { DmlEntity, mikroORMEntityBuilder, model } from "../../../dml" import { defineMikroOrmCliConfig } from "../../../modules-sdk" +import { BigNumber } from "../../../totals/big-number" +import { Migrations } from "../../index" jest.setTimeout(30000) @@ -39,6 +40,20 @@ describe("Generate migrations", () => { id: model.id().primaryKey(), email: model.text().unique(), fullName: model.text().nullable(), + numericFieldNoDefault: model.number(), + numericField: model.number().default(0), + numericFieldNullable: model.number().default(1).nullable(), + bigNumberFieldNoDefault: model.bigNumber(), + bigNumberField: model + .bigNumber() + .default( + new BigNumber( + "892.87896454789798987789789789541354687681246874956165789639", + { precision: 50 } + ) + ), + bigNumberFieldNullable: model.bigNumber().default(3).nullable(), + bigNumberWithString: model.bigNumber().default("5789.6547899").nullable(), }) const config = defineMikroOrmCliConfig(moduleName, { @@ -54,8 +69,32 @@ describe("Generate migrations", () => { const results = await migrations.generate() expect(await fs.exists(results.fileName)) - expect(await fs.contents(results.fileName)).toMatch( - /create table if not exists "user"/ + const migrationFile = await fs.contents(results.fileName) + + expect(migrationFile).toMatch(/create table if not exists "user"/) + expect(migrationFile).toMatch(/"numericFieldNoDefault" integer not null/) + expect(migrationFile).toMatch(/"numericField" integer not null default 0/) + expect(migrationFile).toMatch( + /"numericFieldNullable" integer null default 1/ + ) + expect(migrationFile).toMatch( + /"bigNumberWithString" numeric null default '5789\.6547899'/ + ) + expect(migrationFile).toMatch( + /"bigNumberField" numeric not null default 892\.878964547898/ + ) + expect(migrationFile).toMatch( + /"bigNumberFieldNullable" numeric null default 3/ + ) + expect(migrationFile).toMatch(/"bigNumberFieldNoDefault" numeric not null/) + expect(migrationFile).toMatch( + /"raw_bigNumberField" jsonb not null default '{"value":"892\.87896454789798987789789789541354687681246874956","precision":50}'/ + ) + expect(migrationFile).toMatch( + /"raw_bigNumberFieldNullable" jsonb null default '{"value":"3","precision":20}'/ + ) + expect(migrationFile).toMatch( + /"raw_bigNumberWithString" jsonb null default '{"value":"5789\.6547899","precision":20}'/ ) })