const express = require('express'); const { checkCrudPermissions, } = require('../middlewares/check-permissions'); const router = express.Router(); /** * @swagger * /api/events/{id}: * delete: * security: * - bearerAuth: [] * tags: [Events] * summary: Delete the selected item * description: Delete the selected item * parameters: * - in: path * name: id * description: Item ID to delete * required: true * schema: * type: string * responses: * 200: * description: The item was successfully deleted * content: * application/json: * schema: * $ref: "#/components/schemas/Events" * 400: * description: Invalid ID supplied * 401: * $ref: "#/components/responses/UnauthorizedError" * 404: * description: Item not found * 500: * description: Some server error */ router.delete('/:id', wrapAsync(async (req, res) => { await EventsService.remove(req.params.id, req.currentUser); const payload = true; res.status(200).send(payload); })); /** * @swagger * /api/events/deleteByIds: * post: * security: * - bearerAuth: [] * tags: [Events] * summary: Delete the selected item list * description: Delete the selected item list * requestBody: * required: true * content: * application/json: * schema: * properties: * ids: * description: IDs of the updated items * type: array * responses: * 200: * description: The items was successfully deleted * content: * application/json: * schema: * $ref: "#/components/schemas/Events" * 401: * $ref: "#/components/responses/UnauthorizedError" * 404: * description: Items not found * 500: * description: Some server error */ router.post('/deleteByIds', wrapAsync(async (req, res) => { await EventsService.deleteByIds(req.body.data, req.currentUser); const payload = true; res.status(200).send(payload); })); /** * @swagger * /api/events: * get: * security: * - bearerAuth: [] * tags: [Events] * summary: Get all events * description: Get all events * responses: * 200: * description: Events list successfully received * content: * application/json: * schema: * type: array * items: * $ref: "#/components/schemas/Events" * 401: * $ref: "#/components/responses/UnauthorizedError" * 404: * description: Data not found * 500: * description: Some server error */ router.get('/', wrapAsync(async (req, res) => { const filetype = req.query.filetype const currentUser = req.currentUser; const { sort, ...otherFilters } = req.query; let order = {}; if (sort) { const [field, direction] = sort.split(','); order = { field, sort: direction }; } const payload = await EventsDBApi.findAll( { ...otherFilters, ...order }, { currentUser } ); if (filetype && filetype === 'csv') { const fields = ['id','name','description', 'budget_total', 'start_datetime','end_datetime', ]; const opts = { fields }; try { const csv = parse(payload.rows, opts); res.status(200).attachment(csv); res.send(csv) } catch (err) { console.error(err); } } else { res.status(200).send(payload); } })); /** * @swagger * /api/events/count: * get: * security: * - bearerAuth: [] * tags: [Events] * summary: Count all events * description: Count all events * responses: * 200: * description: Events count successfully received * content: * application/json: * schema: * type: array * items: * $ref: "#/components/schemas/Events" * 401: * $ref: "#/components/responses/UnauthorizedError" * 404: * description: Data not found * 500: * description: Some server error */ router.get('/count', wrapAsync(async (req, res) => { const currentUser = req.currentUser; const payload = await EventsDBApi.findAll( req.query, null, { countOnly: true, currentUser } ); res.status(200).send(payload); })); /** * @swagger * /api/events/autocomplete: * get: * security: * - bearerAuth: [] * tags: [Events] * summary: Find all events that match search criteria * description: Find all events that match search criteria * responses: * 200: * description: Events list successfully received * content: * application/json: * schema: * type: array * items: * $ref: "#/components/schemas/Events" * 401: * $ref: "#/components/responses/UnauthorizedError" * 404: * description: Data not found * 500: * description: Some server error */ router.get('/autocomplete', async (req, res) => { const payload = await EventsDBApi.findAllAutocomplete( req.query.query, req.query.limit, req.query.offset, ); res.status(200).send(payload); }); /** * @swagger * /api/events/{id}: * get: * security: * - bearerAuth: [] * tags: [Events] * summary: Get selected item * description: Get selected item * parameters: * - in: path * name: id * description: ID of item to get * required: true * schema: * type: string * responses: * 200: * description: Selected item successfully received * content: * application/json: * schema: * $ref: "#/components/schemas/Events" * 400: * description: Invalid ID supplied * 401: * $ref: "#/components/responses/UnauthorizedError" * 404: * description: Item not found * 500: * description: Some server error */ router.get('/:id', wrapAsync(async (req, res) => { const payload = await EventsDBApi.findBy( { id: req.params.id }, ); res.status(200).send(payload); })); router.use('/', require('../helpers').commonErrorHandler); module.exports = router;