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