aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tau/router.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/tau/router.clj')
-rw-r--r--src/backend/tau/router.clj55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/backend/tau/router.clj b/src/backend/tau/router.clj
new file mode 100644
index 0000000..d6573e9
--- /dev/null
+++ b/src/backend/tau/router.clj
@@ -0,0 +1,55 @@
+(ns tau.router
+ (:require
+ [malli.experimental.lite :as l]
+ [reitit.ring :as ring]
+ [reitit.coercion :as coercion]
+ [reitit.ring.coercion :as rrc]
+ [reitit.coercion.malli]
+ [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]]
+ [tau.handler :as handler]))
+
+(def router
+ (ring/router
+ [["/" handler/index]
+ ["/search" handler/index]
+ ["/stream" handler/index]
+ ["/channel" handler/index]
+ ["/playlist" handler/index]
+ ["/kiosk" handler/index]
+ ["/api"
+ ["/services"
+ ["" {:get handler/services}]
+ ["/:service-id/search"
+ {:get {:coercion reitit.coercion.malli/coercion
+ :parameters {:path {:service-id int?}
+ :query {:q string?}}
+ :handler handler/search}}]
+ ["/:service-id/kiosks"
+ ["" {:get {:coercion reitit.coercion.malli/coercion
+ :parameters {:path {:service-id int?}}
+ :handler handler/kiosks}}]
+ ["/:kiosk-id"
+ ["" {:get {:coercion reitit.coercion.malli/coercion
+ :parameters {:path {:service-id int? :kiosk-id string?}}
+ :handler handler/kiosk}}]]]]
+ ["/streams/:url" {:get handler/stream}]
+ ["/channels/:url" {:get handler/channel}]
+ ["/playlists/:url" {:get handler/playlist}]
+ ["/comments/:url" {:get handler/comments}]]]
+ {: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]}))