Przeglądaj źródła

feat(api-gateway): add unsubscribe from emails endpoint

Karol Sójko 2 lat temu
rodzic
commit
22d6a02d04

+ 1 - 0
packages/api-gateway/.env.sample

@@ -11,6 +11,7 @@ WEB_SOCKET_SERVER_URL=http://websockets:3000
 PAYMENTS_SERVER_URL=http://payments:3000
 FILES_SERVER_URL=http://files:3000
 REVISIONS_SERVER_URL=http://revisions:3000
+EMAIL_SERVER_URL=http://email:3000
 
 HTTP_CALL_TIMEOUT=60000
 

+ 1 - 0
packages/api-gateway/src/Bootstrap/Container.ts

@@ -55,6 +55,7 @@ export class ContainerConfigLoader {
     container.bind(TYPES.SYNCING_SERVER_JS_URL).toConstantValue(env.get('SYNCING_SERVER_JS_URL'))
     container.bind(TYPES.AUTH_SERVER_URL).toConstantValue(env.get('AUTH_SERVER_URL'))
     container.bind(TYPES.REVISIONS_SERVER_URL).toConstantValue(env.get('REVISIONS_SERVER_URL', true))
+    container.bind(TYPES.EMAIL_SERVER_URL).toConstantValue(env.get('EMAIL_SERVER_URL', true))
     container.bind(TYPES.PAYMENTS_SERVER_URL).toConstantValue(env.get('PAYMENTS_SERVER_URL', true))
     container.bind(TYPES.FILES_SERVER_URL).toConstantValue(env.get('FILES_SERVER_URL', true))
     container.bind(TYPES.AUTH_JWT_SECRET).toConstantValue(env.get('AUTH_JWT_SECRET'))

+ 1 - 0
packages/api-gateway/src/Bootstrap/Types.ts

@@ -8,6 +8,7 @@ const TYPES = {
   PAYMENTS_SERVER_URL: Symbol.for('PAYMENTS_SERVER_URL'),
   FILES_SERVER_URL: Symbol.for('FILES_SERVER_URL'),
   REVISIONS_SERVER_URL: Symbol.for('REVISIONS_SERVER_URL'),
+  EMAIL_SERVER_URL: Symbol.for('EMAIL_SERVER_URL'),
   WORKSPACE_SERVER_URL: Symbol.for('WORKSPACE_SERVER_URL'),
   WEB_SOCKET_SERVER_URL: Symbol.for('WEB_SOCKET_SERVER_URL'),
   AUTH_JWT_SECRET: Symbol.for('AUTH_JWT_SECRET'),

+ 10 - 0
packages/api-gateway/src/Controller/v1/ActionsController.ts

@@ -29,4 +29,14 @@ export class ActionsController extends BaseHttpController {
   async methods(request: Request, response: Response): Promise<void> {
     await this.httpService.callAuthServer(request, response, 'auth/methods', request.body)
   }
+
+  @httpGet('/unsubscribe/:token')
+  async emailUnsubscribe(request: Request, response: Response): Promise<void> {
+    await this.httpService.callEmailServer(
+      request,
+      response,
+      `subscriptions/actions/unsubscribe/${request.params.token}`,
+      request.body,
+    )
+  }
 }

+ 16 - 0
packages/api-gateway/src/Service/Http/HttpService.ts

@@ -19,6 +19,7 @@ export class HttpService implements HttpServiceInterface {
     @inject(TYPES.WORKSPACE_SERVER_URL) private workspaceServerUrl: string,
     @inject(TYPES.WEB_SOCKET_SERVER_URL) private webSocketServerUrl: string,
     @inject(TYPES.REVISIONS_SERVER_URL) private revisionsServerUrl: string,
+    @inject(TYPES.EMAIL_SERVER_URL) private emailServerUrl: string,
     @inject(TYPES.HTTP_CALL_TIMEOUT) private httpCallTimeout: number,
     @inject(TYPES.CrossServiceTokenCache) private crossServiceTokenCache: CrossServiceTokenCacheInterface,
     @inject(TYPES.Logger) private logger: Logger,
@@ -65,6 +66,21 @@ export class HttpService implements HttpServiceInterface {
     await this.callServer(this.authServerUrl, request, response, endpoint, payload)
   }
 
+  async callEmailServer(
+    request: Request,
+    response: Response,
+    endpoint: string,
+    payload?: Record<string, unknown> | string,
+  ): Promise<void> {
+    if (!this.emailServerUrl) {
+      response.status(400).send({ message: 'Email Server not configured' })
+
+      return
+    }
+
+    await this.callServer(this.emailServerUrl, request, response, endpoint, payload)
+  }
+
   async callWorkspaceServer(
     request: Request,
     response: Response,

+ 6 - 0
packages/api-gateway/src/Service/Http/HttpServiceInterface.ts

@@ -1,6 +1,12 @@
 import { Request, Response } from 'express'
 
 export interface HttpServiceInterface {
+  callEmailServer(
+    request: Request,
+    response: Response,
+    endpoint: string,
+    payload?: Record<string, unknown> | string,
+  ): Promise<void>
   callAuthServer(
     request: Request,
     response: Response,