diff --git a/README.md b/README.md index c05291c..b8c1a5f 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ clj -m cljdoc.clojars-stats clojars-stats.db or use the almighty REPL. If you are interested in adding useful queries, feel invited to do so. -The entire codebase is 135 LOC which should make contributing a smooth ride. +The entire codebase is <200 LOC which should make contributing a smooth ride. diff --git a/deps.edn b/deps.edn index dbe0fb0..2dab7bc 100644 --- a/deps.edn +++ b/deps.edn @@ -5,9 +5,9 @@ ring/ring-core {:mvn/version "1.7.0-RC1"} ring/ring-jetty-adapter {:mvn/version "1.7.0-RC1"} tea-time {:mvn/version "1.0.0"} - metosin/reitit-core {:mvn/version "0.1.3"} - metosin/reitit-ring {:mvn/version "0.1.3"} - metosin/reitit-spec {:mvn/version "0.1.3"} - metosin/reitit-swagger {:mvn/version "0.1.3"} - metosin/reitit-swagger-ui {:mvn/version "0.1.3"} - metosin/muuntaja {:mvn/version "0.6.0-alpha1"}}} + metosin/reitit-core {:mvn/version "0.2.1"} + metosin/reitit-ring {:mvn/version "0.2.1"} + metosin/reitit-spec {:mvn/version "0.2.1"} + metosin/reitit-swagger {:mvn/version "0.2.1"} + metosin/reitit-swagger-ui {:mvn/version "0.2.1"} + metosin/reitit-middleware {:mvn/version "0.2.1"}}} diff --git a/src/cljdoc/clojars_stats/api.clj b/src/cljdoc/clojars_stats/api.clj index 8de1a1d..5070580 100644 --- a/src/cljdoc/clojars_stats/api.clj +++ b/src/cljdoc/clojars_stats/api.clj @@ -3,11 +3,13 @@ [ring.middleware.params :as params] [ring.adapter.jetty :as jetty] [reitit.ring :as ring] - [reitit.ring.coercion] - [reitit.coercion.spec] + [muuntaja.core :as m] [reitit.swagger :as swagger] [reitit.swagger-ui :as swagger-ui] - [muuntaja.middleware])) + [reitit.coercion.spec :as spec] + [reitit.ring.coercion :as coercion] + [reitit.ring.middleware.muuntaja :as muuntaja-middleware] + [reitit.ring.middleware.exception :as exception-middleware])) (def exposed-queries ;; NEVER change those map entries, only add new stuff as needed @@ -16,43 +18,48 @@ :params {:group_id string? :artifact_id string?}}}) +(defn routes [db] + (for [[path {:keys [query-fn params summary]}] exposed-queries] + [path {:get {:parameters {:query params} + :swagger {:summary summary} + :handler (fn [request] + (let [data (get-in request [:parameters :query])] + {:status 200 + :body (query-fn db data)}))}}])) + (defn make-handler [db] (ring/ring-handler (ring/router - [["/swagger.json" {:get {:no-doc true - :handler (swagger/create-swagger-handler)}}] - (for [[path {:keys [query-fn params summary]}] exposed-queries] - [path {:get {:parameters {:query params} - :swagger {:summary summary} - :handler (fn [request] - {:status 200 - :body (query-fn db (get-in request [:parameters :query]))})}}])] - {:data {:coercion reitit.coercion.spec/coercion - :middleware [muuntaja.middleware/wrap-format - reitit.ring.coercion/coerce-exceptions-middleware - reitit.ring.coercion/coerce-request-middleware] - :swagger {:id ::clojars-stats - :info {:title "Clojars Stats API" - :description "Contribute more at https://github.com/cljdoc/clojars-stats"}}}}) + [["/swagger.json" + {:get {:no-doc true + :swagger {:title "Clojars Stats API" + :description "https://github.com/cljdoc/clojars-stats"} + :handler (swagger/create-swagger-handler)}}] + (routes db)] + {:data {:coercion spec/coercion + :muuntaja m/instance + :middleware [params/wrap-params + muuntaja-middleware/format-negotiate-middleware + muuntaja-middleware/format-response-middleware + exception-middleware/exception-middleware + muuntaja-middleware/format-request-middleware + coercion/coerce-response-middleware + coercion/coerce-request-middleware]}}) (ring/routes - (swagger-ui/create-swagger-ui-handler {:path "/" - :config {:doc-expansion "list" - :validator-url nil}}) + (swagger-ui/create-swagger-ui-handler + {:path "/" + :config {:docExpansion "list" + :validatorUrl nil}}) (ring/create-default-handler)))) (defn start! [{:keys [db port]}] (assert (and db port)) - (-> (make-handler db) - (params/wrap-params) - (jetty/run-jetty {:port port :join? false}))) + (jetty/run-jetty (make-handler db) {:port port :join? false})) (comment - (def db {:classname "org.sqlite.JDBC" + (def db {:classname "org.sqlite.JDBC" :subprotocol "sqlite" - :subname "clojars-stats.db"}) - + :subname "clojars-stats.db"}) (def srv (start! {:db db :port 3000})) - (.stop srv) - ) diff --git a/src/cljdoc/clojars_stats/db.clj b/src/cljdoc/clojars_stats/db.clj index 19bb73c..8e0352f 100644 --- a/src/cljdoc/clojars_stats/db.clj +++ b/src/cljdoc/clojars_stats/db.clj @@ -6,5 +6,4 @@ (comment (artifact-monthly cljdoc.clojars-stats/db {:group_id "reagent" :artifact_id "reagent"}) - )