diff options
author | Miguel Ángel Moreno <mail@migalmoreno.com> | 2022-12-26 21:49:13 +0100 |
---|---|---|
committer | Miguel Ángel Moreno <mail@migalmoreno.com> | 2022-12-26 21:49:13 +0100 |
commit | dce9e36b352509665887ea1ca2e6f81904038a11 (patch) | |
tree | 2ba797188500e2677e3182f38d2334307be3e295 /src/backend/tau/http.clj | |
parent | 9361d6444548748445db1548d0e3a6291d802bd3 (diff) |
feat(backend): Modularize components
Diffstat (limited to 'src/backend/tau/http.clj')
-rw-r--r-- | src/backend/tau/http.clj | 102 |
1 files changed, 8 insertions, 94 deletions
diff --git a/src/backend/tau/http.clj b/src/backend/tau/http.clj index 1469f77..cbb5896 100644 --- a/src/backend/tau/http.clj +++ b/src/backend/tau/http.clj @@ -1,110 +1,24 @@ (ns tau.http (:require [org.httpkit.server :refer [run-server]] - [ring.middleware.reload :refer [wrap-reload]] - [ring.middleware.params :refer [wrap-params]] - [ring.middleware.json :refer [wrap-json-response]] - [ring.middleware.cors :refer [wrap-cors]] - [ring.util.response :refer [response]] - [reitit.ring :as ring] - [reitit.coercion :as coercion] - [reitit.ring.coercion :as rrc] - [reitit.coercion.malli] - [clojure.string :as str] - [malli.experimental.lite :as l] - [hiccup.page :as hiccup] - [tau.api.stream :as stream] - [tau.api.search :as search] - [tau.api.channel :as channel] - [tau.api.playlist :as playlist] - [tau.api.comment :as comment] - [tau.api.kiosk :as kiosk] - [tau.api.service :as service]) + [tau.router :as router]) (:import tau.DownloaderImpl org.schabi.newpipe.extractor.NewPipe org.schabi.newpipe.extractor.localization.Localization)) -(defn index-html - [] - (hiccup/html5 - [:head - [:meta {:charset "UTF-8"}] - [:meta {:name "viewport" :content "width=device-width, initial-scale=1"}] - [:title "Tau"] - (hiccup/include-css "/css/output.css")] - [:body - [:div#app] - (hiccup/include-js "/js/main.js") - [:script "tau.core.init();"]])) - (defonce server (atom nil)) -(def router - (ring/router - [["/" (constantly (response (index-html)))] - ["/search" (constantly (response (index-html)))] - ["/stream" (constantly (response (index-html)))] - ["/channel" (constantly (response (index-html)))] - ["/api" - ["/stream" {:get (fn [{{:strs [url]} :query-params}] - (response (stream/get-info url)))}] - ["/search" {:get {:coercion reitit.coercion.malli/coercion - :parameters {:query {:serviceId int? - :q string? - ;; :sortFilter (l/maybe string?) - ;; :contentFilters (l/maybe string?) - ;; :nextPage (l/maybe string?) - }} - :handler (fn [{:keys [parameters]}] - (let [{:keys [contentFilters serviceId q sortFilter nextPage]} (:query parameters) - content-filters (and contentFilters (str/split contentFilters #","))] - (response (apply search/get-info serviceId q - content-filters sortFilter - (or nextPage '())))))}}] - ["/channel" {:get (fn [{{:keys [url nextPage]} :query-params}] - (response (channel/get-info url nextPage)))}] - ["/playlist" {:get (fn [{{:keys [url nextPage]} :query-params}] - (response (playlist/get-info url nextPage)))}] - ["/comments" {:get (fn [{{:keys [url nextPage]} :query-params}] - (response (apply comment/get-info url (or nextPage '()))))}] - ["/services" {:get (constantly (response (service/get-services)))}] - ["/kiosks" - ["" {:coercion reitit.coercion.malli/coercion - :parameters {:query {:serviceId int?}} - :get (fn [{:keys [parameters]}] - (println parameters) - (response (kiosk/get-kiosks (-> parameters :query :serviceId))))}] - ["/:kioskId" {:get {:coercion reitit.coercion.malli/coercion - :parameters {:query {:serviceId int?}} - :handler (fn [{{:keys [kioskId serviceId nextPage]} :query-params}] - (response (kiosk/get-info kioskId serviceId nextPage)))}}]]]] - ;;{:compile coercion/compile-request-coercers} - {:data {:middleware [rrc/coerce-request-middleware - rrc/coerce-response-middleware - rrc/coerce-exceptions-middleware]}})) - -(def app - (ring/ring-handler - router - (ring/routes - (ring/create-resource-handler {:path "/"}) - (ring/create-default-handler - {:not-found (constantly {:status 404, :body "Not found"})})) - {:middleware [wrap-params - [wrap-json-response {:pretty true}] - wrap-reload]})) - -(defn stop-server! - [] - (when @server - (@server :timeout 100) - (reset! server nil))) - (defn start-server! ([] (start-server! 3000)) ([port] (NewPipe/init (DownloaderImpl/init) (Localization. "en" "GB")) - (reset! server (run-server #'app {:port port})) + (reset! server (run-server #'router/app {:port port})) (println "Server running in port" port))) + +(defn stop-server! + [] + (when @server + (@server :timeout 100) + (reset! server nil))) |