AnnotatedWebSocketsController.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { WebSocketServerInterface } from '@standardnotes/api'
  2. import { Request, Response } from 'express'
  3. import { inject } from 'inversify'
  4. import {
  5. BaseHttpController,
  6. controller,
  7. httpDelete,
  8. httpPost,
  9. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  10. results,
  11. } from 'inversify-express-utils'
  12. import TYPES from '../../Bootstrap/Types'
  13. import { AddWebSocketsConnection } from '../../Domain/UseCase/AddWebSocketsConnection/AddWebSocketsConnection'
  14. import { RemoveWebSocketsConnection } from '../../Domain/UseCase/RemoveWebSocketsConnection/RemoveWebSocketsConnection'
  15. @controller('/sockets')
  16. export class AnnotatedWebSocketsController extends BaseHttpController {
  17. constructor(
  18. @inject(TYPES.AddWebSocketsConnection) private addWebSocketsConnection: AddWebSocketsConnection,
  19. @inject(TYPES.RemoveWebSocketsConnection) private removeWebSocketsConnection: RemoveWebSocketsConnection,
  20. @inject(TYPES.WebSocketsController) private webSocketsController: WebSocketServerInterface,
  21. ) {
  22. super()
  23. }
  24. @httpPost('/tokens', TYPES.ApiGatewayAuthMiddleware)
  25. async createConnectionToken(_request: Request, response: Response): Promise<results.JsonResult> {
  26. const result = await this.webSocketsController.createConnectionToken({
  27. userUuid: response.locals.user.uuid,
  28. })
  29. return this.json(result.data, result.status)
  30. }
  31. @httpPost('/connections/:connectionId', TYPES.ApiGatewayAuthMiddleware)
  32. async storeWebSocketsConnection(
  33. request: Request,
  34. response: Response,
  35. ): Promise<results.OkResult | results.BadRequestResult> {
  36. const result = await this.addWebSocketsConnection.execute({
  37. userUuid: response.locals.user.uuid,
  38. connectionId: request.params.connectionId,
  39. })
  40. if (result.isFailed()) {
  41. return this.badRequest()
  42. }
  43. return this.ok()
  44. }
  45. @httpDelete('/connections/:connectionId')
  46. async deleteWebSocketsConnection(request: Request): Promise<results.OkResult | results.BadRequestResult> {
  47. const result = await this.removeWebSocketsConnection.execute({ connectionId: request.params.connectionId })
  48. if (result.isFailed()) {
  49. return this.badRequest()
  50. }
  51. return this.ok()
  52. }
  53. }