53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import {
|
|
queryAllAccSyncItemsFactory,
|
|
upsertAccSyncItemFactory
|
|
} from '@/modules/acc/repositories/accSyncItems'
|
|
import { onVersionAddedFactory } from '@/modules/acc/services/webhooks'
|
|
import { sessionMiddlewareFactory } from '@/modules/auth/middleware'
|
|
import { logger } from '@/observability/logging'
|
|
import type { Express } from 'express'
|
|
import { z } from 'zod'
|
|
import { db } from '@/db/knex'
|
|
|
|
export const setupAccWebhookEndpoints = (app: Express) => {
|
|
const sessionMiddleware = sessionMiddlewareFactory()
|
|
app.post('/api/v1/acc/webhook/callback', sessionMiddleware, async (req, res) => {
|
|
logger.info({ hook: req.body?.hook, payload: req.body?.payload })
|
|
switch (req.body?.hook.event) {
|
|
case 'dm.version.added': {
|
|
// https://aps.autodesk.com/en/docs/webhooks/v1/reference/events/data_management_events/dm.version.added/
|
|
const payload = z
|
|
.object({
|
|
lineageUrn: z.string(),
|
|
version: z.string().transform((value) => Number.parseInt(value)),
|
|
source: z.string()
|
|
})
|
|
.parse(req.body?.payload)
|
|
|
|
const onVersionAdded = onVersionAddedFactory({
|
|
queryAllAccSyncItems: queryAllAccSyncItemsFactory({ db }),
|
|
upsertAccSyncItem: upsertAccSyncItemFactory({ db })
|
|
})
|
|
|
|
await onVersionAdded({
|
|
fileLineageUrn: payload.lineageUrn,
|
|
fileVersionUrn: payload.source,
|
|
fileVersionIndex: payload.version
|
|
})
|
|
|
|
break
|
|
}
|
|
default: {
|
|
logger.error(
|
|
{ event: req.body?.hook.event },
|
|
'Failed to handle unknown ACC webhook event {event}'
|
|
)
|
|
res.status(500).send()
|
|
return
|
|
}
|
|
}
|
|
|
|
res.status(200).send()
|
|
})
|
|
}
|