Allow setting multiple many-to-many relationships

This commit is contained in:
Adria Navarro 2024-11-05 11:24:23 +01:00
parent af2da7c6d8
commit 94d3466113
2 changed files with 14 additions and 17 deletions

View File

@ -65,7 +65,7 @@
let tableOptions
let errorChecker = new RelationshipErrorChecker(
invalidThroughTable,
relationshipExists
manyToManyRelationshipExistsFn
)
let errors = {}
let fromPrimary, fromForeign, fromColumn, toColumn
@ -125,7 +125,7 @@
}
return false
}
function relationshipExists() {
function manyToManyRelationshipExistsFn() {
if (
originalFromTable &&
originalToTable &&
@ -141,16 +141,14 @@
datasource.entities[getTable(toId).name].schema
).filter(value => value.through)
const matchAgainstUserInput = (fromTableId, toTableId) =>
(fromTableId === fromId && toTableId === toId) ||
(fromTableId === toId && toTableId === fromId)
const matchAgainstUserInput = link =>
(link.throughTo === throughToKey &&
link.throughFrom === throughFromKey) ||
(link.throughTo === throughFromKey && link.throughFrom === throughToKey)
return !!fromThroughLinks.find(from =>
toThroughLinks.find(
to =>
from.through === to.through &&
matchAgainstUserInput(from.tableId, to.tableId)
)
const allLinks = [...fromThroughLinks, ...toThroughLinks]
return !!allLinks.find(
link => link.through === throughId && matchAgainstUserInput(link)
)
}
@ -181,16 +179,15 @@
relationshipType: errorChecker.relationshipTypeSet(relationshipType),
fromTable:
errorChecker.tableSet(fromTable) ||
errorChecker.doesRelationshipExists() ||
errorChecker.differentTables(fromId, toId, throughId),
toTable:
errorChecker.tableSet(toTable) ||
errorChecker.doesRelationshipExists() ||
errorChecker.differentTables(toId, fromId, throughId),
throughTable:
errorChecker.throughTableSet(throughTable) ||
errorChecker.throughIsNullable() ||
errorChecker.differentTables(throughId, fromId, toId),
errorChecker.differentTables(throughId, fromId, toId) ||
errorChecker.doesRelationshipExists(),
throughFromKey:
errorChecker.manyForeignKeySet(throughFromKey) ||
errorChecker.manyTypeMismatch(

View File

@ -30,9 +30,9 @@ function typeMismatchCheck(fromTable, toTable, primary, foreign) {
}
export class RelationshipErrorChecker {
constructor(invalidThroughTableFn, relationshipExistsFn) {
constructor(invalidThroughTableFn, manyToManyRelationshipExistsFn) {
this.invalidThroughTable = invalidThroughTableFn
this.relationshipExists = relationshipExistsFn
this.manyToManyRelationshipExists = manyToManyRelationshipExistsFn
}
setType(type) {
@ -72,7 +72,7 @@ export class RelationshipErrorChecker {
}
doesRelationshipExists() {
return this.isMany() && this.relationshipExists()
return this.isMany() && this.manyToManyRelationshipExists()
? relationshipAlreadyExists
: null
}