AddWebSocketsConnection.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { Logger } from 'winston'
  2. import { Result, Timestamps, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
  3. import { TimerInterface } from '@standardnotes/time'
  4. import { WebSocketsConnectionRepositoryInterface } from '../../WebSockets/WebSocketsConnectionRepositoryInterface'
  5. import { AddWebSocketsConnectionDTO } from './AddWebSocketsConnectionDTO'
  6. import { Connection } from '../../Connection/Connection'
  7. export class AddWebSocketsConnection implements UseCaseInterface<void> {
  8. constructor(
  9. private webSocketsConnectionRepository: WebSocketsConnectionRepositoryInterface,
  10. private timer: TimerInterface,
  11. private logger: Logger,
  12. ) {}
  13. async execute(dto: AddWebSocketsConnectionDTO): Promise<Result<void>> {
  14. try {
  15. this.logger.debug(`Persisting connection ${dto.connectionId} for user ${dto.userUuid}`)
  16. const userUuidOrError = Uuid.create(dto.userUuid)
  17. if (userUuidOrError.isFailed()) {
  18. return Result.fail(userUuidOrError.getError())
  19. }
  20. const userUuid = userUuidOrError.getValue()
  21. const sessionUuidOrError = Uuid.create(dto.sessionUuid)
  22. if (sessionUuidOrError.isFailed()) {
  23. return Result.fail(sessionUuidOrError.getError())
  24. }
  25. const sessionUuid = sessionUuidOrError.getValue()
  26. const connectionOrError = Connection.create({
  27. userUuid,
  28. sessionUuid,
  29. connectionId: dto.connectionId,
  30. timestamps: Timestamps.create(
  31. this.timer.getTimestampInMicroseconds(),
  32. this.timer.getTimestampInMicroseconds(),
  33. ).getValue(),
  34. })
  35. /* istanbul ignore next */
  36. if (connectionOrError.isFailed()) {
  37. return Result.fail(connectionOrError.getError())
  38. }
  39. const connection = connectionOrError.getValue()
  40. await this.webSocketsConnectionRepository.saveConnection(connection)
  41. return Result.ok()
  42. } catch (error) {
  43. this.logger.error(
  44. `Error persisting connection ${dto.connectionId} for user ${dto.userUuid}: ${(error as Error).message}`,
  45. )
  46. return Result.fail((error as Error).message)
  47. }
  48. }
  49. }