A social knowledge tool for researchers built on ATProto
1import { User } from '../../domain/User';
2import { UserDTO } from '../dtos/UserDTO';
3import { DID } from '../../domain/value-objects/DID';
4import { Handle } from '../../domain/value-objects/Handle';
5import { UniqueEntityID } from 'src/shared/domain/UniqueEntityID';
6
7export class UserMap {
8 public static toDTO(user: User): UserDTO {
9 return {
10 did: user.did.value,
11 handle: user.handle?.value,
12 linkedAt: user.linkedAt,
13 lastLoginAt: user.lastLoginAt,
14 };
15 }
16
17 public static toDomain(dto: UserDTO): User {
18 const didOrError = DID.create(dto.did);
19
20 if (didOrError.isErr()) {
21 throw new Error(`Could not create DID: ${didOrError.error.message}`);
22 }
23
24 let handle: Handle | undefined;
25 if (dto.handle) {
26 const handleOrError = Handle.create(dto.handle);
27 if (handleOrError.isOk()) {
28 handle = handleOrError.value;
29 }
30 }
31
32 const userOrError = User.create(
33 {
34 did: didOrError.value,
35 handle,
36 linkedAt: dto.linkedAt,
37 lastLoginAt: dto.lastLoginAt,
38 },
39 new UniqueEntityID(dto.did),
40 );
41
42 if (userOrError.isErr()) {
43 throw new Error(`Could not create User: ${userOrError.error.message}`);
44 }
45
46 return userOrError.value;
47 }
48}