@@ -5,9 +5,9 @@ use thiserror::Error;
5
5
use valens_domain as domain;
6
6
7
7
#[ derive( Clone ) ]
8
- pub struct Storage ;
8
+ pub struct REST ;
9
9
10
- impl domain:: Repository for Storage {
10
+ impl domain:: SessionRepository for REST {
11
11
async fn request_session ( & self , user_id : domain:: UserID ) -> Result < domain:: User , String > {
12
12
let r: User = fetch (
13
13
Request :: post ( "api/session" )
@@ -28,11 +28,15 @@ impl domain::Repository for Storage {
28
28
async fn delete_session ( & self ) -> Result < ( ) , String > {
29
29
fetch_no_content ( Request :: delete ( "api/session" ) . build ( ) . unwrap ( ) , ( ) ) . await
30
30
}
31
+ }
31
32
33
+ impl domain:: VersionRepository for REST {
32
34
async fn read_version ( & self ) -> Result < String , String > {
33
35
fetch ( Request :: get ( "api/version" ) . build ( ) . unwrap ( ) ) . await
34
36
}
37
+ }
35
38
39
+ impl domain:: UserRepository for REST {
36
40
async fn read_users ( & self ) -> Result < Vec < domain:: User > , String > {
37
41
let r: Vec < User > = fetch ( Request :: get ( "api/users" ) . build ( ) . unwrap ( ) ) . await ?;
38
42
r. into_iter ( )
@@ -41,6 +45,7 @@ impl domain::Repository for Storage {
41
45
} )
42
46
. collect :: < Result < Vec < domain:: User > , String > > ( )
43
47
}
48
+
44
49
async fn create_user (
45
50
& self ,
46
51
name : domain:: Name ,
@@ -58,6 +63,7 @@ impl domain::Repository for Storage {
58
63
r. try_into ( )
59
64
. map_err ( |err : domain:: NameError | err. to_string ( ) )
60
65
}
66
+
61
67
async fn replace_user ( & self , user : domain:: User ) -> Result < domain:: User , String > {
62
68
let r: User = fetch (
63
69
Request :: put ( & format ! ( "api/users/{}" , user. id. as_u128( ) ) )
@@ -68,6 +74,7 @@ impl domain::Repository for Storage {
68
74
r. try_into ( )
69
75
. map_err ( |err : domain:: NameError | err. to_string ( ) )
70
76
}
77
+
71
78
async fn delete_user ( & self , id : domain:: UserID ) -> Result < domain:: UserID , String > {
72
79
fetch_no_content (
73
80
Request :: delete ( & format ! ( "api/users/{}" , id. as_u128( ) ) )
@@ -77,11 +84,14 @@ impl domain::Repository for Storage {
77
84
)
78
85
. await
79
86
}
87
+ }
80
88
89
+ impl domain:: BodyWeightRepository for REST {
81
90
async fn read_body_weight ( & self ) -> Result < Vec < domain:: BodyWeight > , String > {
82
91
let r: Vec < BodyWeight > = fetch ( Request :: get ( "api/body_weight" ) . build ( ) . unwrap ( ) ) . await ?;
83
92
Ok ( r. into_iter ( ) . map ( domain:: BodyWeight :: from) . collect ( ) )
84
93
}
94
+
85
95
async fn create_body_weight (
86
96
& self ,
87
97
body_weight : domain:: BodyWeight ,
@@ -94,6 +104,7 @@ impl domain::Repository for Storage {
94
104
. await ?;
95
105
Ok ( r. into ( ) )
96
106
}
107
+
97
108
async fn replace_body_weight (
98
109
& self ,
99
110
body_weight : domain:: BodyWeight ,
@@ -106,6 +117,7 @@ impl domain::Repository for Storage {
106
117
. await ?;
107
118
Ok ( r. into ( ) )
108
119
}
120
+
109
121
async fn delete_body_weight ( & self , date : NaiveDate ) -> Result < NaiveDate , String > {
110
122
fetch_no_content (
111
123
Request :: delete ( & format ! ( "api/body_weight/{date}" ) )
@@ -115,11 +127,14 @@ impl domain::Repository for Storage {
115
127
)
116
128
. await
117
129
}
130
+ }
118
131
132
+ impl domain:: BodyFatRepository for REST {
119
133
async fn read_body_fat ( & self ) -> Result < Vec < domain:: BodyFat > , String > {
120
134
let r: Vec < BodyFat > = fetch ( Request :: get ( "api/body_fat" ) . build ( ) . unwrap ( ) ) . await ?;
121
135
Ok ( r. into_iter ( ) . map ( domain:: BodyFat :: from) . collect ( ) )
122
136
}
137
+
123
138
async fn create_body_fat ( & self , body_fat : domain:: BodyFat ) -> Result < domain:: BodyFat , String > {
124
139
let r: BodyFat = fetch (
125
140
Request :: post ( "api/body_fat" )
@@ -129,6 +144,7 @@ impl domain::Repository for Storage {
129
144
. await ?;
130
145
Ok ( r. into ( ) )
131
146
}
147
+
132
148
async fn replace_body_fat ( & self , body_fat : domain:: BodyFat ) -> Result < domain:: BodyFat , String > {
133
149
let r: BodyFat = fetch (
134
150
Request :: put ( & format ! ( "api/body_fat/{}" , body_fat. date) )
@@ -138,6 +154,7 @@ impl domain::Repository for Storage {
138
154
. await ?;
139
155
Ok ( r. into ( ) )
140
156
}
157
+
141
158
async fn delete_body_fat ( & self , date : NaiveDate ) -> Result < NaiveDate , String > {
142
159
fetch_no_content (
143
160
Request :: delete ( & format ! ( "api/body_fat/{date}" ) )
@@ -147,7 +164,9 @@ impl domain::Repository for Storage {
147
164
)
148
165
. await
149
166
}
167
+ }
150
168
169
+ impl domain:: PeriodRepository for REST {
151
170
async fn read_period ( & self ) -> Result < Vec < domain:: Period > , String > {
152
171
let r: Vec < Period > = fetch ( Request :: get ( "api/period" ) . build ( ) . unwrap ( ) ) . await ?;
153
172
r. into_iter ( )
@@ -156,6 +175,7 @@ impl domain::Repository for Storage {
156
175
} )
157
176
. collect :: < Result < Vec < domain:: Period > , String > > ( )
158
177
}
178
+
159
179
async fn create_period ( & self , period : domain:: Period ) -> Result < domain:: Period , String > {
160
180
let r: Period = fetch (
161
181
Request :: post ( "api/period" )
@@ -166,6 +186,7 @@ impl domain::Repository for Storage {
166
186
r. try_into ( )
167
187
. map_err ( |err : domain:: IntensityError | err. to_string ( ) )
168
188
}
189
+
169
190
async fn replace_period ( & self , period : domain:: Period ) -> Result < domain:: Period , String > {
170
191
let r: Period = fetch (
171
192
Request :: put ( & format ! ( "api/period/{}" , period. date) )
@@ -176,6 +197,7 @@ impl domain::Repository for Storage {
176
197
r. try_into ( )
177
198
. map_err ( |err : domain:: IntensityError | err. to_string ( ) )
178
199
}
200
+
179
201
async fn delete_period ( & self , date : NaiveDate ) -> Result < NaiveDate , String > {
180
202
fetch_no_content (
181
203
Request :: delete ( & format ! ( "api/period/{date}" ) )
@@ -185,7 +207,9 @@ impl domain::Repository for Storage {
185
207
)
186
208
. await
187
209
}
210
+ }
188
211
212
+ impl domain:: ExerciseRepository for REST {
189
213
async fn read_exercises ( & self ) -> Result < Vec < domain:: Exercise > , String > {
190
214
let r: Vec < Exercise > = fetch ( Request :: get ( "api/exercises" ) . build ( ) . unwrap ( ) ) . await ?;
191
215
r. into_iter ( )
@@ -194,6 +218,7 @@ impl domain::Repository for Storage {
194
218
} )
195
219
. collect :: < Result < Vec < domain:: Exercise > , String > > ( )
196
220
}
221
+
197
222
async fn create_exercise (
198
223
& self ,
199
224
name : domain:: Name ,
@@ -210,6 +235,7 @@ impl domain::Repository for Storage {
210
235
. await ?;
211
236
r. try_into ( ) . map_err ( |err : ExerciseError | err. to_string ( ) )
212
237
}
238
+
213
239
async fn replace_exercise (
214
240
& self ,
215
241
exercise : domain:: Exercise ,
@@ -222,6 +248,7 @@ impl domain::Repository for Storage {
222
248
. await ?;
223
249
r. try_into ( ) . map_err ( |err : ExerciseError | err. to_string ( ) )
224
250
}
251
+
225
252
async fn delete_exercise ( & self , id : domain:: ExerciseID ) -> Result < domain:: ExerciseID , String > {
226
253
fetch_no_content (
227
254
Request :: delete ( & format ! ( "api/exercises/{}" , id. as_u128( ) ) )
@@ -231,7 +258,9 @@ impl domain::Repository for Storage {
231
258
)
232
259
. await
233
260
}
261
+ }
234
262
263
+ impl domain:: RoutineRepository for REST {
235
264
async fn read_routines ( & self ) -> Result < Vec < domain:: Routine > , String > {
236
265
let r: Vec < Routine > = fetch ( Request :: get ( "api/routines" ) . build ( ) . unwrap ( ) ) . await ?;
237
266
r. into_iter ( )
@@ -240,6 +269,7 @@ impl domain::Repository for Storage {
240
269
} )
241
270
. collect :: < Result < Vec < domain:: Routine > , String > > ( )
242
271
}
272
+
243
273
async fn create_routine (
244
274
& self ,
245
275
name : domain:: Name ,
@@ -259,6 +289,7 @@ impl domain::Repository for Storage {
259
289
r. try_into ( )
260
290
. map_err ( |err : domain:: NameError | err. to_string ( ) )
261
291
}
292
+
262
293
async fn modify_routine (
263
294
& self ,
264
295
id : domain:: RoutineID ,
@@ -293,6 +324,7 @@ impl domain::Repository for Storage {
293
324
r. try_into ( )
294
325
. map_err ( |err : domain:: NameError | err. to_string ( ) )
295
326
}
327
+
296
328
async fn delete_routine ( & self , id : domain:: RoutineID ) -> Result < domain:: RoutineID , String > {
297
329
fetch_no_content (
298
330
Request :: delete ( & format ! ( "api/routines/{}" , id. as_u128( ) ) )
@@ -302,11 +334,14 @@ impl domain::Repository for Storage {
302
334
)
303
335
. await
304
336
}
337
+ }
305
338
339
+ impl domain:: TrainingSessionRepository for REST {
306
340
async fn read_training_sessions ( & self ) -> Result < Vec < domain:: TrainingSession > , String > {
307
341
let r: Vec < TrainingSession > = fetch ( Request :: get ( "api/workouts" ) . build ( ) . unwrap ( ) ) . await ?;
308
342
Ok ( r. into_iter ( ) . map ( domain:: TrainingSession :: from) . collect ( ) )
309
343
}
344
+
310
345
async fn create_training_session (
311
346
& self ,
312
347
routine_id : domain:: RoutineID ,
@@ -334,6 +369,7 @@ impl domain::Repository for Storage {
334
369
. await ?;
335
370
Ok ( r. into ( ) )
336
371
}
372
+
337
373
async fn modify_training_session (
338
374
& self ,
339
375
id : domain:: TrainingSessionID ,
@@ -363,6 +399,7 @@ impl domain::Repository for Storage {
363
399
. await ?;
364
400
Ok ( r. into ( ) )
365
401
}
402
+
366
403
async fn delete_training_session (
367
404
& self ,
368
405
id : domain:: TrainingSessionID ,
0 commit comments