mirror of
https://github.com/standardnotes/server
synced 2026-08-04 09:18:51 -04:00
44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import { Result, RoleName, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
|
|
|
|
import { GetTransitionStatusDTO } from './GetTransitionStatusDTO'
|
|
import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
|
|
import { TransitionStatusRepositoryInterface } from '../../Transition/TransitionStatusRepositoryInterface'
|
|
|
|
export class GetTransitionStatus
|
|
implements UseCaseInterface<'TO-DO' | 'STARTED' | 'IN_PROGRESS' | 'FINISHED' | 'FAILED'>
|
|
{
|
|
constructor(
|
|
private transitionStatusRepository: TransitionStatusRepositoryInterface,
|
|
private userRepository: UserRepositoryInterface,
|
|
) {}
|
|
|
|
async execute(
|
|
dto: GetTransitionStatusDTO,
|
|
): Promise<Result<'TO-DO' | 'STARTED' | 'IN_PROGRESS' | 'FINISHED' | 'FAILED'>> {
|
|
const userUuidOrError = Uuid.create(dto.userUuid)
|
|
if (userUuidOrError.isFailed()) {
|
|
return Result.fail(userUuidOrError.getError())
|
|
}
|
|
const userUuid = userUuidOrError.getValue()
|
|
|
|
const user = await this.userRepository.findOneByUuid(userUuid)
|
|
if (user === null) {
|
|
return Result.fail('User not found.')
|
|
}
|
|
|
|
const roles = await user.roles
|
|
for (const role of roles) {
|
|
if (role.name === RoleName.NAMES.TransitionUser) {
|
|
return Result.ok('FINISHED')
|
|
}
|
|
}
|
|
|
|
const transitionStatus = await this.transitionStatusRepository.getStatus(userUuid.value, dto.transitionType)
|
|
if (transitionStatus === null) {
|
|
return Result.ok('TO-DO')
|
|
}
|
|
|
|
return Result.ok(transitionStatus)
|
|
}
|
|
}
|