@defra/wls-refdata-extract-processor
Version:
Interface to Microsoft Dynamics. Extract processor for reference data.
161 lines (136 loc) • 4.85 kB
JavaScript
import { models } from '@defra/wls-database-model'
import pkg from 'sequelize'
const { Sequelize } = pkg
const Op = Sequelize.Op
const generalUpsert = async (model, id, json) => {
await model.upsert({ id, json }) // Possible sequelize bug: created not working with upsert
return { update: 1 }
}
export const writeApplicationTypes = async obj => {
const { data, keys } = obj
const v = Object.values(data)[0]
return generalUpsert(models.applicationTypes, keys[0].powerAppsKey, {
name: v?.name,
description: v?.description,
refNoSuffix: v?.refNoSuffix
})
}
export const writeApplicationPurposes = async obj => {
const { data, keys } = obj
const v = Object.values(data)[0]
return generalUpsert(models.applicationPurposes, keys[0].powerAppsKey, {
name: v?.name,
description: v?.description
})
}
export const writeOptionSets = async obj => {
const { name, values } = obj
await models.optionSets.upsert({ name, json: values })
return { update: 1 }
}
export const writeActivities = async obj => {
const { data, keys } = obj
const v = Object.values(data)[0]
return generalUpsert(models.activities, keys[0].powerAppsKey, {
name: v?.name
})
}
export const writeMethods = async obj => {
const { data, keys } = obj
const v = Object.values(data)[0]
return generalUpsert(models.methods, keys[0].powerAppsKey, {
name: v?.name
})
}
export const writeSpecies = async obj => {
const { data, keys } = obj
const id = keys.find(k => k.apiTable === 'species').powerAppsKey
const speciesSubjectId = keys.find(k => k.apiTable === 'speciesSubject')?.powerAppsKey
await models.species.upsert({ id, species_subject_id: speciesSubjectId, json: Object.values(data)[0] })
return { update: 1 }
}
export const writeSpeciesSubject = async obj => {
const { data, keys } = obj
const v = Object.values(data)[0]
return generalUpsert(models.speciesSubject, keys[0].powerAppsKey, {
name: v?.name
})
}
export const writeActivityMethods = async ({ keys }) => {
const activityId = keys.find(k => k.apiTable === 'activities').powerAppsKey
const methodIds = keys.filter(k => k.apiTable === 'methods').map(k => k.powerAppsKey)
const activity = await models.activities.findOne({
where: { id: activityId }
})
const methods = await models.methods.findAll({
where: {
id: {
[Op.in]: methodIds
}
}
})
await activity.setMethods(methods)
return { update: await activity.countMethods() }
}
export const writeApplicationTypeActivities = async ({ keys }) => {
const applicationTypeId = keys.find(k => k.apiTable === 'applicationTypes').powerAppsKey
const activityIds = keys.filter(k => k.apiTable === 'activities').map(k => k.powerAppsKey)
const applicationType = await models.applicationTypes.findOne({
where: { id: applicationTypeId }
})
const activities = await models.activities.findAll({
where: {
id: {
[Op.in]: activityIds
}
}
})
await applicationType.setActivities(activities)
return { update: await applicationType.countActivities() }
}
export const writeApplicationTypeSpecies = async ({ keys }) => {
const applicationTypeId = keys.find(k => k.apiTable === 'applicationTypes').powerAppsKey
const speciesIds = keys.filter(k => k.apiTable === 'species').map(k => k.powerAppsKey)
const applicationType = await models.applicationTypes.findOne({
where: { id: applicationTypeId }
})
const species = await models.species.findAll({
where: {
id: {
[Op.in]: speciesIds
}
}
})
await applicationType.setSpecies(species)
return { update: await applicationType.countSpecies() }
}
export const writeAuthorities = async ({ data, keys }) => {
const id = keys.find(k => k.apiTable === 'authorities').powerAppsKey
await models.authorities.upsert({ id, json: Object.values(data)[0] })
return { update: 1 }
}
export const writeDesignatedSites = async ({ data, keys }) => {
const v = Object.values(data)[0]
return generalUpsert(models.designatedSites, keys[0].powerAppsKey, {
siteName: v?.siteName,
siteCode: v?.siteCode,
siteGridReference: v?.siteGridReference,
siteType: v?.siteType
})
}
export const writeApplicationApplicationPurpose = async ({ keys }) => {
const applicationTypeId = keys.find(k => k.apiTable === 'applicationTypes').powerAppsKey
const purposeIds = keys.filter(k => k.apiTable === 'applicationPurposes').map(k => k.powerAppsKey)
const applicationType = await models.applicationTypes.findOne({
where: { id: applicationTypeId }
})
const purposes = await models.applicationPurposes.findAll({
where: {
id: {
[Op.in]: purposeIds
}
}
})
await applicationType['setApplication-purposes'](purposes)
return { update: await applicationType['countApplication-purposes']() }
}