fix(utils): DML one to one definition (#10415)
RESOLVES FRMW-2819 **What** Fix one to one definition.
This commit is contained in:
committed by
GitHub
parent
70d77ea22f
commit
b160fd3cbf
5
.changeset/green-turkeys-fetch.md
Normal file
5
.changeset/green-turkeys-fetch.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@medusajs/utils": patch
|
||||
---
|
||||
|
||||
fix(utils): DML one to one definition
|
||||
@@ -2690,6 +2690,7 @@ describe("Entity builder", () => {
|
||||
nullable: false,
|
||||
mappedBy: "user",
|
||||
cascade: ["persist", "soft-remove"],
|
||||
onDelete: "cascade",
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -2853,6 +2854,7 @@ describe("Entity builder", () => {
|
||||
nullable: false,
|
||||
mappedBy: "user",
|
||||
cascade: ["persist", "soft-remove"],
|
||||
onDelete: "cascade",
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -2918,22 +2920,24 @@ describe("Entity builder", () => {
|
||||
},
|
||||
user: {
|
||||
entity: "User",
|
||||
fieldName: "user_id",
|
||||
mappedBy: "email",
|
||||
name: "user",
|
||||
nullable: false,
|
||||
onDelete: "cascade",
|
||||
owner: true,
|
||||
reference: "1:1",
|
||||
cascade: ["persist", "soft-remove"],
|
||||
},
|
||||
user_id: {
|
||||
columnType: "text",
|
||||
getter: false,
|
||||
persist: false,
|
||||
name: "user_id",
|
||||
nullable: false,
|
||||
reference: "scalar",
|
||||
setter: false,
|
||||
type: "string",
|
||||
persist: false,
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -3612,6 +3616,8 @@ describe("Entity builder", () => {
|
||||
onDelete: "cascade",
|
||||
owner: true,
|
||||
reference: "1:1",
|
||||
cascade: ["persist", "soft-remove"],
|
||||
fieldName: "user_id",
|
||||
},
|
||||
user_id: {
|
||||
columnType: "text",
|
||||
@@ -4551,21 +4557,23 @@ describe("Entity builder", () => {
|
||||
},
|
||||
user: {
|
||||
name: "user",
|
||||
fieldName: "user_id",
|
||||
reference: "1:1",
|
||||
entity: "User",
|
||||
nullable: false,
|
||||
mappedBy: "email",
|
||||
onDelete: undefined,
|
||||
owner: true,
|
||||
},
|
||||
user_id: {
|
||||
reference: "scalar",
|
||||
persist: false,
|
||||
type: "string",
|
||||
columnType: "text",
|
||||
nullable: false,
|
||||
name: "user_id",
|
||||
getter: false,
|
||||
setter: false,
|
||||
persist: false,
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -4747,21 +4755,23 @@ describe("Entity builder", () => {
|
||||
},
|
||||
user: {
|
||||
name: "user",
|
||||
fieldName: "user_id",
|
||||
reference: "1:1",
|
||||
entity: "User",
|
||||
nullable: true,
|
||||
onDelete: undefined,
|
||||
mappedBy: "email",
|
||||
owner: true,
|
||||
},
|
||||
user_id: {
|
||||
reference: "scalar",
|
||||
persist: false,
|
||||
type: "string",
|
||||
columnType: "text",
|
||||
nullable: true,
|
||||
name: "user_id",
|
||||
getter: false,
|
||||
setter: false,
|
||||
persist: false,
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -5379,21 +5389,23 @@ describe("Entity builder", () => {
|
||||
},
|
||||
user: {
|
||||
name: "user",
|
||||
fieldName: "user_id",
|
||||
reference: "1:1",
|
||||
entity: "User",
|
||||
nullable: false,
|
||||
mappedBy: "email",
|
||||
onDelete: undefined,
|
||||
owner: true,
|
||||
},
|
||||
user_id: {
|
||||
reference: "scalar",
|
||||
type: "string",
|
||||
persist: false,
|
||||
columnType: "text",
|
||||
nullable: false,
|
||||
name: "user_id",
|
||||
getter: false,
|
||||
setter: false,
|
||||
persist: false,
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -5577,21 +5589,23 @@ describe("Entity builder", () => {
|
||||
},
|
||||
user: {
|
||||
name: "user",
|
||||
fieldName: "user_id",
|
||||
reference: "1:1",
|
||||
entity: "User",
|
||||
nullable: false,
|
||||
mappedBy: "email",
|
||||
onDelete: undefined,
|
||||
owner: true,
|
||||
},
|
||||
user_id: {
|
||||
reference: "scalar",
|
||||
persist: false,
|
||||
type: "string",
|
||||
columnType: "text",
|
||||
nullable: false,
|
||||
name: "user_id",
|
||||
getter: false,
|
||||
setter: false,
|
||||
persist: false,
|
||||
},
|
||||
created_at: {
|
||||
reference: "scalar",
|
||||
@@ -5796,6 +5810,7 @@ describe("Entity builder", () => {
|
||||
},
|
||||
parent: {
|
||||
name: "parent",
|
||||
fieldName: "parent_id",
|
||||
mappedBy: "child",
|
||||
reference: "1:1",
|
||||
entity: "User",
|
||||
@@ -5807,8 +5822,8 @@ describe("Entity builder", () => {
|
||||
name: "parent_id",
|
||||
type: "string",
|
||||
columnType: "text",
|
||||
persist: false,
|
||||
reference: "scalar",
|
||||
persist: false,
|
||||
getter: false,
|
||||
setter: false,
|
||||
nullable: false,
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
} from "@medusajs/types"
|
||||
import {
|
||||
BeforeCreate,
|
||||
Cascade,
|
||||
ManyToMany,
|
||||
ManyToOne,
|
||||
OneToMany,
|
||||
@@ -147,14 +148,18 @@ export function defineHasOneRelationship(
|
||||
mappedBy = relationship.mappedBy
|
||||
}
|
||||
|
||||
OneToOne({
|
||||
const oneToOneOptions = {
|
||||
entity: relatedModelName,
|
||||
nullable: relationship.nullable,
|
||||
...(mappedBy ? { mappedBy } : {}),
|
||||
cascade: shouldRemoveRelated
|
||||
? (["persist", "soft-remove"] as any)
|
||||
: undefined,
|
||||
} as OneToOneOptions<any, any>)(MikroORMEntity.prototype, relationship.name)
|
||||
onDelete: shouldRemoveRelated ? "cascade" : undefined,
|
||||
} as OneToOneOptions<any, any>
|
||||
|
||||
if (shouldRemoveRelated) {
|
||||
oneToOneOptions.cascade = ["persist", "soft-remove"] as any
|
||||
}
|
||||
|
||||
OneToOne(oneToOneOptions)(MikroORMEntity.prototype, relationship.name)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -368,14 +373,6 @@ export function defineBelongsToRelationship(
|
||||
) {
|
||||
const foreignKeyName = camelToSnakeCase(`${relationship.name}Id`)
|
||||
|
||||
OneToOne({
|
||||
entity: relatedModelName,
|
||||
nullable: relationship.nullable,
|
||||
mappedBy: mappedBy,
|
||||
owner: true,
|
||||
onDelete: shouldCascade ? "cascade" : undefined,
|
||||
})(MikroORMEntity.prototype, relationship.name)
|
||||
|
||||
Object.defineProperty(MikroORMEntity.prototype, foreignKeyName, {
|
||||
value: null,
|
||||
configurable: true,
|
||||
@@ -384,12 +381,27 @@ export function defineBelongsToRelationship(
|
||||
})
|
||||
|
||||
Property({
|
||||
type: "string",
|
||||
columnType: "text",
|
||||
type: "string",
|
||||
nullable: relationship.nullable,
|
||||
persist: false,
|
||||
})(MikroORMEntity.prototype, foreignKeyName)
|
||||
|
||||
const oneToOneOptions: Parameters<typeof OneToOne>[0] = {
|
||||
entity: relatedModelName,
|
||||
nullable: relationship.nullable,
|
||||
mappedBy: mappedBy,
|
||||
fieldName: foreignKeyName,
|
||||
owner: true,
|
||||
onDelete: shouldCascade ? "cascade" : undefined,
|
||||
}
|
||||
|
||||
if (shouldCascade) {
|
||||
oneToOneOptions.cascade = [Cascade.PERSIST, "soft-remove"] as any
|
||||
}
|
||||
|
||||
OneToOne(oneToOneOptions)(MikroORMEntity.prototype, relationship.name)
|
||||
|
||||
const { tableName } = parseEntityName(entity)
|
||||
applyEntityIndexes(MikroORMEntity, tableName, [
|
||||
{
|
||||
|
||||
@@ -32,7 +32,7 @@ describe("hasOne - belongTo", () => {
|
||||
const team = model.define("team", {
|
||||
id: model.id().primaryKey(),
|
||||
name: model.text(),
|
||||
user: model.belongsTo(() => user, { mappedBy: "team" }),
|
||||
user: model.belongsTo(() => user, { mappedBy: "team" }).nullable(),
|
||||
})
|
||||
|
||||
const user = model.define("user", {
|
||||
|
||||
Reference in New Issue
Block a user