diff --git a/packages/backend/src/controllers/api/v1/automatisch/version.js b/packages/backend/src/controllers/api/v1/automatisch/version.js new file mode 100644 index 00000000..1f8915f4 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/automatisch/version.js @@ -0,0 +1,6 @@ +import appConfig from '../../../../config/app.js'; +import { renderObject } from '../../../../helpers/renderer.js'; + +export default async (request, response) => { + renderObject(response, { version: appConfig.version }); +}; diff --git a/packages/backend/src/controllers/api/v1/automatisch/version.test.js b/packages/backend/src/controllers/api/v1/automatisch/version.test.js new file mode 100644 index 00000000..8ade5188 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/automatisch/version.test.js @@ -0,0 +1,26 @@ +import { describe, it, expect } from 'vitest'; +import request from 'supertest'; +import app from '../../../../app.js'; + +describe('GET /api/v1/automatisch/version', () => { + it('should return Automatisch version', async () => { + const response = await request(app) + .get('/api/v1/automatisch/version') + .expect(200); + + const expectedPayload = { + data: { + version: '0.10.0', + }, + meta: { + count: 1, + currentPage: null, + isArray: false, + totalPages: null, + type: 'Object', + }, + }; + + expect(response.body).toEqual(expectedPayload); + }); +}); diff --git a/packages/backend/src/helpers/renderer.js b/packages/backend/src/helpers/renderer.js new file mode 100644 index 00000000..fcc6e6a0 --- /dev/null +++ b/packages/backend/src/helpers/renderer.js @@ -0,0 +1,18 @@ +const renderObject = (response, object) => { + const isArray = Array.isArray(object); + + const computedPayload = { + data: object, + meta: { + type: object.constructor.name, + count: isArray ? object.length : 1, + isArray, + currentPage: null, + totalPages: null, + }, + }; + + return response.json(computedPayload); +}; + +export { renderObject }; diff --git a/packages/backend/src/routes/api/v1/automatisch.js b/packages/backend/src/routes/api/v1/automatisch.js new file mode 100644 index 00000000..44eddc41 --- /dev/null +++ b/packages/backend/src/routes/api/v1/automatisch.js @@ -0,0 +1,8 @@ +import { Router } from 'express'; +import versionAction from '../../../controllers/api/v1/automatisch/version.js'; + +const router = Router(); + +router.get('/version', versionAction); + +export default router; diff --git a/packages/backend/src/routes/index.js b/packages/backend/src/routes/index.js index ded97327..7d1d2bdf 100644 --- a/packages/backend/src/routes/index.js +++ b/packages/backend/src/routes/index.js @@ -3,6 +3,7 @@ import graphQLInstance from '../helpers/graphql-instance.js'; import webhooksRouter from './webhooks.js'; import paddleRouter from './paddle.ee.js'; import healthcheckRouter from './healthcheck.js'; +import automatischRouter from './api/v1/automatisch.js'; const router = Router(); @@ -10,5 +11,6 @@ router.use('/graphql', graphQLInstance); router.use('/webhooks', webhooksRouter); router.use('/paddle', paddleRouter); router.use('/healthcheck', healthcheckRouter); +router.use('/api/v1/automatisch', automatischRouter); export default router;