Source file sihl_cache.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
let log_src = Logs.Src.create ("sihl.service." ^ Sihl.Contract.Cache.name)
module Logs = (val Logs.src_log log_src : Logs.LOG)
module MakeSql (Repo : Repo_sql.Sig) : Sihl.Contract.Cache.Sig = struct
let find = Repo.find
let set (k, v) =
let open Lwt.Syntax in
match v with
| Some v ->
let* old_v = find k in
(match old_v with
| Some _ -> Repo.update (k, v)
| None -> Repo.insert (k, v))
| None ->
let* old_v = find k in
(match old_v with
| Some _ -> Repo.delete k
| None ->
Lwt.return ())
;;
let start () = Lwt.return ()
let stop () = Lwt.return ()
let lifecycle =
Sihl.Container.create_lifecycle
Sihl.Contract.Cache.name
~dependencies:(fun () -> Repo.lifecycles)
~start
~stop
;;
let register () =
Repo.register_migration ();
Repo.register_cleaner ();
Sihl.Container.Service.create lifecycle
;;
end
module PostgreSql =
MakeSql (Repo_sql.MakePostgreSql (Sihl.Database.Migration.PostgreSql))
module MariaDb = MakeSql (Repo_sql.MakeMariaDb (Sihl.Database.Migration.MariaDb))