a database layer insipred by caqti and ecto
1open Repodb
2
3type user = {
4 id : int;
5 name : string;
6 email : string;
7 age : int;
8 active : bool;
9}
10
11let make_user ?(id = 0) ?(name = "") ?(email = "") ?(age = 0) ?(active = true)
12 () =
13 { id; name; email; age; active }
14
15let users_table = Schema.table "users"
16
17let id_field : (user, int) Field.t =
18 Field.make ~table_name:"users" ~name:"id" ~ty:Types.int
19 ~get:(fun u -> u.id)
20 ~set:(fun v u -> { u with id = v })
21 ~primary_key:true ()
22
23let name_field : (user, string) Field.t =
24 Field.make ~table_name:"users" ~name:"name" ~ty:Types.string
25 ~get:(fun u -> u.name)
26 ~set:(fun v u -> { u with name = v })
27 ()
28
29let email_field : (user, string) Field.t =
30 Field.make ~table_name:"users" ~name:"email" ~ty:Types.string
31 ~get:(fun u -> u.email)
32 ~set:(fun v u -> { u with email = v })
33 ()
34
35let age_field : (user, int) Field.t =
36 Field.make ~table_name:"users" ~name:"age" ~ty:Types.int
37 ~get:(fun u -> u.age)
38 ~set:(fun v u -> { u with age = v })
39 ()
40
41let active_field : (user, bool) Field.t =
42 Field.make ~table_name:"users" ~name:"active" ~ty:Types.bool
43 ~get:(fun u -> u.active)
44 ~set:(fun v u -> { u with active = v })
45 ()