@@ -5,17 +5,63 @@ export interface User {
55 created : Date ;
66}
77
8- export const usersRepo : { [ id : number ] : User } = {
9- 1 : {
10- id : 1 ,
11- name : 'Alice' ,
12- email : 'alice@example.com' ,
13- created : new Date ( '2023-01-01' ) ,
14- } ,
15- 2 : {
16- id : 2 ,
17- name : 'Bob' ,
18- email : 'bob@example.com' ,
19- created : new Date ( '2023-01-02' ) ,
20- } ,
21- } ;
8+ export class UsersRepository {
9+ protected readonly users : { [ id : number ] : User } = {
10+ 1 : {
11+ id : 1 ,
12+ name : 'Alice' ,
13+ email : 'alice@example.com' ,
14+ created : new Date ( '2023-01-01' ) ,
15+ } ,
16+ 2 : {
17+ id : 2 ,
18+ name : 'Bob' ,
19+ email : 'bob@example.com' ,
20+ created : new Date ( '2023-01-02' ) ,
21+ } ,
22+ } ;
23+
24+ public getAll ( ) : User [ ] {
25+ return Object . values ( this . users ) ;
26+ }
27+
28+ public getById ( id : number ) : User | undefined {
29+ return this . users [ id ] ;
30+ }
31+
32+ public add ( user : Omit < User , 'id' | 'created' > ) : User {
33+ const id = Math . max ( ...Object . keys ( this . users ) . map ( Number ) ) + 1 ;
34+
35+ const newUser : User = {
36+ ...user ,
37+ id,
38+ created : new Date ( ) ,
39+ } ;
40+
41+ this . users [ id ] = newUser ;
42+
43+ return newUser ;
44+ }
45+
46+ public update (
47+ id : number ,
48+ user : Partial < Omit < User , 'id' | 'created' > >
49+ ) : User | undefined {
50+ if ( ! this . users [ id ] ) {
51+ return undefined ;
52+ }
53+ this . users [ id ] = { ...this . users [ id ] , ...user } ;
54+
55+ return this . users [ id ] ;
56+ }
57+
58+ public delete ( id : number ) : boolean {
59+ if ( ! this . users [ id ] ) {
60+ return false ;
61+ }
62+
63+ delete this . users [ id ] ;
64+
65+ return true ;
66+ }
67+ }
0 commit comments