Skip to content
This repository has been archived by the owner on Feb 7, 2024. It is now read-only.

Commit

Permalink
Implement APIs for palveluväylä
Browse files Browse the repository at this point in the history
  • Loading branch information
solita-antti-mottonen committed Nov 22, 2023
1 parent 2dfa4a1 commit a1640e5
Show file tree
Hide file tree
Showing 6 changed files with 344 additions and 129 deletions.
90 changes: 76 additions & 14 deletions etp-backend/src/main/clj/solita/etp/api/palveluvayla.clj
Original file line number Diff line number Diff line change
@@ -1,18 +1,44 @@
(ns solita.etp.api.palveluvayla
(:require [schema.core :as s]
(:require [ring.util.response :as response]
[schema.core :as s]
[solita.etp.api.response :as api-response]
[solita.etp.schema.common :as schema.common]
[solita.etp.schema.energiatodistus :as schema.energiatodistus]))
[solita.etp.schema.energiatodistus :as schema.energiatodistus]
[solita.etp.service.energiatodistus :as service.energiatodistus]
[solita.etp.service.energiatodistus-pdf :as service.energiatodistus-pdf]
[solita.etp.service.energiatodistus-search :as service.energiatodistus-search]))

(def accept-language-header {(s/optional-key :accept-language) schema.common/AcceptLanguage})

(def i-am-paakayttaja {:rooli 2})
(def versio-2013 ["=" "energiatodistus.versio" 2013])
(def versio-2018 ["=" "energiatodistus.versio" 2018])

(def routes ["/energiatodistukset"
["/pdf/:id"
["" {:get {:summary "Hae PDF-muotoinen energiatodistus tunnuksen id:llä"
:parameters {:path {:id schema.common/Key}
:header accept-language-header}
:responses {200 {:body nil}
404 {:body s/Str}}
:handler (constantly {:status 200})
:handler (fn [{:keys [db aws-s3-client],
{{:keys [accept-language]} :header} :parameters
{{:keys [id]} :path} :parameters}]
(let [language-preference-order (if accept-language
(->> accept-language
(sort-by second)
(reverse)
(map first))
["fi" "sv"])]
(api-response/pdf-response ; Return the first language version that exists if any
(some identity (->> language-preference-order
(map #(service.energiatodistus-pdf/find-energiatodistus-pdf db
aws-s3-client
i-am-paakayttaja
id
%))))
"energiatodistus.pdf"
(str "Energiatodistus " id " does not exists."))))
:openapi {:responses {200 {:description "PDF-muotoinen energiatodistus"
:content {:application/pdf {:schema {:type "string"
:format "binary"}}}}}}}}]]
Expand All @@ -21,27 +47,63 @@
["" {:get {:summary "Hae energiatodistuksia json-muodossa. Palauttaa jaetut kentät sekä 2013, että 2018 lain mukaisista energiatodistuksista"
:parameters {:query {:rakennustunnus schema.common/Rakennustunnus}}
:responses {200 {:body [schema.energiatodistus/EnergiatodistusForAnyLaatija]}}
:handler (constantly {:status 200})}}]
:handler (fn [{{:keys [query]} :parameters :keys [db]}]
(api-response/get-response
(service.energiatodistus-search/search
db
i-am-paakayttaja
{:where [[["=" "energiatodistus.perustiedot.rakennustunnus" (:rakennustunnus query)]]]}
schema.energiatodistus/EnergiatodistusForAnyLaatija)
(str "Virhe haussa")))}}]
["/:id" {:get {:summary "Hae yksittäinen energiatodistus todistuksen tunnuksen perusteella. Vastaus sisältää vain kentät jotka ovat yhteisiä 2013 ja 2018 versioille."
:parameters {:path {:id schema.common/Key}}
:responses {200 {:body [schema.energiatodistus/EnergiatodistusForAnyLaatija]}
:responses {200 {:body schema.energiatodistus/EnergiatodistusForAnyLaatija}
404 {:body s/Str}}
:handler (constantly {:status 200})}}]]
:handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}]
(api-response/get-response
(service.energiatodistus/find-energiatodistus-any-laatija db id)
(str "Energiatodistus " id " does not exists.")))}}]]
["/2013"
["" {:get {:summary "Hae energiatodistuksia, jotka on laadittu vuoden 2013 säännösten mukaan"
:responses {200 {:body [schema.energiatodistus/Energiatodistus2013]}}
:handler (constantly {:status 200})}}]
["" {:get {:summary "Hae energiatodistuksia, jotka on laadittu vuoden 2013 säännösten mukaan"
:parameters {:query {:rakennustunnus schema.common/Rakennustunnus}}
:responses {200 {:body [schema.energiatodistus/Energiatodistus2013]}}
:handler (fn [{{:keys [query]} :parameters :keys [db]}]
(api-response/get-response
(service.energiatodistus-search/search
db
i-am-paakayttaja
{:where [[["=" "energiatodistus.perustiedot.rakennustunnus" (:rakennustunnus query)]
versio-2013]]}
schema.energiatodistus/Energiatodistus2013)
(str "Virhe haussa")))}}]
["/:id" {:get {:summary "Hae yksittäinen vuoden 2013 säännösten mukainen energiatodistus todistuksen tunnuksen perusteella"
:parameters {:path {:id schema.common/Key}}
:responses {200 {:body schema.energiatodistus/Energiatodistus2013}
404 {:body s/Str}}
:handler (constantly {:status 200})}}]]
:handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}]
(api-response/get-response
(-> (service.energiatodistus/find-energiatodistus db id)
(#(if (= (:versio %) 2013) % nil)))
(str "Energiatodistus " id " does not exists.")))}}]]
["/2018"
["" {:get {:summary "Hae energiatodistuksia, jotka on laadittu vuoden 2018 säännösten mukaan"
:responses {200 {:body [schema.energiatodistus/Energiatodistus2018]}}
:handler (constantly {:status 200})}}]
["" {:get {:summary "Hae energiatodistuksia, jotka on laadittu vuoden 2018 säännösten mukaan"
:parameters {:query {:rakennustunnus schema.common/Rakennustunnus}}
:responses {200 {:body [schema.energiatodistus/Energiatodistus2018]}}
:handler (fn [{{:keys [query]} :parameters :keys [db]}]
(api-response/get-response
(service.energiatodistus-search/search
db
i-am-paakayttaja
{:where [[["=" "energiatodistus.perustiedot.rakennustunnus" (:rakennustunnus query)]
versio-2018]]}
schema.energiatodistus/Energiatodistus2018)
(str "Virhe haussa")))}}]
["/:id" {:get {:summary "Hae yksittäinen vuoden 2018 säännösten mukainen energiatodistus todistuksen tunnuksen perusteella"
:parameters {:path {:id schema.common/Key}}
:responses {200 {:body schema.energiatodistus/Energiatodistus2018}
404 {:body s/Str}}
:handler (constantly {:status 200})}}]]]])
:handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}]
(api-response/get-response
(-> (service.energiatodistus/find-energiatodistus db id)
(#(if (= (:versio %) 2018) % nil)))
(str "Energiatodistus " id " does not exists.")))}}]]]])
3 changes: 2 additions & 1 deletion etp-backend/src/main/clj/solita/etp/schema/common.clj
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@
(schema/defschema WeightedLocale
"A single locale with weight for Accept-Language header"
[(schema/one (schema/constrained schema/Str #(re-matches #"(?i)([*]|[a-z]{2,3})" %)) "lang") (schema/one (schema/constrained schema/Num #(and (>= % 0) (<= % 1))) "weight")])

(schema/defschema AcceptLanguage
"Define a schema for Accept-Language header. The header can contain multiple locales with preferred weights, for example Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"
[WeightedLocale])
Expand All @@ -217,4 +218,4 @@
2 [(-> parts first parse-lang) (Double/parseDouble (second parts))])))

(defn parse-accept-language [s]
(map parse-locale (str/split s #",")))
(map parse-locale (map str/trim (str/split s #","))))
2 changes: 2 additions & 0 deletions etp-backend/src/main/clj/solita/etp/security.clj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
[solita.etp.exception :as exception]))

(defn- req->jwt [request]
;(println (:headers request))
(println request)
(try
(jwt/req->verified-jwt-payloads request)
(catch Throwable t
Expand Down
Loading

0 comments on commit a1640e5

Please sign in to comment.