From 4a3b91d658814742f36f65ae73f8ee0ee409feec Mon Sep 17 00:00:00 2001 From: Andreas Nedbal Date: Fri, 16 Sep 2022 21:50:05 +0200 Subject: [PATCH] server: add additional API v2 options to endpoints * improve type definitions for v2 method The method has to be lowercase because it is used as an index to get the respective method of the router. Co-authored-by: Johann150 --- packages/backend/src/server/api/endpoints.ts | 18 ++++++++++++++++++ packages/backend/src/server/api/index.ts | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index c85bb6632..6e69b3b11 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -702,6 +702,24 @@ export interface IEndpointMeta { * 正常応答をキャッシュ (Cache-Control: public) する秒数 */ readonly cacheSec?: number; + + /** + * API v2 options + */ + readonly v2?: { + + /** + * HTTP verb this endpoint supports + */ + readonly method: 'get' | 'put' | 'post' | 'patch' | 'delete'; + + /** + * Path alias for v2 endpoint + * + * @example (v0) /api/notes/create -> /api/v2/notes + */ + readonly alias?: string; + }; } export interface IEndpoint { diff --git a/packages/backend/src/server/api/index.ts b/packages/backend/src/server/api/index.ts index af6026925..1aaee70a6 100644 --- a/packages/backend/src/server/api/index.ts +++ b/packages/backend/src/server/api/index.ts @@ -91,6 +91,11 @@ for (const endpoint of endpoints) { } else { router.get(`/${endpoint.name}`, async ctx => { ctx.status = 405; }); } + + if (endpoint.meta.v2) { + const path = endpoint.meta.v2.alias ?? endpoint.name.replace(/-/g, '_'); + router[endpoint.meta.v2.method](`/v2/${path}`, handler.bind(null, endpoint)); + } } }