GetTransitionStatus.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { Result, RoleName, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
  2. import { GetTransitionStatusDTO } from './GetTransitionStatusDTO'
  3. import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
  4. import { TransitionStatusRepositoryInterface } from '../../Transition/TransitionStatusRepositoryInterface'
  5. export class GetTransitionStatus
  6. implements UseCaseInterface<'TO-DO' | 'STARTED' | 'IN_PROGRESS' | 'FINISHED' | 'FAILED'>
  7. {
  8. constructor(
  9. private transitionStatusRepository: TransitionStatusRepositoryInterface,
  10. private userRepository: UserRepositoryInterface,
  11. ) {}
  12. async execute(
  13. dto: GetTransitionStatusDTO,
  14. ): Promise<Result<'TO-DO' | 'STARTED' | 'IN_PROGRESS' | 'FINISHED' | 'FAILED'>> {
  15. const userUuidOrError = Uuid.create(dto.userUuid)
  16. if (userUuidOrError.isFailed()) {
  17. return Result.fail(userUuidOrError.getError())
  18. }
  19. const userUuid = userUuidOrError.getValue()
  20. const user = await this.userRepository.findOneByUuid(userUuid)
  21. if (user === null) {
  22. return Result.fail('User not found.')
  23. }
  24. const roles = await user.roles
  25. for (const role of roles) {
  26. if (role.name === RoleName.NAMES.TransitionUser) {
  27. return Result.ok('FINISHED')
  28. }
  29. }
  30. const transitionStatus = await this.transitionStatusRepository.getStatus(userUuid.value, dto.transitionType)
  31. if (transitionStatus === null) {
  32. return Result.ok('TO-DO')
  33. }
  34. return Result.ok(transitionStatus)
  35. }
  36. }