A social knowledge tool for researchers built on ATProto
at main 41 lines 1.1 kB view raw
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}