typecode
TypeScriptRepository Pattern/repository.ts
1interface Entity {
2 id: string;
3 createdAt: Date;
4}
5
6interface Repository<T extends Entity> {
7 findById(id: string): T | undefined;
8 findAll(filter?: Partial<T>): T[];
9 save(entity: T): void;
10 delete(id: string): boolean;
11}
12
13class InMemoryRepository<T extends Entity> implements Repository<T> {
14 private store = new Map<string, T>();
15
16 findById(id: string): T | undefined {
17 return this.store.get(id);
18 }
19
20 findAll(filter?: Partial<T>): T[] {
21 const items = [...this.store.values()];
22 if (!filter) return items;
23 return items.filter((item) => {
24 return Object.entries(filter).every(
25 ([key, val]) => item[key as keyof T] === val
26 );
27 });
28 }
29
30 save(entity: T): void {
31 this.store.set(entity.id, { ...entity, createdAt: new Date() });
32 }
33
34 delete(id: string): boolean {
35 return this.store.delete(id);
36 }
37
38 get size(): number {
39 return this.store.size;
40 }
41}
42
43export type { Entity, Repository };
44export { InMemoryRepository };
0WPM
100%Accuracy
00:00Time
0%
Progress