summaryrefslogtreecommitdiff
path: root/src/weepinbell/webserver/facade.clj
blob: 1e93126ca80043767d48afe6f2d59037aa238a98 (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
(ns weepinbell.webserver.facade
  (:require [org.httpkit.server :refer [run-server]]
            [taoensso.timbre :as timbre]
            [clojure.spec.alpha :as s]
            [weepinbell.webserver.handler :refer [app]]
            ;; services
            [weepinbell.webserver.receiver :as receiver]
            [weepinbell.webserver.retriever :as retriever]
            [weepinbell.webserver.feed :as feed]
            [weepinbell.webserver.counter :as counter]))

(s/def ::server-meta
  (s/keys :req-un [::wmc ::store ::config]))

(defn make-services []
  {:post [#(s/valid? :weepinbell.webserver.handler/services %)]}
  {:gen-feed feed/rss
   :receive receiver/receive
   :retrieve-by-domain retriever/by-domain
   :retrieve-by-url retriever/by-url
   :retrieve-by-id retriever/by-id
   :retrieve-by-pair retriever/by-st-pair
   :count-by-domain counter/by-domain
   :count-by-url counter/by-url})

(defn start-webserver
  "Starts web server. Returns a function that stops the server."
  [metadata]
  {:pre [(s/valid? ::server-meta metadata)]
   :post [fn?]}
  (let [{:keys [config]} metadata
        api-meta (assoc metadata :services (make-services))
        port (Integer/parseInt (or (:port config) (System/getenv "PORT") "3000"))]
    (timbre/info "starting web server, listening on" port)
    (run-server (app api-meta) {:port port})))