@fjell/express-router 4.4.4 → 4.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commit.sh +8 -0
- package/dist/CItemRouter.cjs +10 -15
- package/dist/CItemRouter.cjs.map +1 -1
- package/dist/CItemRouter.d.ts +1 -1
- package/dist/CItemRouter.js +10 -15
- package/dist/CItemRouter.js.map +1 -1
- package/dist/ItemRouter.cjs +61 -61
- package/dist/ItemRouter.cjs.map +1 -1
- package/dist/ItemRouter.d.ts +6 -6
- package/dist/ItemRouter.js +61 -61
- package/dist/ItemRouter.js.map +1 -1
- package/dist/PItemRouter.cjs +10 -15
- package/dist/PItemRouter.cjs.map +1 -1
- package/dist/PItemRouter.d.ts +1 -1
- package/dist/PItemRouter.js +10 -15
- package/dist/PItemRouter.js.map +1 -1
- package/dist/index.cjs +81 -89
- package/dist/index.cjs.map +1 -1
- package/dist/util/general.d.ts +4 -0
- package/package.json +11 -11
- package/pnpm-workspace.yaml.bak +4 -0
- package/release.sh +89 -0
- package/src/CItemRouter.ts +12 -14
- package/src/ItemRouter.ts +64 -53
- package/src/PItemRouter.ts +11 -12
- package/src/util/general.ts +65 -0
package/dist/ItemRouter.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemRouter.cjs","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n ItemProperties,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { NotFoundError, Operations } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n private logger;\n\n constructor(\n lib: Operations<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postAllAction = async (req: Request, res: Response) => {\n this.logger.default('Posting All Action', { query: req?.query, params: req?.params, locals: res?.locals });\n const allActionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.allActions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const allAction = this.lib.allActions[allActionKey];\n if (!allAction) {\n this.logger.error('All Action is not configured', { allActionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await this.lib.allAction(allActionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in All Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getAllFacet = async (req: Request, res: Response) => {\n this.logger.default('Getting All Facet', { query: req?.query, params: req?.params, locals: res?.locals });\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.allFacets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = this.lib.allFacets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await this.lib.allFacet(facetKey, combinedQueryParams));\n } catch (err: any) {\n this.logger.error('Error in All Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected postItemAction = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.actions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const action = this.lib.actions[actionKey];\n if (!action) {\n this.logger.error('Item Action is not configured', { actionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await this.lib.action(ik, actionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in Item Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getItemFacet = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!this.lib.facets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = this.lib.facets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await this.lib.facet(ik, facetKey, combinedQueryParams));\n } catch (err: any) {\n this.logger.error('Error in Item Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n private configure = (router: Router) => {\n this.logger.default('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n this.logger.debug('All Actions supplied to Router', { allActions: this.lib.allActions });\n if (this.lib.allActions) {\n Object.keys(this.lib.allActions).forEach((actionKey) => {\n this.logger.default('Configuring All Action', { actionKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.post(`/${actionKey}`, this.postAllAction);\n });\n }\n\n this.logger.debug('All Facets supplied to Router', { allFacets: this.lib.allFacets });\n if (this.lib.allFacets) {\n Object.keys(this.lib.allFacets).forEach((facetKey) => {\n this.logger.default('Configuring All Facet', { facetKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.get(`/${facetKey}`, this.getAllFacet);\n });\n }\n\n const itemRouter = Router();\n itemRouter.get('/', this.getItem);\n itemRouter.put('/', this.updateItem);\n itemRouter.delete('/', this.deleteItem);\n\n this.logger.debug('Item Actions supplied to Router', { itemActions: this.lib.actions });\n if (this.lib.actions) {\n Object.keys(this.lib.actions).forEach((actionKey) => {\n this.logger.default('Configuring Item Action', { actionKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.post(`/${actionKey}`, this.postItemAction)\n });\n }\n\n this.logger.debug('Item Facets supplied to Router', { itemFacets: this.lib.facets });\n if (this.lib.facets) {\n Object.keys(this.lib.facets).forEach((facetKey) => {\n this.logger.default('Configuring Item Facet', { facetKey });\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.get(`/${facetKey}`, this.getItemFacet)\n });\n }\n\n this.logger.default('Configuring Item Operations under PK Param', { pkParam: this.getPkParam() });\n router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);\n\n if (this.childRouters) {\n this.configureChildRouters(itemRouter, this.childRouters);\n }\n return router;\n }\n\n private validatePrimaryKeyValue = (req: Request, res: Response, next: any) => {\n const pkParamValue = req.params[this.getPkParam()];\n if (this.validatePKParam(pkParamValue)) {\n res.locals[this.getPkParam()] = pkParamValue;\n next();\n } else {\n this.logger.error('Invalid Primary Key', { pkParamValue, path: req?.path });\n res.status(500).json({ error: 'Invalid Primary Key', path: req?.path });\n }\n }\n\n private configureChildRouters = (router: Router, childRouters: Record<string, Router>) => {\n for (const path in childRouters) {\n this.logger.default('Configuring Child Router at Path', { path });\n\n router.use(`/${path}`, childRouters[path]);\n }\n return router;\n }\n\n public addChildRouter = (path: string, router: Router) => {\n this.childRouters[path] = router;\n }\n\n /* istanbul ignore next */\n public getRouter(): Router {\n const router = Router();\n this.configure(router);\n return router;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected createItem = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n\n // TODO: Probably a better way to do this, but this postCreate hook only needs the item.\n /* istanbul ignore next */\n public postCreateItem = async (item: Item<S, L1, L2, L3, L4, L5>): Promise<Item<S, L1, L2, L3, L4, L5>> => {\n this.logger.default('Post Create Item', { item });\n return item;\n };\n\n protected deleteItem = async (req: Request, res: Response): Promise<void> => {\n this.logger.default('Deleting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n const removedItem = await this.lib.remove(ik);\n const item = validatePK(removedItem, this.getPkType());\n res.json(item);\n };\n\n /* eslint-disable */\n /* istanbul ignore next */\n protected findItems = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n /* eslint-enable */\n\n protected getItem = async (req: Request, res: Response) => {\n this.logger.default('Getting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n try {\n // TODO: What error does validate PK throw, when can that fail?\n const item = validatePK(await this.lib.get(ik), this.getPkType());\n res.json(item);\n } catch (err: any) {\n if (err instanceof NotFoundError) {\n this.logger.error('Item Not Found', { ik, message: err?.message, stack: err?.stack });\n res.status(404).json({\n ik,\n message: \"Item Not Found\",\n });\n } else {\n this.logger.error('General Error', { ik, message: err?.message, stack: err?.stack });\n res.status(500).json({\n ik,\n message: \"General Error\",\n });\n }\n }\n }\n\n protected updateItem = async (req: Request, res: Response) => {\n this.logger.default('Updating Item',\n { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const itemToUpdate = this.convertDates(req.body as ItemProperties<S, L1, L2, L3, L4, L5>);\n const retItem = validatePK(await this.lib.update(ik, itemToUpdate), this.getPkType());\n res.json(retItem);\n };\n\n public convertDates = (item: Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5>):\n Item<S, L1, L2, L3, L4, L5> | ItemProperties<S, L1, L2, L3, L4, L5> => {\n const events = item.events as Record<string, ItemEvent>;\n this.logger.default('Converting Dates', { item });\n if (events) {\n Object.keys(events).forEach((key: string) => {\n Object.assign(events, {\n [key]: deepmerge(events[key], { at: events[key].at ? new Date(events[key].at) : null })\n });\n });\n }\n Object.assign(item, { events });\n return item;\n };\n\n // TODO: Maybe just simplify this and require that everything is a UUID?\n /**\n * This method might be an annoyance, but we need to capture a few cases where someone passes\n * a PK parameter that has an odd string in it.\n *\n * @param pkParamValue The value of the primary key parameter\n * @returns if the value is valid.\n */\n protected validatePKParam = (pkParamValue: string): boolean => {\n let validPkParam = true;\n if (pkParamValue.length <= 0) {\n this.logger.error('Primary Key is an Empty String', { pkParamValue });\n validPkParam = false;\n } else if (pkParamValue === 'undefined') {\n this.logger.error('Primary Key is the string \\'undefined\\'', { pkParamValue });\n validPkParam = false;\n }\n return validPkParam;\n }\n\n}\n"],"names":["ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","childRouters","logger","postAllAction","req","default","query","params","allActionKey","path","substring","lastIndexOf","allActions","error","status","json","allAction","body","err","message","stack","getAllFacet","facetKey","allFacets","facet","combinedQueryParams","allFacet","postItemAction","ik","actionKey","actions","action","getItemFacet","facets","pkType","get","findItems","post","createItem","debug","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","itemActions","itemFacets","pkParam","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","LibLogger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItemRouter.cjs","sources":["../src/ItemRouter.ts"],"sourcesContent":["import {\n ComKey,\n cPK,\n Item,\n ItemEvent,\n LocKey,\n LocKeyArray,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { Instance, NotFoundError } from \"@fjell/lib\";\nimport deepmerge from \"deepmerge\";\nimport { Request, Response, Router } from \"express\";\nimport LibLogger from \"./logger\";\n\nexport type ItemRouterOptions = Record<string, never>;\n\nexport class ItemRouter<\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n protected lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;\n private keyType: S;\n protected options: ItemRouterOptions;\n private childRouters: Record<string, Router> = {};\n protected logger;\n\n constructor(\n lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>,\n keyType: S,\n options: ItemRouterOptions = {}\n ) {\n this.lib = lib;\n this.keyType = keyType;\n this.options = options;\n this.logger = LibLogger.get(\"ItemRouter\", keyType);\n }\n\n public getPkType = (): S => {\n return this.keyType;\n }\n\n protected getPkParam = (): string => {\n return `${this.getPkType()}Pk`;\n }\n\n protected getLk(res: Response): LocKey<S> {\n return { kt: this.keyType, lk: res.locals[this.getPkParam()] };\n }\n\n // this is meant to be consumed by children routers\n public getLKA(res: Response): LocKeyArray<S, L1, L2, L3, L4> {\n return [this.getLk(res)] as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\n public getPk(res: Response): PriKey<S> {\n return cPK<S>(res.locals[this.getPkParam()], this.getPkType());\n }\n\n // Unless this is a contained router, the locations will always be an empty array.\n /* eslint-disable */\n protected getLocations(res: Response): LocKeyArray<L1, L2, L3, L4, L5> | [] {\n throw new Error('Method not implemented in an abstract router');\n }\n /* eslint-enable */\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getIk(res: Response): PriKey<S> | ComKey<S, L1, L2, L3, L4, L5> {\n throw new Error('Method not implemented in an abstract router');\n }\n\n protected postAllAction = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Posting All Action', { query: req?.query, params: req?.params, locals: res?.locals });\n const allActionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.allActions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const allAction = libOptions.allActions[allActionKey];\n if (!allAction) {\n this.logger.error('All Action is not configured', { allActionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await libOperations.allAction(allActionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in All Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getAllFacet = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Getting All Facet', { query: req?.query, params: req?.params, locals: res?.locals });\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.allFacets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = libOptions.allFacets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await libOperations.allFacet(facetKey, combinedQueryParams));\n } catch (err: any) {\n this.logger.error('Error in All Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected postItemAction = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.actions) {\n this.logger.error('Item Actions are not configured');\n res.status(500).json({ error: 'Item Actions are not configured' });\n return;\n }\n const action = libOptions.actions[actionKey];\n if (!action) {\n this.logger.error('Item Action is not configured', { actionKey });\n res.status(500).json({ error: 'Item Action is not configured' });\n return;\n }\n try {\n res.json(await libOperations.action(ik, actionKey, req.body));\n } catch (err: any) {\n this.logger.error('Error in Item Action', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n protected getItemFacet = async (req: Request, res: Response) => {\n const libOptions = this.lib.definition.options;\n const libOperations = this.lib.operations;\n this.logger.debug('Getting Item', { query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);\n if (!libOptions.facets) {\n this.logger.error('Item Facets are not configured');\n res.status(500).json({ error: 'Item Facets are not configured' });\n return;\n }\n const facet = libOptions.facets[facetKey];\n if (!facet) {\n this.logger.error('Item Facet is not configured', { facetKey });\n res.status(500).json({ error: 'Item Facet is not configured' });\n return;\n }\n try {\n const combinedQueryParams = { ...req.query, ...req.params } as Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>;\n res.json(await libOperations.facet(ik, facetKey, combinedQueryParams));\n } catch (err: any) {\n this.logger.error('Error in Item Facet', { message: err?.message, stack: err?.stack });\n res.status(500).json(err);\n }\n }\n\n private configure = (router: Router) => {\n const libOptions = this.lib.definition.options;\n this.logger.debug('Configuring Router', { pkType: this.getPkType() });\n router.get('/', this.findItems);\n router.post('/', this.createItem);\n\n this.logger.default('All Actions supplied to Router', { allActions: libOptions.allActions });\n if (libOptions.allActions) {\n Object.keys(libOptions.allActions).forEach((actionKey) => {\n this.logger.debug('Configuring All Action %s', actionKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.post(`/${actionKey}`, this.postAllAction);\n });\n }\n\n this.logger.default('All Facets supplied to Router', { allFacets: libOptions.allFacets });\n if (libOptions.allFacets) {\n Object.keys(libOptions.allFacets).forEach((facetKey) => {\n this.logger.debug('Configuring All Facet %s', facetKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n router.get(`/${facetKey}`, this.getAllFacet);\n });\n }\n\n const itemRouter = Router();\n itemRouter.get('/', this.getItem);\n itemRouter.put('/', this.updateItem);\n itemRouter.delete('/', this.deleteItem);\n\n this.logger.default('Item Actions supplied to Router', { itemActions: libOptions.actions });\n if (libOptions.actions) {\n Object.keys(libOptions.actions).forEach((actionKey) => {\n this.logger.debug('Configuring Item Action %s', actionKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.post(`/${actionKey}`, this.postItemAction)\n });\n }\n\n this.logger.default('Item Facets supplied to Router', { itemFacets: libOptions.facets });\n if (libOptions.facets) {\n Object.keys(libOptions.facets).forEach((facetKey) => {\n this.logger.debug('Configuring Item Facet %s', facetKey);\n // TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers\n itemRouter.get(`/${facetKey}`, this.getItemFacet)\n });\n }\n\n this.logger.debug('Configuring Item Operations under PK Param %s', this.getPkParam());\n router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);\n\n if (this.childRouters) {\n this.configureChildRouters(itemRouter, this.childRouters);\n }\n return router;\n }\n\n private validatePrimaryKeyValue = (req: Request, res: Response, next: any) => {\n const pkParamValue = req.params[this.getPkParam()];\n if (this.validatePKParam(pkParamValue)) {\n res.locals[this.getPkParam()] = pkParamValue;\n next();\n } else {\n this.logger.error('Invalid Primary Key', { pkParamValue, path: req?.originalUrl });\n res.status(500).json({ error: 'Invalid Primary Key', path: req?.originalUrl });\n }\n }\n\n private configureChildRouters = (router: Router, childRouters: Record<string, Router>) => {\n for (const path in childRouters) {\n this.logger.debug('Configuring Child Router at Path %s', path);\n\n router.use(`/${path}`, childRouters[path]);\n }\n return router;\n }\n\n public addChildRouter = (path: string, router: Router) => {\n this.childRouters[path] = router;\n }\n\n /* istanbul ignore next */\n public getRouter(): Router {\n const router = Router();\n this.configure(router);\n return router;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected createItem = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n\n // TODO: Probably a better way to do this, but this postCreate hook only needs the item.\n /* istanbul ignore next */\n public postCreateItem = async (item: Item<S, L1, L2, L3, L4, L5>): Promise<Item<S, L1, L2, L3, L4, L5>> => {\n this.logger.debug('Post Create Item', { item });\n return item;\n };\n\n protected deleteItem = async (req: Request, res: Response): Promise<void> => {\n const libOperations = this.lib.operations;\n\n this.logger.debug('Deleting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n const removedItem = await libOperations.remove(ik);\n const item = validatePK(removedItem, this.getPkType());\n res.json(item);\n };\n\n /* eslint-disable */\n /* istanbul ignore next */\n protected findItems = async (req: Request, res: Response): Promise<void> => {\n throw new Error('Method not implemented in an abstract router');\n };\n /* eslint-enable */\n\n protected getItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.debug('Getting Item', { query: req.query, params: req.params, locals: res.locals });\n const ik = this.getIk(res);\n try {\n // TODO: What error does validate PK throw, when can that fail?\n const item = validatePK(await libOperations.get(ik), this.getPkType());\n res.json(item);\n } catch (err: any) {\n if (err instanceof NotFoundError) {\n this.logger.error('Item Not Found', { ik, message: err?.message, stack: err?.stack });\n res.status(404).json({\n ik,\n message: \"Item Not Found\",\n });\n } else {\n this.logger.error('General Error', { ik, message: err?.message, stack: err?.stack });\n res.status(500).json({\n ik,\n message: \"General Error\",\n });\n }\n }\n }\n\n protected updateItem = async (req: Request, res: Response) => {\n const libOperations = this.lib.operations;\n this.logger.debug('Updating Item',\n { body: req?.body, query: req?.query, params: req?.params, locals: res?.locals });\n const ik = this.getIk(res);\n const itemToUpdate = this.convertDates(req.body as Partial<Item<S, L1, L2, L3, L4, L5>>);\n const retItem = validatePK(await libOperations.update(ik, itemToUpdate), this.getPkType());\n res.json(retItem);\n };\n\n public convertDates = (item: Partial<Item<S, L1, L2, L3, L4, L5>>): Partial<Item<S, L1, L2, L3, L4, L5>> => {\n const events = item.events as Record<string, ItemEvent>;\n this.logger.debug('Converting Dates', { item });\n if (events) {\n Object.keys(events).forEach((key: string) => {\n Object.assign(events, {\n [key]: deepmerge(events[key], { at: events[key].at ? new Date(events[key].at) : null })\n });\n });\n }\n Object.assign(item, { events });\n return item;\n };\n\n // TODO: Maybe just simplify this and require that everything is a UUID?\n /**\n * This method might be an annoyance, but we need to capture a few cases where someone passes\n * a PK parameter that has an odd string in it.\n *\n * @param pkParamValue The value of the primary key parameter\n * @returns if the value is valid.\n */\n protected validatePKParam = (pkParamValue: string): boolean => {\n let validPkParam = true;\n if (pkParamValue.length <= 0) {\n this.logger.error('Primary Key is an Empty String', { pkParamValue });\n validPkParam = false;\n } else if (pkParamValue === 'undefined') {\n this.logger.error('Primary Key is the string \\'undefined\\'', { pkParamValue });\n validPkParam = false;\n }\n return validPkParam;\n }\n\n}\n"],"names":["ItemRouter","getLk","res","kt","keyType","lk","locals","getPkParam","getLKA","getPk","cPK","getPkType","getLocations","Error","getIk","getRouter","router","Router","configure","lib","options","childRouters","logger","postAllAction","req","libOptions","definition","libOperations","operations","debug","query","params","allActionKey","path","substring","lastIndexOf","allActions","error","status","json","allAction","body","err","message","stack","getAllFacet","facetKey","allFacets","facet","combinedQueryParams","allFacet","postItemAction","ik","actionKey","actions","action","getItemFacet","facets","pkType","get","findItems","post","createItem","default","Object","keys","forEach","itemRouter","getItem","put","updateItem","delete","deleteItem","itemActions","itemFacets","use","validatePrimaryKeyValue","configureChildRouters","next","pkParamValue","validatePKParam","originalUrl","addChildRouter","postCreateItem","item","removedItem","remove","validatePK","NotFoundError","itemToUpdate","convertDates","retItem","update","events","key","assign","deepmerge","at","Date","validPkParam","length","LibLogger"],"mappings":"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"}
|
package/dist/ItemRouter.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ComKey, Item,
|
|
2
|
-
import {
|
|
1
|
+
import { ComKey, Item, LocKey, LocKeyArray, PriKey } from '@fjell/core';
|
|
2
|
+
import { Instance } from '@fjell/lib';
|
|
3
3
|
import { Request, Response, Router } from 'express';
|
|
4
4
|
export type ItemRouterOptions = Record<string, never>;
|
|
5
5
|
export declare class ItemRouter<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
|
|
6
|
-
protected lib:
|
|
6
|
+
protected lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>;
|
|
7
7
|
private keyType;
|
|
8
8
|
protected options: ItemRouterOptions;
|
|
9
9
|
private childRouters;
|
|
10
|
-
|
|
11
|
-
constructor(lib:
|
|
10
|
+
protected logger: import('@fjell/logging').Logger;
|
|
11
|
+
constructor(lib: Instance<Item<S, L1, L2, L3, L4, L5>, S, L1, L2, L3, L4, L5>, keyType: S, options?: ItemRouterOptions);
|
|
12
12
|
getPkType: () => S;
|
|
13
13
|
protected getPkParam: () => string;
|
|
14
14
|
protected getLk(res: Response): LocKey<S>;
|
|
@@ -31,7 +31,7 @@ export declare class ItemRouter<S extends string, L1 extends string = never, L2
|
|
|
31
31
|
protected findItems: (req: Request, res: Response) => Promise<void>;
|
|
32
32
|
protected getItem: (req: Request, res: Response) => Promise<void>;
|
|
33
33
|
protected updateItem: (req: Request, res: Response) => Promise<void>;
|
|
34
|
-
convertDates: (item: Item<S, L1, L2, L3, L4, L5
|
|
34
|
+
convertDates: (item: Partial<Item<S, L1, L2, L3, L4, L5>>) => Partial<Item<S, L1, L2, L3, L4, L5>>;
|
|
35
35
|
/**
|
|
36
36
|
* This method might be an annoyance, but we need to capture a few cases where someone passes
|
|
37
37
|
* a PK parameter that has an odd string in it.
|
package/dist/ItemRouter.js
CHANGED
|
@@ -59,20 +59,22 @@ class ItemRouter {
|
|
|
59
59
|
return `${this.getPkType()}Pk`;
|
|
60
60
|
});
|
|
61
61
|
_define_property(this, "postAllAction", async (req, res)=>{
|
|
62
|
-
this.
|
|
62
|
+
const libOptions = this.lib.definition.options;
|
|
63
|
+
const libOperations = this.lib.operations;
|
|
64
|
+
this.logger.debug('Posting All Action', {
|
|
63
65
|
query: req === null || req === void 0 ? void 0 : req.query,
|
|
64
66
|
params: req === null || req === void 0 ? void 0 : req.params,
|
|
65
67
|
locals: res === null || res === void 0 ? void 0 : res.locals
|
|
66
68
|
});
|
|
67
69
|
const allActionKey = req.path.substring(req.path.lastIndexOf('/') + 1);
|
|
68
|
-
if (!
|
|
70
|
+
if (!libOptions.allActions) {
|
|
69
71
|
this.logger.error('Item Actions are not configured');
|
|
70
72
|
res.status(500).json({
|
|
71
73
|
error: 'Item Actions are not configured'
|
|
72
74
|
});
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
|
-
const allAction =
|
|
77
|
+
const allAction = libOptions.allActions[allActionKey];
|
|
76
78
|
if (!allAction) {
|
|
77
79
|
this.logger.error('All Action is not configured', {
|
|
78
80
|
allActionKey
|
|
@@ -83,7 +85,7 @@ class ItemRouter {
|
|
|
83
85
|
return;
|
|
84
86
|
}
|
|
85
87
|
try {
|
|
86
|
-
res.json(await
|
|
88
|
+
res.json(await libOperations.allAction(allActionKey, req.body));
|
|
87
89
|
} catch (err) {
|
|
88
90
|
this.logger.error('Error in All Action', {
|
|
89
91
|
message: err === null || err === void 0 ? void 0 : err.message,
|
|
@@ -93,20 +95,22 @@ class ItemRouter {
|
|
|
93
95
|
}
|
|
94
96
|
});
|
|
95
97
|
_define_property(this, "getAllFacet", async (req, res)=>{
|
|
96
|
-
this.
|
|
98
|
+
const libOptions = this.lib.definition.options;
|
|
99
|
+
const libOperations = this.lib.operations;
|
|
100
|
+
this.logger.debug('Getting All Facet', {
|
|
97
101
|
query: req === null || req === void 0 ? void 0 : req.query,
|
|
98
102
|
params: req === null || req === void 0 ? void 0 : req.params,
|
|
99
103
|
locals: res === null || res === void 0 ? void 0 : res.locals
|
|
100
104
|
});
|
|
101
105
|
const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);
|
|
102
|
-
if (!
|
|
106
|
+
if (!libOptions.allFacets) {
|
|
103
107
|
this.logger.error('Item Facets are not configured');
|
|
104
108
|
res.status(500).json({
|
|
105
109
|
error: 'Item Facets are not configured'
|
|
106
110
|
});
|
|
107
111
|
return;
|
|
108
112
|
}
|
|
109
|
-
const facet =
|
|
113
|
+
const facet = libOptions.allFacets[facetKey];
|
|
110
114
|
if (!facet) {
|
|
111
115
|
this.logger.error('Item Facet is not configured', {
|
|
112
116
|
facetKey
|
|
@@ -121,7 +125,7 @@ class ItemRouter {
|
|
|
121
125
|
...req.query,
|
|
122
126
|
...req.params
|
|
123
127
|
};
|
|
124
|
-
res.json(await
|
|
128
|
+
res.json(await libOperations.allFacet(facetKey, combinedQueryParams));
|
|
125
129
|
} catch (err) {
|
|
126
130
|
this.logger.error('Error in All Facet', {
|
|
127
131
|
message: err === null || err === void 0 ? void 0 : err.message,
|
|
@@ -131,21 +135,23 @@ class ItemRouter {
|
|
|
131
135
|
}
|
|
132
136
|
});
|
|
133
137
|
_define_property(this, "postItemAction", async (req, res)=>{
|
|
134
|
-
this.
|
|
138
|
+
const libOptions = this.lib.definition.options;
|
|
139
|
+
const libOperations = this.lib.operations;
|
|
140
|
+
this.logger.debug('Getting Item', {
|
|
135
141
|
query: req === null || req === void 0 ? void 0 : req.query,
|
|
136
142
|
params: req === null || req === void 0 ? void 0 : req.params,
|
|
137
143
|
locals: res === null || res === void 0 ? void 0 : res.locals
|
|
138
144
|
});
|
|
139
145
|
const ik = this.getIk(res);
|
|
140
146
|
const actionKey = req.path.substring(req.path.lastIndexOf('/') + 1);
|
|
141
|
-
if (!
|
|
147
|
+
if (!libOptions.actions) {
|
|
142
148
|
this.logger.error('Item Actions are not configured');
|
|
143
149
|
res.status(500).json({
|
|
144
150
|
error: 'Item Actions are not configured'
|
|
145
151
|
});
|
|
146
152
|
return;
|
|
147
153
|
}
|
|
148
|
-
const action =
|
|
154
|
+
const action = libOptions.actions[actionKey];
|
|
149
155
|
if (!action) {
|
|
150
156
|
this.logger.error('Item Action is not configured', {
|
|
151
157
|
actionKey
|
|
@@ -156,7 +162,7 @@ class ItemRouter {
|
|
|
156
162
|
return;
|
|
157
163
|
}
|
|
158
164
|
try {
|
|
159
|
-
res.json(await
|
|
165
|
+
res.json(await libOperations.action(ik, actionKey, req.body));
|
|
160
166
|
} catch (err) {
|
|
161
167
|
this.logger.error('Error in Item Action', {
|
|
162
168
|
message: err === null || err === void 0 ? void 0 : err.message,
|
|
@@ -166,21 +172,23 @@ class ItemRouter {
|
|
|
166
172
|
}
|
|
167
173
|
});
|
|
168
174
|
_define_property(this, "getItemFacet", async (req, res)=>{
|
|
169
|
-
this.
|
|
175
|
+
const libOptions = this.lib.definition.options;
|
|
176
|
+
const libOperations = this.lib.operations;
|
|
177
|
+
this.logger.debug('Getting Item', {
|
|
170
178
|
query: req === null || req === void 0 ? void 0 : req.query,
|
|
171
179
|
params: req === null || req === void 0 ? void 0 : req.params,
|
|
172
180
|
locals: res === null || res === void 0 ? void 0 : res.locals
|
|
173
181
|
});
|
|
174
182
|
const ik = this.getIk(res);
|
|
175
183
|
const facetKey = req.path.substring(req.path.lastIndexOf('/') + 1);
|
|
176
|
-
if (!
|
|
184
|
+
if (!libOptions.facets) {
|
|
177
185
|
this.logger.error('Item Facets are not configured');
|
|
178
186
|
res.status(500).json({
|
|
179
187
|
error: 'Item Facets are not configured'
|
|
180
188
|
});
|
|
181
189
|
return;
|
|
182
190
|
}
|
|
183
|
-
const facet =
|
|
191
|
+
const facet = libOptions.facets[facetKey];
|
|
184
192
|
if (!facet) {
|
|
185
193
|
this.logger.error('Item Facet is not configured', {
|
|
186
194
|
facetKey
|
|
@@ -195,7 +203,7 @@ class ItemRouter {
|
|
|
195
203
|
...req.query,
|
|
196
204
|
...req.params
|
|
197
205
|
};
|
|
198
|
-
res.json(await
|
|
206
|
+
res.json(await libOperations.facet(ik, facetKey, combinedQueryParams));
|
|
199
207
|
} catch (err) {
|
|
200
208
|
this.logger.error('Error in Item Facet', {
|
|
201
209
|
message: err === null || err === void 0 ? void 0 : err.message,
|
|
@@ -205,31 +213,28 @@ class ItemRouter {
|
|
|
205
213
|
}
|
|
206
214
|
});
|
|
207
215
|
_define_property(this, "configure", (router)=>{
|
|
208
|
-
this.
|
|
216
|
+
const libOptions = this.lib.definition.options;
|
|
217
|
+
this.logger.debug('Configuring Router', {
|
|
209
218
|
pkType: this.getPkType()
|
|
210
219
|
});
|
|
211
220
|
router.get('/', this.findItems);
|
|
212
221
|
router.post('/', this.createItem);
|
|
213
|
-
this.logger.
|
|
214
|
-
allActions:
|
|
222
|
+
this.logger.default('All Actions supplied to Router', {
|
|
223
|
+
allActions: libOptions.allActions
|
|
215
224
|
});
|
|
216
|
-
if (
|
|
217
|
-
Object.keys(
|
|
218
|
-
this.logger.
|
|
219
|
-
actionKey
|
|
220
|
-
});
|
|
225
|
+
if (libOptions.allActions) {
|
|
226
|
+
Object.keys(libOptions.allActions).forEach((actionKey)=>{
|
|
227
|
+
this.logger.debug('Configuring All Action %s', actionKey);
|
|
221
228
|
// TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
|
|
222
229
|
router.post(`/${actionKey}`, this.postAllAction);
|
|
223
230
|
});
|
|
224
231
|
}
|
|
225
|
-
this.logger.
|
|
226
|
-
allFacets:
|
|
232
|
+
this.logger.default('All Facets supplied to Router', {
|
|
233
|
+
allFacets: libOptions.allFacets
|
|
227
234
|
});
|
|
228
|
-
if (
|
|
229
|
-
Object.keys(
|
|
230
|
-
this.logger.
|
|
231
|
-
facetKey
|
|
232
|
-
});
|
|
235
|
+
if (libOptions.allFacets) {
|
|
236
|
+
Object.keys(libOptions.allFacets).forEach((facetKey)=>{
|
|
237
|
+
this.logger.debug('Configuring All Facet %s', facetKey);
|
|
233
238
|
// TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
|
|
234
239
|
router.get(`/${facetKey}`, this.getAllFacet);
|
|
235
240
|
});
|
|
@@ -238,33 +243,27 @@ class ItemRouter {
|
|
|
238
243
|
itemRouter.get('/', this.getItem);
|
|
239
244
|
itemRouter.put('/', this.updateItem);
|
|
240
245
|
itemRouter.delete('/', this.deleteItem);
|
|
241
|
-
this.logger.
|
|
242
|
-
itemActions:
|
|
246
|
+
this.logger.default('Item Actions supplied to Router', {
|
|
247
|
+
itemActions: libOptions.actions
|
|
243
248
|
});
|
|
244
|
-
if (
|
|
245
|
-
Object.keys(
|
|
246
|
-
this.logger.
|
|
247
|
-
actionKey
|
|
248
|
-
});
|
|
249
|
+
if (libOptions.actions) {
|
|
250
|
+
Object.keys(libOptions.actions).forEach((actionKey)=>{
|
|
251
|
+
this.logger.debug('Configuring Item Action %s', actionKey);
|
|
249
252
|
// TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
|
|
250
253
|
itemRouter.post(`/${actionKey}`, this.postItemAction);
|
|
251
254
|
});
|
|
252
255
|
}
|
|
253
|
-
this.logger.
|
|
254
|
-
itemFacets:
|
|
256
|
+
this.logger.default('Item Facets supplied to Router', {
|
|
257
|
+
itemFacets: libOptions.facets
|
|
255
258
|
});
|
|
256
|
-
if (
|
|
257
|
-
Object.keys(
|
|
258
|
-
this.logger.
|
|
259
|
-
facetKey
|
|
260
|
-
});
|
|
259
|
+
if (libOptions.facets) {
|
|
260
|
+
Object.keys(libOptions.facets).forEach((facetKey)=>{
|
|
261
|
+
this.logger.debug('Configuring Item Facet %s', facetKey);
|
|
261
262
|
// TODO: Ok, this is a bit of a hack, but we need to customize the types of the request handlers
|
|
262
263
|
itemRouter.get(`/${facetKey}`, this.getItemFacet);
|
|
263
264
|
});
|
|
264
265
|
}
|
|
265
|
-
this.logger.
|
|
266
|
-
pkParam: this.getPkParam()
|
|
267
|
-
});
|
|
266
|
+
this.logger.debug('Configuring Item Operations under PK Param %s', this.getPkParam());
|
|
268
267
|
router.use(`/:${this.getPkParam()}`, this.validatePrimaryKeyValue, itemRouter);
|
|
269
268
|
if (this.childRouters) {
|
|
270
269
|
this.configureChildRouters(itemRouter, this.childRouters);
|
|
@@ -279,19 +278,17 @@ class ItemRouter {
|
|
|
279
278
|
} else {
|
|
280
279
|
this.logger.error('Invalid Primary Key', {
|
|
281
280
|
pkParamValue,
|
|
282
|
-
path: req === null || req === void 0 ? void 0 : req.
|
|
281
|
+
path: req === null || req === void 0 ? void 0 : req.originalUrl
|
|
283
282
|
});
|
|
284
283
|
res.status(500).json({
|
|
285
284
|
error: 'Invalid Primary Key',
|
|
286
|
-
path: req === null || req === void 0 ? void 0 : req.
|
|
285
|
+
path: req === null || req === void 0 ? void 0 : req.originalUrl
|
|
287
286
|
});
|
|
288
287
|
}
|
|
289
288
|
});
|
|
290
289
|
_define_property(this, "configureChildRouters", (router, childRouters)=>{
|
|
291
290
|
for(const path in childRouters){
|
|
292
|
-
this.logger.
|
|
293
|
-
path
|
|
294
|
-
});
|
|
291
|
+
this.logger.debug('Configuring Child Router at Path %s', path);
|
|
295
292
|
router.use(`/${path}`, childRouters[path]);
|
|
296
293
|
}
|
|
297
294
|
return router;
|
|
@@ -305,19 +302,20 @@ class ItemRouter {
|
|
|
305
302
|
});
|
|
306
303
|
// TODO: Probably a better way to do this, but this postCreate hook only needs the item.
|
|
307
304
|
/* istanbul ignore next */ _define_property(this, "postCreateItem", async (item)=>{
|
|
308
|
-
this.logger.
|
|
305
|
+
this.logger.debug('Post Create Item', {
|
|
309
306
|
item
|
|
310
307
|
});
|
|
311
308
|
return item;
|
|
312
309
|
});
|
|
313
310
|
_define_property(this, "deleteItem", async (req, res)=>{
|
|
314
|
-
this.
|
|
311
|
+
const libOperations = this.lib.operations;
|
|
312
|
+
this.logger.debug('Deleting Item', {
|
|
315
313
|
query: req.query,
|
|
316
314
|
params: req.params,
|
|
317
315
|
locals: res.locals
|
|
318
316
|
});
|
|
319
317
|
const ik = this.getIk(res);
|
|
320
|
-
const removedItem = await
|
|
318
|
+
const removedItem = await libOperations.remove(ik);
|
|
321
319
|
const item = validatePK(removedItem, this.getPkType());
|
|
322
320
|
res.json(item);
|
|
323
321
|
});
|
|
@@ -325,7 +323,8 @@ class ItemRouter {
|
|
|
325
323
|
throw new Error('Method not implemented in an abstract router');
|
|
326
324
|
});
|
|
327
325
|
/* eslint-enable */ _define_property(this, "getItem", async (req, res)=>{
|
|
328
|
-
this.
|
|
326
|
+
const libOperations = this.lib.operations;
|
|
327
|
+
this.logger.debug('Getting Item', {
|
|
329
328
|
query: req.query,
|
|
330
329
|
params: req.params,
|
|
331
330
|
locals: res.locals
|
|
@@ -333,7 +332,7 @@ class ItemRouter {
|
|
|
333
332
|
const ik = this.getIk(res);
|
|
334
333
|
try {
|
|
335
334
|
// TODO: What error does validate PK throw, when can that fail?
|
|
336
|
-
const item = validatePK(await
|
|
335
|
+
const item = validatePK(await libOperations.get(ik), this.getPkType());
|
|
337
336
|
res.json(item);
|
|
338
337
|
} catch (err) {
|
|
339
338
|
if (err instanceof NotFoundError) {
|
|
@@ -360,7 +359,8 @@ class ItemRouter {
|
|
|
360
359
|
}
|
|
361
360
|
});
|
|
362
361
|
_define_property(this, "updateItem", async (req, res)=>{
|
|
363
|
-
this.
|
|
362
|
+
const libOperations = this.lib.operations;
|
|
363
|
+
this.logger.debug('Updating Item', {
|
|
364
364
|
body: req === null || req === void 0 ? void 0 : req.body,
|
|
365
365
|
query: req === null || req === void 0 ? void 0 : req.query,
|
|
366
366
|
params: req === null || req === void 0 ? void 0 : req.params,
|
|
@@ -368,12 +368,12 @@ class ItemRouter {
|
|
|
368
368
|
});
|
|
369
369
|
const ik = this.getIk(res);
|
|
370
370
|
const itemToUpdate = this.convertDates(req.body);
|
|
371
|
-
const retItem = validatePK(await
|
|
371
|
+
const retItem = validatePK(await libOperations.update(ik, itemToUpdate), this.getPkType());
|
|
372
372
|
res.json(retItem);
|
|
373
373
|
});
|
|
374
374
|
_define_property(this, "convertDates", (item)=>{
|
|
375
375
|
const events = item.events;
|
|
376
|
-
this.logger.
|
|
376
|
+
this.logger.debug('Converting Dates', {
|
|
377
377
|
item
|
|
378
378
|
});
|
|
379
379
|
if (events) {
|