From c8ace1e0b2ede4a81fdb0a7a977f31f2455c53d9 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 14 May 2025 22:30:02 +0300 Subject: [PATCH] refactor(server): use separate method for async route --- apps/server/src/routes/route_api.ts | 10 +++++++++- apps/server/src/routes/routes.ts | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/apps/server/src/routes/route_api.ts b/apps/server/src/routes/route_api.ts index 4df38bd2a..ff3cb9e39 100644 --- a/apps/server/src/routes/route_api.ts +++ b/apps/server/src/routes/route_api.ts @@ -92,7 +92,15 @@ export function apiRoute(method: HttpMethod, path: string, routeHandler: ApiRequ route(method, path, [auth.checkApiAuth, csrfMiddleware], routeHandler, apiResultHandler); } -export function route(method: HttpMethod, path: string, middleware: express.Handler[], routeHandler: ApiRequestHandler, resultHandler: ApiResultHandler | null = null, transactional = true) { +export function route(method: HttpMethod, path: string, middleware: express.Handler[], routeHandler: ApiRequestHandler, resultHandler: ApiResultHandler | null = null) { + internalRoute(method, path, middleware, routeHandler, resultHandler, true); +} + +export function asyncRoute(method: HttpMethod, path: string, middleware: express.Handler[], routeHandler: ApiRequestHandler, resultHandler: ApiResultHandler | null = null) { + internalRoute(method, path, middleware, routeHandler, resultHandler, false); +} + +function internalRoute(method: HttpMethod, path: string, middleware: express.Handler[], routeHandler: ApiRequestHandler, resultHandler: ApiResultHandler | null = null, transactional: boolean) { router[method](path, ...(middleware as express.Handler[]), (req: express.Request, res: express.Response, next: express.NextFunction) => { const start = Date.now(); diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index 85eb46000..cadc5d3c0 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -69,7 +69,7 @@ import etapiSpecialNoteRoutes from "../etapi/special_notes.js"; import etapiSpecRoute from "../etapi/spec.js"; import etapiBackupRoute from "../etapi/backup.js"; import apiDocsRoute from "./api_docs.js"; -import { apiResultHandler, apiRoute, route, router, uploadMiddlewareWithErrorHandling } from "./route_api.js"; +import { apiResultHandler, apiRoute, asyncRoute, route, router, uploadMiddlewareWithErrorHandling } from "./route_api.js"; const GET = "get", PST = "post", @@ -243,10 +243,10 @@ function register(app: express.Application) { // group of the services below are meant to be executed from the outside route(GET, "/api/setup/status", [], setupApiRoute.getStatus, apiResultHandler); - route(PST, "/api/setup/new-document", [auth.checkAppNotInitialized], setupApiRoute.setupNewDocument, apiResultHandler, false); - route(PST, "/api/setup/sync-from-server", [auth.checkAppNotInitialized], setupApiRoute.setupSyncFromServer, apiResultHandler, false); + asyncRoute(PST, "/api/setup/new-document", [auth.checkAppNotInitialized], setupApiRoute.setupNewDocument, apiResultHandler); + asyncRoute(PST, "/api/setup/sync-from-server", [auth.checkAppNotInitialized], setupApiRoute.setupSyncFromServer, apiResultHandler); route(GET, "/api/setup/sync-seed", [auth.checkCredentials], setupApiRoute.getSyncSeed, apiResultHandler); - route(PST, "/api/setup/sync-seed", [auth.checkAppNotInitialized], setupApiRoute.saveSyncSeed, apiResultHandler, false); + asyncRoute(PST, "/api/setup/sync-seed", [auth.checkAppNotInitialized], setupApiRoute.saveSyncSeed, apiResultHandler); apiRoute(GET, "/api/autocomplete", autocompleteApiRoute.getAutocomplete); apiRoute(GET, "/api/autocomplete/notesCount", autocompleteApiRoute.getNotesCount); @@ -300,25 +300,25 @@ function register(app: express.Application) { apiRoute(GET, "/api/sql/schema", sqlRoute.getSchema); apiRoute(PST, "/api/sql/execute/:noteId", sqlRoute.execute); - route(PST, "/api/database/anonymize/:type", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.anonymize, apiResultHandler, false); + asyncRoute(PST, "/api/database/anonymize/:type", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.anonymize, apiResultHandler); apiRoute(GET, "/api/database/anonymized-databases", databaseRoute.getExistingAnonymizedDatabases); if (process.env.TRILIUM_INTEGRATION_TEST === "memory") { - route(PST, "/api/database/rebuild/", [auth.checkApiAuthOrElectron], databaseRoute.rebuildIntegrationTestDatabase, apiResultHandler, false); + asyncRoute(PST, "/api/database/rebuild/", [auth.checkApiAuthOrElectron], databaseRoute.rebuildIntegrationTestDatabase, apiResultHandler); } // backup requires execution outside of transaction - route(PST, "/api/database/backup-database", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.backupDatabase, apiResultHandler, false); + asyncRoute(PST, "/api/database/backup-database", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.backupDatabase, apiResultHandler); apiRoute(GET, "/api/database/backups", databaseRoute.getExistingBackups); // VACUUM requires execution outside of transaction - route(PST, "/api/database/vacuum-database", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.vacuumDatabase, apiResultHandler, false); + asyncRoute(PST, "/api/database/vacuum-database", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.vacuumDatabase, apiResultHandler); - route(PST, "/api/database/find-and-fix-consistency-issues", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.findAndFixConsistencyIssues, apiResultHandler, false); + asyncRoute(PST, "/api/database/find-and-fix-consistency-issues", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.findAndFixConsistencyIssues, apiResultHandler); apiRoute(GET, "/api/database/check-integrity", databaseRoute.checkIntegrity); - route(PST, "/api/script/exec", [auth.checkApiAuth, csrfMiddleware], scriptRoute.exec, apiResultHandler, false); + asyncRoute(PST, "/api/script/exec", [auth.checkApiAuth, csrfMiddleware], scriptRoute.exec, apiResultHandler); apiRoute(PST, "/api/script/run/:noteId", scriptRoute.run); apiRoute(GET, "/api/script/startup", scriptRoute.getStartupBundles);