UNPKG

@syngrisi/syngrisi

Version:
126 lines (111 loc) 4.29 kB
import express from 'express'; import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; import * as checkController from '@controllers/check.controller'; import { Midleware } from '@types'; import { validateRequest } from '@utils/validateRequest'; import { CheckGetSchema, CheckUpdateSchema, CheckAcceptSchema } from '@schemas/Check.schema'; import { createApiResponse, createPaginatedApiResponse } from '@api-docs/openAPIResponseBuilders'; import { ensureLoggedInOrApiKey, ensureLoggedInOrApiKeyOrShareToken } from '@middlewares/ensureLogin/ensureLoggedIn'; import { createRequestQuerySchema } from '@schemas/utils/createRequestQuerySchema'; import { RequestPaginationSchema } from '@schemas/common/RequestPagination.schema'; import { createRequestOpenApiBodySchema } from '@schemas/utils/createRequestOpenApiBodySchema'; import { createRequestBodySchema } from '@schemas/utils/createRequestBodySchema'; import { commonValidations } from '@schemas/utils'; import { getByIdParamsSchema } from '@schemas/utils/createRequestParamsSchema'; export const registry = new OpenAPIRegistry(); const router = express.Router(); registry.registerPath({ method: 'get', path: '/v1/checks', summary: "List of checks with pagination, and optional filtering and sorting.", tags: ['Checks'], request: { query: RequestPaginationSchema }, responses: createPaginatedApiResponse(CheckGetSchema, 'Success'), }); router.get( '/', ensureLoggedInOrApiKeyOrShareToken(), validateRequest(createRequestQuerySchema(RequestPaginationSchema), 'get, /v1/checks'), checkController.get as Midleware ); registry.registerPath({ method: 'delete', path: '/v1/checks/{id}', summary: "Delete a check by ID", tags: ['Checks'], request: commonValidations.paramsId, responses: createApiResponse(CheckGetSchema, 'Success'), }); router.delete( '/:id', ensureLoggedInOrApiKey(), validateRequest(getByIdParamsSchema(), 'delete, /v1/checks/{id}'), checkController.remove as Midleware ); registry.registerPath({ method: 'put', path: '/v1/checks/{id}', summary: "Update a check by ID", tags: ['Checks'], request: { params: commonValidations.paramsId.params, body: createRequestOpenApiBodySchema(CheckUpdateSchema) }, responses: createApiResponse(CheckGetSchema, 'Success'), }); router.put( '/:id', ensureLoggedInOrApiKey(), validateRequest(getByIdParamsSchema().merge(createRequestBodySchema(CheckUpdateSchema)), 'put, /v1/checks/{id}'), checkController.update as Midleware ); registry.registerPath({ method: 'put', path: '/v1/checks/{id}/accept', summary: "Accept a check by ID", tags: ['Checks'], request: { params: commonValidations.paramsId.params, body: createRequestOpenApiBodySchema(CheckAcceptSchema) }, responses: createApiResponse(CheckGetSchema, 'Success'), }); router.put( '/:id/accept', ensureLoggedInOrApiKey(), validateRequest(createRequestBodySchema(CheckAcceptSchema), 'put, /v1/checks/{id}/accept'), checkController.accept as Midleware ); registry.registerPath({ method: 'post', path: '/v1/checks/{id}/recompare', summary: "Recompare a check by ID with current baseline settings", tags: ['Checks'], request: commonValidations.paramsId, responses: createApiResponse(CheckGetSchema, 'Success'), }); router.post( '/:id/recompare', ensureLoggedInOrApiKey(), validateRequest(getByIdParamsSchema(), 'post, /v1/checks/{id}/recompare'), checkController.recompare as Midleware ); registry.registerPath({ method: 'get', path: '/v1/checks/{id}/dom', summary: "Get DOM snapshot for a check (for RCA feature)", tags: ['Checks'], request: commonValidations.paramsId, responses: { 200: { description: 'DOM snapshot content as JSON', content: { 'application/json': { schema: { type: 'object' }, }, }, }, 404: { description: 'DOM snapshot not found' }, }, }); router.get( '/:id/dom', ensureLoggedInOrApiKeyOrShareToken(), validateRequest(getByIdParamsSchema(), 'get, /v1/checks/{id}/dom'), checkController.getDomSnapshot as Midleware ); export default router;