From 67b55f0bfa7b9e0b4e2307b7667102c41978f12b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20M=C3=B6tt=C3=B6nen?= Date: Thu, 23 Nov 2023 14:03:37 +0200 Subject: [PATCH] Requested changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create a service for Palveluväylä to make the codebase a bit clearer. Separate parsing languages into a function. Clean up the test code a bit. Comment language discrimination in pdf search. --- .../main/clj/solita/etp/api/palveluvayla.clj | 55 ++++++------------- .../clj/solita/etp/service/palveluvayla.clj | 41 ++++++++++++++ 2 files changed, 57 insertions(+), 39 deletions(-) create mode 100644 etp-backend/src/main/clj/solita/etp/service/palveluvayla.clj diff --git a/etp-backend/src/main/clj/solita/etp/api/palveluvayla.clj b/etp-backend/src/main/clj/solita/etp/api/palveluvayla.clj index 44bbcff93..86063d43d 100644 --- a/etp-backend/src/main/clj/solita/etp/api/palveluvayla.clj +++ b/etp-backend/src/main/clj/solita/etp/api/palveluvayla.clj @@ -4,14 +4,17 @@ [solita.etp.schema.common :as schema.common] [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])) + [solita.etp.service.palveluvayla :as service.palveluvayla])) (def accept-language-header {(s/optional-key :accept-language) schema.common/AcceptLanguage}) -(def i-am-paakayttaja {:rooli 2}) -(def version-equals-2013 ["=" "energiatodistus.versio" 2013]) -(def version-equals-2018 ["=" "energiatodistus.versio" 2018]) +(defn parse-preferred-language-order + "Sort Accept-Language headers by quality and return only the languages tags in order of preference" + [accept-language] + (some->> accept-language + (sort-by second) + (reverse) + (map first))) (def routes ["/energiatodistukset" ["/pdf/:id" @@ -23,19 +26,9 @@ :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"])] + (let [language-preference-order (parse-preferred-language-order accept-language)] (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 - %)))) + (service.palveluvayla/find-first-existing-pdf id language-preference-order db aws-s3-client) "energiatodistus.pdf" (str "Energiatodistus " id " does not exists.")))) :openapi {:responses {200 {:description "PDF-muotoinen energiatodistus" @@ -48,11 +41,7 @@ :responses {200 {:body [schema.energiatodistus/EnergiatodistusForAnyLaatija]}} :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) + (service.palveluvayla/search-by-rakennustunnus (:rakennustunnus query) schema.energiatodistus/EnergiatodistusForAnyLaatija db) (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}} @@ -60,7 +49,7 @@ 404 {:body s/Str}} :handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}] (api-response/get-response - (service.energiatodistus/find-energiatodistus-any-laatija db id) + (service.palveluvayla/get-by-id id db) (str "Energiatodistus " id " does not exists.")))}}]] ["/2013" ["" {:get {:summary "Hae energiatodistuksia, jotka on laadittu vuoden 2013 säännösten mukaan" @@ -68,12 +57,7 @@ :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)] - version-equals-2013]]} - schema.energiatodistus/Energiatodistus2013) + (service.palveluvayla/search-by-rakennustunnus (:rakennustunnus query) schema.energiatodistus/Energiatodistus2013 db 2013) (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}} @@ -81,8 +65,7 @@ 404 {:body s/Str}} :handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}] (api-response/get-response - (-> (service.energiatodistus/find-energiatodistus db id) - (#(if (= (:versio %) 2013) % nil))) + (service.palveluvayla/get-by-id id db 2013) (str "Energiatodistus " id " does not exists.")))}}]] ["/2018" ["" {:get {:summary "Hae energiatodistuksia, jotka on laadittu vuoden 2018 säännösten mukaan" @@ -90,12 +73,7 @@ :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)] - version-equals-2018]]} - schema.energiatodistus/Energiatodistus2018) + (service.palveluvayla/search-by-rakennustunnus (:rakennustunnus query) schema.energiatodistus/Energiatodistus2018 db 2018) (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}} @@ -103,6 +81,5 @@ 404 {:body s/Str}} :handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}] (api-response/get-response - (-> (service.energiatodistus/find-energiatodistus db id) - (#(if (= (:versio %) 2018) % nil))) + (service.palveluvayla/get-by-id id db 2018) (str "Energiatodistus " id " does not exists.")))}}]]]]) diff --git a/etp-backend/src/main/clj/solita/etp/service/palveluvayla.clj b/etp-backend/src/main/clj/solita/etp/service/palveluvayla.clj new file mode 100644 index 000000000..ba11c6135 --- /dev/null +++ b/etp-backend/src/main/clj/solita/etp/service/palveluvayla.clj @@ -0,0 +1,41 @@ +(ns solita.etp.service.palveluvayla + (:require [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 i-am-paakayttaja {:rooli 2}) + +(defn find-first-existing-pdf + "Return the first language version that exists if any. If language-preference-order is not given, [fi sv] is used." + [id language-preference-order db aws-s3-client] + (some identity (->> (or language-preference-order ["fi" "sv"]) + (map #(service.energiatodistus-pdf/find-energiatodistus-pdf db + aws-s3-client + i-am-paakayttaja + id + %))))) + +(defn search-by-rakennustunnus + "Search for energiatodistus by rakennustunnus as pääkäyttäjä and coerce into schema" + [rakennustunnus schema db & [versio]] + (service.energiatodistus-search/search + db + i-am-paakayttaja + {:where [(-> [["=" "energiatodistus.perustiedot.rakennustunnus" rakennustunnus]] + (into (when versio [["=" "energiatodistus.versio" versio]])))]} + schema)) + +(defn- drop-wrong-version + "Return nil if the energiatodistus is not the given version" + [et version] + (if (= (:versio et) version) + et + nil)) + +(defn get-by-id + "Get energiatodistus by id as pääkäyttäjä. If version is not given, the result is mapped EnertiatoistusForAnyLaatija schema." + ([id db] + (service.energiatodistus/find-energiatodistus-any-laatija db id)) + ([id db version] + (-> (service.energiatodistus/find-energiatodistus db id) + (#(drop-wrong-version % version)))))