Skip to content

Commit

Permalink
ROCKS-38 Filter item.data fields inside migrate:transform hook
Browse files Browse the repository at this point in the history
  • Loading branch information
patschilf committed Oct 11, 2024
1 parent 3b9c635 commit 87f9a1b
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 8 deletions.
5 changes: 1 addition & 4 deletions app/layers/mongo/server/plugins/migrate/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@ export default defineNitroPlugin((nitro) => {
}

async function doUpdate(item: Document<any, {}, MigrationItem> & MigrationItem) {
const { fetch, fields } = options
const originalData = item.data
item.set(`data`, Object.fromEntries(Object.entries(item.data).filter(([key]) => fields?.includes(key) ?? true)))
const { fetch } = options
const bodies = await nitro.hooks.callHookParallel(`migrate:import:item:transform`, item, options)
const body = Object.fromEntries(Object.entries(bodies.reduce((acc, body) => ({ ...acc, ...body }), {})))
item.set(`data`, originalData)
return await fetch<EntityJSON>(item.entityURI!, { method: `PATCH`, body })
}

Expand Down
9 changes: 5 additions & 4 deletions app/layers/mongo/server/utils/migrate.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type Entity, MigrationItemStatus } from "@unb-libraries/nuxt-layer-entity"
import type { MigrateHandler } from "../../types"
import { type Migration } from "../documentTypes/Migration"
import { type MigrationItem } from "../documentTypes/MigrationItem"
import type { Migration } from "../documentTypes/Migration"
import type { MigrationItem } from "../documentTypes/MigrationItem"

enum MigrationLookupErrorReason {
UNAVAILABLE = 1,
Expand Down Expand Up @@ -121,9 +121,10 @@ export function useMigrationLookup(migration: Migration, sourceID: string): Prom
export function defineMigrateHandler<T, E extends Entity = Entity>(entityType: string, handler: (data: T, item: MigrationItem) => E | null | Promise<E | null>): MigrateHandler {
return defineNitroPlugin((nitro) => {
// REFACTOR: This shall use an EntitJSON<MigrationItem>
nitro.hooks.hook(`migrate:import:item:transform`, async (item) => {
nitro.hooks.hook(`migrate:import:item:transform`, async (item, { fields }) => {
if (item.migration.entityType === entityType) {
return await handler(item.data, item)
const data = Object.fromEntries(Object.entries(item.data).filter(([key]) => fields?.includes(key) ?? true)) as T
return await handler(data, item)
}
return {}
})
Expand Down

0 comments on commit 87f9a1b

Please sign in to comment.