43 lines
1.7 KiB
Clojure
43 lines
1.7 KiB
Clojure
(ns beherbergung.webserver.handler
|
|
(:require [compojure.core :refer [defroutes GET POST]]
|
|
[compojure.route :as route]
|
|
[ring.util.response :refer [response]]
|
|
[ring.middleware.cors :refer [wrap-cors]]
|
|
[beherbergung.webserver.middleware :refer [wrap-graphql wrap-graphiql wrap-nextjs-frontend wrap-frontend-config wrap-defaults]]
|
|
[beherbergung.resolver.core :refer [graphql]]
|
|
[beherbergung.config.state :refer [env]]))
|
|
|
|
(def frontend-url (:frontend-base-url env))
|
|
|
|
|
|
(defroutes app-routes
|
|
(GET "/" [] ;; When using a fullstack-build, this route is overwritten by `wrap-nextjs-frontend`
|
|
(str "<p>The backend takes care of data storage and securing its access.<br/>"
|
|
" It provides a <a href=\"/graphql\">Graphql-API Endpoint</a>.<br/>"
|
|
" You may want explore the schema and send queries using <a href=\"/graphiql/index.html\">GraphiQL</a>."
|
|
"</p>"
|
|
"<p>This build doesn't include the frontend.<br/>"
|
|
" You may want start it independently and open <a href=\"" frontend-url "\">" frontend-url "</a>.</br>"
|
|
" Alternatively production builds including the frontend are available via nix."
|
|
"</p/>"))
|
|
|
|
(->
|
|
(POST "/graphql" req
|
|
(response (graphql (:body req))))
|
|
wrap-graphql
|
|
wrap-graphiql)
|
|
|
|
(route/not-found "Not Found"))
|
|
|
|
|
|
(def app
|
|
(-> app-routes
|
|
|
|
(wrap-nextjs-frontend)
|
|
(wrap-frontend-config)
|
|
|
|
(wrap-defaults)
|
|
|
|
(wrap-cors :access-control-allow-origin [#"http://localhost:3000"]
|
|
:access-control-allow-methods [:get :put :post :delete])))
|