GetTransitionStatus.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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 implements UseCaseInterface<'TO-DO' | 'STARTED' | 'FINISHED' | 'FAILED'> {
  6. constructor(
  7. private transitionStatusRepository: TransitionStatusRepositoryInterface,
  8. private userRepository: UserRepositoryInterface,
  9. ) {}
  10. async execute(dto: GetTransitionStatusDTO): Promise<Result<'TO-DO' | 'STARTED' | 'FINISHED' | 'FAILED'>> {
  11. const userUuidOrError = Uuid.create(dto.userUuid)
  12. if (userUuidOrError.isFailed()) {
  13. return Result.fail(userUuidOrError.getError())
  14. }
  15. const userUuid = userUuidOrError.getValue()
  16. const user = await this.userRepository.findOneByUuid(userUuid)
  17. if (user === null) {
  18. return Result.fail('User not found.')
  19. }
  20. const roles = await user.roles
  21. for (const role of roles) {
  22. if (role.name === RoleName.NAMES.TransitionUser) {
  23. return Result.ok('FINISHED')
  24. }
  25. }
  26. const transitionStatus = await this.transitionStatusRepository.getStatus(userUuid.value)
  27. if (transitionStatus === null) {
  28. return Result.ok('TO-DO')
  29. }
  30. return Result.ok(transitionStatus)
  31. }
  32. }