mirror of
https://github.com/standardnotes/server
synced 2026-07-14 00:01:54 -04:00
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import { UseCaseInterface } from '../UseCaseInterface'
|
|
import { inject, injectable } from 'inversify'
|
|
import TYPES from '../../../Bootstrap/Types'
|
|
import { GetUserFeaturesDto } from './GetUserFeaturesDto'
|
|
import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
|
|
import { GetUserFeaturesResponse } from './GetUserFeaturesResponse'
|
|
import { FeatureServiceInterface } from '../../Feature/FeatureServiceInterface'
|
|
import { Uuid } from '@standardnotes/domain-core'
|
|
|
|
@injectable()
|
|
export class GetUserFeatures implements UseCaseInterface {
|
|
constructor(
|
|
@inject(TYPES.Auth_UserRepository) private userRepository: UserRepositoryInterface,
|
|
@inject(TYPES.Auth_FeatureService) private featureService: FeatureServiceInterface,
|
|
) {}
|
|
|
|
async execute(dto: GetUserFeaturesDto): Promise<GetUserFeaturesResponse> {
|
|
if (dto.offline) {
|
|
const { features, roles } = await this.featureService.getFeaturesForOfflineUser(dto.email)
|
|
|
|
return {
|
|
success: true,
|
|
features,
|
|
roles,
|
|
}
|
|
}
|
|
|
|
const userUuidOrError = Uuid.create(dto.userUuid)
|
|
if (userUuidOrError.isFailed()) {
|
|
return {
|
|
success: false,
|
|
error: {
|
|
message: userUuidOrError.getError(),
|
|
},
|
|
}
|
|
}
|
|
const userUuid = userUuidOrError.getValue()
|
|
|
|
const user = await this.userRepository.findOneByUuid(userUuid)
|
|
|
|
if (user === null) {
|
|
return {
|
|
success: false,
|
|
error: {
|
|
message: `User ${userUuid.value} not found.`,
|
|
},
|
|
}
|
|
}
|
|
|
|
const userFeatures = await this.featureService.getFeaturesForUser(user)
|
|
|
|
return {
|
|
success: true,
|
|
userUuid: userUuid.value,
|
|
features: userFeatures,
|
|
}
|
|
}
|
|
}
|