A social knowledge tool for researchers built on ATProto
1import { Result, ok, err } from 'src/shared/core/Result';
2import { User } from '../../domain/User';
3import { IUserRepository } from '../../domain/repositories/IUserRepository';
4import { DID } from '../../domain/value-objects/DID';
5
6export class InMemoryUserRepository implements IUserRepository {
7 private static instance: InMemoryUserRepository;
8 private users: Map<string, User> = new Map();
9
10 private constructor() {}
11
12 public static getInstance(): InMemoryUserRepository {
13 if (!InMemoryUserRepository.instance) {
14 InMemoryUserRepository.instance = new InMemoryUserRepository();
15 }
16 return InMemoryUserRepository.instance;
17 }
18
19 async findByDID(did: DID): Promise<Result<User | null>> {
20 try {
21 const user = this.users.get(did.value);
22 return ok(user || null);
23 } catch (error: any) {
24 return err(error);
25 }
26 }
27
28 async save(user: User): Promise<Result<void>> {
29 try {
30 this.users.set(user.did.value, user);
31 return ok(undefined);
32 } catch (error: any) {
33 return err(error);
34 }
35 }
36
37 // Helper method for testing
38 clear(): void {
39 this.users.clear();
40 }
41}