Skip to content

Instantly share code, notes, and snippets.

@daemianmack
Created September 12, 2014 12:06
Show Gist options
  • Save daemianmack/a7e8ac1cbea2ca8b6250 to your computer and use it in GitHub Desktop.
Save daemianmack/a7e8ac1cbea2ca8b6250 to your computer and use it in GitHub Desktop.
(defrecord Server [service-map]
component/Lifecycle
(start [component]
(info :msg "Starting server.")
(let [server (bootstrap/create-server (:service-map service-map))]
(bootstrap/start server)
(assoc component :server server)))
(stop [component]
(info :msg "Stopping server.")
(update-in component [:server] bootstrap/stop)))
(definterceptorfn add-conn
[conn]
(on-request ::add-conn #(assoc % :conn conn)))
(defrecord ServiceMap [service-data conn]
component/Lifecycle
(start [component]
(info :msg "Adding connection interceptor to service-map.")
(let [service-map (update-in service-data
[::bootstrap/interceptors]
conj (add-conn (:conn conn)))]
(assoc component :service-map service-map)))
(stop [component]
(info :msg "Removing connection interceptor from service-map.")
(update-in component
[:service-map ::bootstrap/interceptors]
pop)))
(defn mk-service-map
[conn & [opts]]
(map->ServiceMap {:service-data (merge service/service opts)}))
(def default-interceptors
(-> {::bootstrap/routes routes}
bootstrap/default-interceptors
::bootstrap/interceptors))
(definterceptor session-interceptor (middlewares/session {:store (cookie/cookie-store)}))
(def interceptors
(conj default-interceptors
session-interceptor
(body-params/body-params)))
(def service {:env :prod
::bootstrap/routes routes
::bootstrap/join? false
::bootstrap/resource-path "/public"
::bootstrap/interceptors interceptors
::bootstrap/type :jetty
::bootstrap/port 8080})
(defn dev-system [config-options]
(log/info :msg "Hello world!")
(let [{:keys [db-uri schema norms server-opts]} config-options]
(map->TheSystem
{:config-options config-options
:conn (storage/mk-conn db-uri)
:service-map (component/using
(server/mk-service-map server-opts)
{:conn :conn})
:server (component/using
(server/mk-server)
{:service-map :service-map})))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment