From 3e84274149153fe96da62624f58d74cde7fdf122 Mon Sep 17 00:00:00 2001 From: sjaanus Date: Mon, 16 Dec 2024 16:35:02 +0200 Subject: [PATCH] Try to make events work properly --- .../client-feature-toggle-delta-controller.ts | 82 +++++++++---------- .../client-feature-delta-api.e2e.test.ts | 15 +++- 2 files changed, 55 insertions(+), 42 deletions(-) diff --git a/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-controller.ts b/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-controller.ts index 0d42aa7468..afa0769be7 100644 --- a/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-controller.ts +++ b/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-controller.ts @@ -73,6 +73,47 @@ export default class ClientFeatureToggleDeltaController extends Controller { }); } + async getDelta( + req: IAuthRequest, + res: Response, + ): Promise { + if (!this.flagResolver.isEnabled('deltaApi')) { + throw new NotFoundError(); + } + const query = await this.resolveQuery(req); + const etag = req.headers['if-none-match']; + + const currentSdkRevisionId = etag ? Number.parseInt(etag) : undefined; + + const changedFeatures = + await this.clientFeatureToggleService.getClientDelta( + currentSdkRevisionId, + query, + ); + + if (!changedFeatures) { + res.status(304); + res.getHeaderNames().forEach((header) => res.removeHeader(header)); + res.end(); + return; + } + + if (changedFeatures.revisionId === currentSdkRevisionId) { + res.status(304); + res.getHeaderNames().forEach((header) => res.removeHeader(header)); + res.end(); + return; + } + + res.setHeader('ETag', changedFeatures.revisionId.toString()); + this.openApiService.respondWithValidation( + 200, + res, + clientFeaturesDeltaSchema.$id, + changedFeatures, + ); + } + private async resolveQuery( req: IAuthRequest, ): Promise { @@ -139,45 +180,4 @@ export default class ClientFeatureToggleDeltaController extends Controller { return query; } - - async getDelta( - req: IAuthRequest, - res: Response, - ): Promise { - if (!this.flagResolver.isEnabled('deltaApi')) { - throw new NotFoundError(); - } - const query = await this.resolveQuery(req); - const etag = req.headers['if-none-match']; - - const currentSdkRevisionId = etag ? Number.parseInt(etag) : undefined; - - const changedFeatures = - await this.clientFeatureToggleService.getClientDelta( - currentSdkRevisionId, - query, - ); - - if (!changedFeatures) { - res.status(304); - res.getHeaderNames().forEach((header) => res.removeHeader(header)); - res.end(); - return; - } - - if (changedFeatures.revisionId === currentSdkRevisionId) { - res.status(304); - res.getHeaderNames().forEach((header) => res.removeHeader(header)); - res.end(); - return; - } - - res.setHeader('ETag', changedFeatures.revisionId.toString()); - this.openApiService.respondWithValidation( - 200, - res, - clientFeaturesDeltaSchema.$id, - changedFeatures, - ); - } } diff --git a/src/lib/features/client-feature-toggles/tests/client-feature-delta-api.e2e.test.ts b/src/lib/features/client-feature-toggles/tests/client-feature-delta-api.e2e.test.ts index bbebaa070f..add73732f0 100644 --- a/src/lib/features/client-feature-toggles/tests/client-feature-delta-api.e2e.test.ts +++ b/src/lib/features/client-feature-toggles/tests/client-feature-delta-api.e2e.test.ts @@ -170,11 +170,24 @@ test('should match with /api/client/delta', async () => { test('should get 304 if asked for latest revision', async () => { await setupFeatures(db, app); + // const waitForEvent : Promise = new Promise((resolve) => { + // app.services.configurationRevisionService.once(UPDATE_REVISION, () => { + // resolve(); + // }); + // }); + + await app.services.configurationRevisionService.updateMaxRevisionId(); + // app.services.configurationRevisionService.emit(UPDATE_REVISION); + + await new Promise((resolve) => setTimeout(resolve, 100)); + + // await waitForEvent; + const events = await db.rawDatabase('events').select('*'); console.log(events); await app.request - .set('If-None-Match', '10') + .set('If-None-Match', '14') .get('/api/client/delta') .expect(304); });