A social knowledge tool for researchers built on ATProto
at development 1.6 kB view raw
1import { UseCase } from 'src/shared/core/UseCase'; 2import { Result, err, ok } from 'src/shared/core/Result'; 3import { AppError } from 'src/shared/core/AppError'; 4import { IUserRepository } from '../../domain/repositories/IUserRepository'; 5import { UserDTO } from '../dtos/UserDTO'; 6import { DID } from '../../domain/value-objects/DID'; 7import { GetCurrentUserErrors } from './errors/GetCurrentUserErrors'; 8import { UserMap } from '../mappers/UserMap'; 9 10export interface GetCurrentUserDTO { 11 did: string; 12} 13 14export type GetCurrentUserResponse = Result< 15 UserDTO, 16 GetCurrentUserErrors.UserNotFoundError | AppError.UnexpectedError 17>; 18 19export class GetCurrentUserUseCase 20 implements UseCase<GetCurrentUserDTO, Promise<GetCurrentUserResponse>> 21{ 22 constructor(private userRepository: IUserRepository) {} 23 24 async execute(request: GetCurrentUserDTO): Promise<GetCurrentUserResponse> { 25 try { 26 const didOrError = DID.create(request.did); 27 28 if (didOrError.isErr()) { 29 return err(new GetCurrentUserErrors.UserNotFoundError()); 30 } 31 32 const userResult = await this.userRepository.findByDID(didOrError.value); 33 34 if (userResult.isErr()) { 35 return err(new AppError.UnexpectedError(userResult.error)); 36 } 37 38 const user = userResult.value; 39 40 if (!user) { 41 return err(new GetCurrentUserErrors.UserNotFoundError()); 42 } 43 44 // Map domain entity to DTO 45 const userDTO = UserMap.toDTO(user); 46 47 return ok(userDTO); 48 } catch (error: any) { 49 return err(new AppError.UnexpectedError(error)); 50 } 51 } 52}