@deconz-community/directus-extension-ddf-store
Version:
Extension for Directus to store DDF files in the database, used only by the Deconz Community
37 lines (25 loc) • 1.35 kB
text/typescript
import type { Accountability } from '@directus/types'
import type { Collections } from '../../client'
import type { GlobalContext } from '../types'
import { ForbiddenError, InvalidQueryError } from '@directus/errors'
import { asyncHandler } from '../utils'
export function generateUUIDEndpoint(globalContext: GlobalContext) {
const { router, context, services, schema } = globalContext
router.get('/generateUUID', asyncHandler(async (req, res, _next) => {
const accountability = 'accountability' in req ? req.accountability as Accountability : null
if (typeof accountability?.user !== 'string')
throw new ForbiddenError()
const adminAccountability = structuredClone({
...accountability,
admin: true,
})
const serviceOptions = { schema, knex: context.database, accountability: adminAccountability }
const uuidCount = Number(req.query.count ?? 1)
if (uuidCount > 100)
throw new InvalidQueryError({ reason: 'You can only generate 100 UUIDs at a time' })
const UUIDService = new services.ItemsService<Collections.DdfUuids>('ddf_uuids', serviceOptions)
const expire_at = new Date(Date.now() + 1000 * 60 * 60 * 24 * 7 * 3) // 3 weeks
const uuid = await UUIDService.createMany(Array.from({ length: uuidCount }, () => ({ expire_at })))
res.json({ expire_at, uuid })
}))
}