summaryrefslogtreecommitdiff
path: root/lib/handlers.ml
blob: 141d197b40a93ded437291eb3b4b1b05e3a6d4fb (plain)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
(* -*- mode: tuareg; -*- *)

let root _req = Views.root ()

module Repo = struct
  let ( let* ) m f =
    Lwt.bind m @@ function
    | Ok x -> f x
    | Error e ->
        let msg = Format.asprintf "%a" Resolvers.Store.pp_error e in
        Views.error_page msg

  let summary req =
    let repo = Dream.param req "repo" in
    let* branches = Resolvers.Branch.all repo in
    let* commits = Resolvers.Commit.recent repo 10 in
    let authors = [ "John Pork"; "Sebastian Jellybean" ] in
    Views.Repo.summary repo branches commits authors

  let log req =
    let repo = Dream.param req "repo" in
    let* commits = Resolvers.Commit.recent repo 100 in
    Views.Repo.log repo commits

  let files_at_head req =
    let repo = Dream.param req "repo" in
    let* tree = Resolvers.Tree.head repo in
    Views.Repo.files repo tree

  let file_id req =
    let repo = Dream.param req "repo" in
    let id = Dream.param req "id" in
    let* blob = Resolvers.Blob.of_id repo id in
    Views.Repo.file repo blob

  let refs req =
    let repo = Dream.param req "repo" in
    let* branches = Resolvers.Branch.all repo in
    Views.Repo.refs repo branches

  let commit req =
    let repo = Dream.param req "repo" in
    let id = Dream.param req "id" in
    let* commit = Resolvers.Commit.of_id repo id in
    Views.Repo.commit repo commit
end

let all_handlers =
  let open Dream in
  [
    get "/" root;
    scope "/:repo" []
      Repo.
        [
          get "/" summary;
          get "/summary/" summary;
          get "/log/" log;
          get "/files/" files_at_head;
          get "/file/:id" file_id;
          get "/refs/" refs;
          get "/commit/:id" commit;
        ];
    get "/static/**" (static "./lib/static");
  ]
Copyright 2019--2025 Marius PETER