Skip to content

Commit

Permalink
Update sync logic and error handling for viewer layers
Browse files Browse the repository at this point in the history
  • Loading branch information
sjoerdbeentjes committed Aug 1, 2024
1 parent f84cacc commit 3cfc367
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 35 deletions.
98 changes: 69 additions & 29 deletions src/api/sync-viewer-layer-background.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ import { findGeonetworkInstances } from '../lib/find-geonetwork-instances'
import { fetchViewerLayerXML } from '../lib/fetch-viewer-layer-xml'
import { formatMenusRecursive } from '../lib/format-menu'
import Mailjet from 'node-mailjet'
import fs from 'fs';

const mailjet = new Mailjet({
apiKey: process.env.MAILJET_API_TOKEN,
apiSecret: process.env.MAILJET_API_SECRET,
})

const viewersWithLayersQuery = /* graphql */ `
query viewersWithLayers ($first: IntType, $skip: IntType = 0, $locale: SiteLocale = nl) {
const viewersWithViewerLayersQuery = /* graphql */ `
query viewersWithViewerLayersQuery ($first: IntType, $skip: IntType = 0, $locale: SiteLocale = nl) {
menus: allMenus(first: $first, skip: $skip, locale: $locale) {
id
geonetwork {
Expand Down Expand Up @@ -57,46 +58,87 @@ export const handler = withServerDefaults(async (event, _) => {
}
}

const layerData = JSON.parse(event.body)
const data = JSON.parse(event.body)

const viewerLayerId = layerData.entity.id
const id = data.entity.id

const { menus } = await datocmsRequest({
query: viewersWithLayersQuery,
query: viewersWithViewerLayersQuery,
preview: true
})
const formattedMenus = formatMenusRecursive(menus)
const menuTree = buildMenuTree(formattedMenus)

try {
await syncViewerLayers(menuTree, layerData.event_type, viewerLayerId)
const type = data.related_entities.find(entity => entity.type === 'item_type').attributes.api_key

if (type === 'viewer_layer') {
await syncViewerLayers(menuTree, data.event_type, id)
} else if (type === 'menu') {
await syncViewer(menuTree, data.event_type, id)
}
}
catch (e) {
console.log('The following error occured', e.message)

// for (let email of findEmailContactsForLayerId(menuTree, layerId)) {
// console.log('Sending email to', email)

// await mailjet.post('send', { version: 'v3.1' }).request({
// Messages: [
// {
// From: {
// Email: process.env.MAILJET_FROM_EMAIL,
// },
// To: [
// {
// Email: email,
// },
// ],
// Subject: `Fout bij opslaan metadata voor laag ${layerId}`,
// HTMLPart: e.message,
// },
// ],
// })
// }
}
for (let email of findEmailContactsForLayerId(menuTree, layerId)) {
console.log('Sending email to', email)

await mailjet.post('send', { version: 'v3.1' }).request({
Messages: [
{
From: {
Email: process.env.MAILJET_FROM_EMAIL,
},
To: [
{
Email: email,
},
],
Subject: `Fout bij opslaan metadata voor laag ${layerId}`,
HTMLPart: e.message,
},
],
})
}
}
})

async function syncViewer(menuTree, eventType, viewerId) {
const viewerLayers = new Set()

const findChilrenInMenu = (menu, viewerId) => {
const { children } = menu

if (children) {
children.forEach((child) => {
if (child.id === viewerId && child.children) {
child.children.forEach((viewerLayer) => {
viewerLayers.add(viewerLayer.id)
})
}

findChilrenInMenu(child, viewerId)
})
}
}

menuTree.forEach((viewer) => {
findChilrenInMenu(viewer, viewerId)
})

const viewerLayersArray = Array.from(viewerLayers)


const requestsPromises = viewerLayersArray.map(
async (viewerLayerId) => {
await syncViewerLayers(menuTree, eventType, viewerLayerId)
}
)

const results = await Promise.allSettled(requestsPromises)
}

async function syncViewerLayers(menuTree, eventType, viewerLayerId) {
const geonetworkInstances = findGeonetworkInstances(menuTree, viewerLayerId)

Expand Down Expand Up @@ -155,8 +197,6 @@ async function syncViewerLayers(menuTree, eventType, viewerLayerId) {
variables: { id: viewerLayerId },
})

console.log('viewerLayer', viewerLayer)

await addThumbnailsToRecord(viewerLayer?.layer?.thumbnails, viewerLayerId, geonetwork)
}
}
Expand Down
2 changes: 0 additions & 2 deletions src/lib/fetch-layer-xml.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,6 @@ export async function fetchLayerXML({ id }) {
...viewerLayer
} } = await datocmsRequest({ query, variables: { id } })

console.log(layer)

const data = {
layer: {
...layer,
Expand Down
2 changes: 0 additions & 2 deletions src/lib/fetch-viewer-layer-xml.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,6 @@ export async function fetchViewerLayerXML({ id }) {
...viewerLayer
} } = await datocmsRequest({ query, variables: { id } })

console.log(layer)

const data = {
layer: {
...layer,
Expand Down
6 changes: 4 additions & 2 deletions src/lib/find-geonetwork-instances.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
export function findGeonetworkInstances(menuTree, layerId) {
export function findGeonetworkInstances(menuTree, id) {
const geonetworkInstances = new Map()

console.log('searching for geonetwork instances with id', id)

menuTree.forEach((viewer) => {
const findInMenu = (menu) => {
const { children } = menu

if (children) {
children.forEach((child) => {
if (child.id === layerId) {
if (child.id === id) {
const { geonetwork } = viewer

if (geonetwork) {
Expand Down

0 comments on commit 3cfc367

Please sign in to comment.