This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

semble / src / modules / user / tests / infrastructure / InMemoryFollowsRepository.ts
2.2 kB 84 lines
1import { Result, ok, err } from 'src/shared/core/Result'; 2import { Follow } from '../../domain/Follow'; 3import { IFollowsRepository } from '../../domain/repositories/IFollowsRepository'; 4import { 5 FollowTargetType, 6 FollowTargetTypeEnum, 7} from '../../domain/value-objects/FollowTargetType'; 8 9export class InMemoryFollowsRepository implements IFollowsRepository { 10 private static instance: InMemoryFollowsRepository; 11 private follows: Map<string, Follow> = new Map(); 12 13 private constructor() {} 14 15 public static getInstance(): InMemoryFollowsRepository { 16 if (!InMemoryFollowsRepository.instance) { 17 InMemoryFollowsRepository.instance = new InMemoryFollowsRepository(); 18 } 19 return InMemoryFollowsRepository.instance; 20 } 21 22 async getFollowers( 23 targetId: string, 24 targetType: FollowTargetType, 25 ): Promise<Result<Follow[]>> { 26 try { 27 const followers: Follow[] = []; 28 29 for (const follow of this.follows.values()) { 30 if ( 31 follow.targetId === targetId && 32 follow.targetType.equals(targetType) 33 ) { 34 followers.push(follow); 35 } 36 } 37 38 return ok(followers); 39 } catch (error: any) { 40 return err(error); 41 } 42 } 43 44 async getFollowersOfCollections( 45 collectionIds: string[], 46 ): Promise<Result<Follow[]>> { 47 try { 48 if (collectionIds.length === 0) { 49 return ok([]); 50 } 51 52 const followers: Follow[] = []; 53 54 for (const follow of this.follows.values()) { 55 if ( 56 collectionIds.includes(follow.targetId) && 57 follow.targetType.value === FollowTargetTypeEnum.COLLECTION 58 ) { 59 followers.push(follow); 60 } 61 } 62 63 return ok(followers); 64 } catch (error: any) { 65 return err(error); 66 } 67 } 68 69 // Helper method for testing 70 async save(follow: Follow): Promise<Result<void>> { 71 try { 72 const key = `${follow.followerId.value}:${follow.targetId}:${follow.targetType.value}`; 73 this.follows.set(key, follow); 74 return ok(undefined); 75 } catch (error: any) { 76 return err(error); 77 } 78 } 79 80 // Helper method for testing 81 clear(): void { 82 this.follows.clear(); 83 } 84}