From c81531cb7a840b0059eef2321786f5da8b8fdc52 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 12 Feb 2024 18:54:24 +0100 Subject: [PATCH 1/3] feat: Implement automatisch version API endpoint --- .../src/controllers/api/v1/automatisch/version.js | 5 +++++ .../controllers/api/v1/automatisch/version.test.js | 14 ++++++++++++++ packages/backend/src/routes/automatisch.js | 8 ++++++++ packages/backend/src/routes/index.js | 2 ++ 4 files changed, 29 insertions(+) create mode 100644 packages/backend/src/controllers/api/v1/automatisch/version.js create mode 100644 packages/backend/src/controllers/api/v1/automatisch/version.test.js create mode 100644 packages/backend/src/routes/automatisch.js 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..8363d670 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/automatisch/version.js @@ -0,0 +1,5 @@ +import appConfig from '../../../../config/app'; + +export default async (request, response) => { + response.json({ 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..678883c5 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/automatisch/version.test.js @@ -0,0 +1,14 @@ +import { describe, it, expect } from 'vitest'; +import request from 'supertest'; +import app from '../../../../app.js'; +import appConfig from '../../../../config/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); + + expect(response.body).toEqual({ version: appConfig.version }); + }); +}); diff --git a/packages/backend/src/routes/automatisch.js b/packages/backend/src/routes/automatisch.js new file mode 100644 index 00000000..4b8c49f1 --- /dev/null +++ b/packages/backend/src/routes/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..4602ea20 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 './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; From 4f03f2ab51a332fb3d3c95c1e6c2c7660ac01dda Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 12 Feb 2024 23:25:09 +0100 Subject: [PATCH 2/3] feat: Introduce renderer helper --- .../controllers/api/v1/automatisch/version.js | 5 +++-- .../api/v1/automatisch/version.test.js | 16 ++++++++++++++-- packages/backend/src/helpers/renderer.js | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 packages/backend/src/helpers/renderer.js diff --git a/packages/backend/src/controllers/api/v1/automatisch/version.js b/packages/backend/src/controllers/api/v1/automatisch/version.js index 8363d670..1f8915f4 100644 --- a/packages/backend/src/controllers/api/v1/automatisch/version.js +++ b/packages/backend/src/controllers/api/v1/automatisch/version.js @@ -1,5 +1,6 @@ -import appConfig from '../../../../config/app'; +import appConfig from '../../../../config/app.js'; +import { renderObject } from '../../../../helpers/renderer.js'; export default async (request, response) => { - response.json({ version: appConfig.version }); + 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 index 678883c5..8ade5188 100644 --- a/packages/backend/src/controllers/api/v1/automatisch/version.test.js +++ b/packages/backend/src/controllers/api/v1/automatisch/version.test.js @@ -1,7 +1,6 @@ import { describe, it, expect } from 'vitest'; import request from 'supertest'; import app from '../../../../app.js'; -import appConfig from '../../../../config/app.js'; describe('GET /api/v1/automatisch/version', () => { it('should return Automatisch version', async () => { @@ -9,6 +8,19 @@ describe('GET /api/v1/automatisch/version', () => { .get('/api/v1/automatisch/version') .expect(200); - expect(response.body).toEqual({ version: appConfig.version }); + 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 }; From 697f72ecf478d60bade0f76713c9d681d48d1d59 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 12 Feb 2024 23:30:38 +0100 Subject: [PATCH 3/3] refactor: Use api/v1 namespace for routes --- packages/backend/src/routes/{ => api/v1}/automatisch.js | 2 +- packages/backend/src/routes/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename packages/backend/src/routes/{ => api/v1}/automatisch.js (60%) diff --git a/packages/backend/src/routes/automatisch.js b/packages/backend/src/routes/api/v1/automatisch.js similarity index 60% rename from packages/backend/src/routes/automatisch.js rename to packages/backend/src/routes/api/v1/automatisch.js index 4b8c49f1..44eddc41 100644 --- a/packages/backend/src/routes/automatisch.js +++ b/packages/backend/src/routes/api/v1/automatisch.js @@ -1,5 +1,5 @@ import { Router } from 'express'; -import versionAction from '../controllers/api/v1/automatisch/version.js'; +import versionAction from '../../../controllers/api/v1/automatisch/version.js'; const router = Router(); diff --git a/packages/backend/src/routes/index.js b/packages/backend/src/routes/index.js index 4602ea20..7d1d2bdf 100644 --- a/packages/backend/src/routes/index.js +++ b/packages/backend/src/routes/index.js @@ -3,7 +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 './automatisch.js'; +import automatischRouter from './api/v1/automatisch.js'; const router = Router();