[OCaml] High Intensity Training Online
refactor standardize saved record edits
lib/app/service.ml
@@ -205,36 +205,29 @@
205
205
module Records = struct
206
206
let find_record t trainee id = R.find t.repo trainee id
207
207
208
Removed:
let add_to_record t trainee id stimulus =
208
Added:
(* Apply every saved-record edit through the same lookup, validation, and
209
Added:
replacement path. This keeps add and correction operations consistent. *)
210
Added:
let update_record t trainee id ~edit =
209
211
R.find t.repo trainee id >>= function
210
212
| None -> Lwt.return (Error Unknown_workout)
211
213
| Some record -> (
212
Removed:
match
213
Removed:
Evidence.Workout.add_stimulus record.Repository.workout stimulus
214
Removed:
with
215
Removed:
| workout ->
214
Added:
match edit record.Repository.workout with
215
Added:
| Error error -> Lwt.return (Error (Rejected_edit error))
216
Added:
| Ok workout ->
216
217
R.replace t.repo trainee { record with Repository.workout }
217
218
>|= fun replaced ->
218
219
if replaced then Ok { record with Repository.workout }
219
Removed:
else Error Unknown_workout
220
Removed:
| exception Evidence.Workout.Invalid error ->
221
Removed:
Lwt.return (Error (Rejected_edit error)))
220
Added:
else Error Unknown_workout)
222
221
222
Added:
let add_to_record t trainee id stimulus =
223
Added:
update_record t trainee id ~edit:(fun workout ->
224
Added:
try Ok (Evidence.Workout.add_stimulus workout stimulus)
225
Added:
with Evidence.Workout.Invalid error -> Error error)
226
Added:
223
227
let replace_in_record t trainee id ~slot stimulus =
224
Removed:
R.find t.repo trainee id >>= function
225
Removed:
| None -> Lwt.return (Error Unknown_workout)
226
Removed:
| Some record -> (
227
Removed:
match
228
Removed:
Evidence.Workout.replace_stimulus record.Repository.workout ~slot
229
Removed:
stimulus
230
Removed:
with
231
Removed:
| workout ->
232
Removed:
R.replace t.repo trainee { record with Repository.workout }
233
Removed:
>|= fun replaced ->
234
Removed:
if replaced then Ok { record with Repository.workout }
235
Removed:
else Error Unknown_workout
236
Removed:
| exception Evidence.Workout.Invalid error ->
237
Removed:
Lwt.return (Error (Rejected_edit error)))
228
Added:
update_record t trainee id ~edit:(fun workout ->
229
Added:
try Ok (Evidence.Workout.replace_stimulus workout ~slot stimulus)
230
Added:
with Evidence.Workout.Invalid error -> Error error)
238
231
239
232
let history t trainee = R.history t.repo trainee
240
233
end