Skip to content
Open
Changes from 2 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
fdaeb2e
records import: add missing nodes
SteRiccio Feb 15, 2026
84b5729
code cleanup
SteRiccio Feb 15, 2026
7dd4f18
code cleanup
SteRiccio Feb 15, 2026
4be526f
code cleanup
SteRiccio Feb 16, 2026
7223f75
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Feb 18, 2026
98b3dd7
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Feb 20, 2026
e0f22aa
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Feb 26, 2026
a30e2f2
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Feb 27, 2026
97b1a74
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Feb 28, 2026
9ffbd3b
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 1, 2026
dc10a59
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 3, 2026
888232a
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 3, 2026
8320273
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 4, 2026
d5bcb40
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 4, 2026
ed23305
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 6, 2026
58ffe06
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 6, 2026
3bbdfed
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 6, 2026
b836307
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 7, 2026
15dff03
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 7, 2026
2dfef0d
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 10, 2026
733f889
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 10, 2026
ee742de
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 10, 2026
a50dce8
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 11, 2026
f4a22ec
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 11, 2026
4f279af
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 11, 2026
363a527
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 11, 2026
2a6c878
added records check job after records import (WIP)
SteRiccio Mar 12, 2026
51ad730
code cleanup
SteRiccio Mar 12, 2026
87d276c
updated version number
SteRiccio Mar 12, 2026
9b4f2f4
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 12, 2026
9dea4ad
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 13, 2026
785913c
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 14, 2026
f5aea5f
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 14, 2026
36fb71f
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 16, 2026
eb197fc
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 17, 2026
7a60bcd
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 18, 2026
e140886
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 19, 2026
97fed6c
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 19, 2026
bb098fa
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 20, 2026
db29a90
Merge branch 'master' into fix/records-import-add-missing-nodes
mergify[bot] Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Dates, Objects, Records, Surveys } from '@openforis/arena-core'
import { Dates, Objects, RecordFixer, Records, Surveys } from '@openforis/arena-core'

import { ConflictResolutionStrategy } from '@common/dataImport'

Expand All @@ -25,27 +25,6 @@ const resultKeys = {
const categoryItemProvider = CategoryItemProviderDefault
const taxonProvider = TaxonProviderDefault

const checkNodeIsValid = ({ nodes, node, nodeDef }) => {
if (!nodeDef) {
return { valid: false, error: 'refers a missing node definition' }
}
const parentUuid = Node.getParentUuid(node)
if ((!parentUuid && !NodeDef.isRoot(nodeDef)) || (parentUuid && !nodes[parentUuid])) {
return { valid: false, error: `has missing or invalid parent_uuid` }
}
if (NodeDef.isMultipleAttribute(nodeDef) && Node.isValueBlank(node)) {
return { valid: false, error: `is multiple and has an empty value` }
}
const nodeHierarchy = Node.getHierarchy(node)
if (
nodeHierarchy.length !== NodeDef.getMetaHierarchy(nodeDef)?.length ||
nodeHierarchy.some((ancestorUuid) => !nodes[ancestorUuid])
) {
return { valid: false, error: `has an invalid meta hierarchy` }
}
return { valid: true }
}

const getRecordFormattedKeyValues = ({ survey, record }) => {
const rootDef = Surveys.getNodeDefRoot({ survey })
const recordRootEntity = Records.getRoot(record)
Expand Down Expand Up @@ -117,18 +96,20 @@ export default class RecordsImportJob extends DataImportBaseJob {
trackFileUuids({ nodes }) {
// keep track of file uuids found in record attribute values
const { survey } = this.context
Object.values(nodes).forEach((node) => {
for (const node of Object.values(nodes)) {
const nodeDef = Survey.getNodeDefByUuid(Node.getNodeDefUuid(node))(survey)
if (NodeDef.isFile(nodeDef)) {
this.trackFileUuid({ node })
}
})
}
}

async cleanupCurrentRecord() {
const { context, currentRecord: record, user, tx } = this
const { survey } = context

const sideEffect = true // do side effect to avoid creating new objects and use less memory

const recordUuid = Record.getUuid(record)
Comment thread
SteRiccio marked this conversation as resolved.
Outdated
// check owner uuid: if user not defined, use the job user as owner
const ownerUuidSource = Record.getOwnerUuid(record)
Expand All @@ -137,25 +118,9 @@ export default class RecordsImportJob extends DataImportBaseJob {

// remove invalid nodes and build index from scratch
delete record['_nodesIndex']
const nodes = Record.getNodes(record)

for (const [nodeUuid, node] of Object.entries(nodes)) {
const nodeDefUuid = Node.getNodeDefUuid(node)
const nodeDef = Survey.getNodeDefByUuid(nodeDefUuid)(survey)
const { valid, error } = checkNodeIsValid({ nodes, node, nodeDef })
if (valid) {
// ensure recordUuid is set in node
node[Node.keys.recordUuid] = recordUuid
Node.removeFlags({ sideEffect: true })(node)
} else {
const messagePrefix = `record ${Record.getUuid(record)}: node with uuid ${Node.getUuid(node)} and node def ${NodeDef.getName(nodeDef)} (uuid ${nodeDefUuid})`
const messageSuffix = `: skipping it`
this.logWarn(`${messagePrefix} ${error} ${messageSuffix}`)
delete nodes[nodeUuid]
}
}
// assoc nodes and build index from scratch
this.currentRecord = Record.assocNodes({ nodes, sideEffect: true })(record)

// fix record (e.g. insert missing nodes, remove status flags)
RecordFixer.fixRecord({ survey, record: this.currentRecord, sideEffect })
Comment thread
SteRiccio marked this conversation as resolved.
Outdated
Comment thread
SteRiccio marked this conversation as resolved.
Outdated
}

findExistingRecordSummaryWithSameKeys() {
Expand Down
Loading