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

Commit

Permalink
Requested changes
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
solita-antti-mottonen committed Nov 23, 2023
1 parent f4a4a4c commit 67b55f0
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 39 deletions.
55 changes: 16 additions & 39 deletions etp-backend/src/main/clj/solita/etp/api/palveluvayla.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand All @@ -48,61 +41,45 @@
: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}}
:responses {200 {:body schema.energiatodistus/EnergiatodistusForAnyLaatija}
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"
: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)]
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}}
:responses {200 {:body schema.energiatodistus/Energiatodistus2013}
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"
: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)]
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}}
:responses {200 {:body schema.energiatodistus/Energiatodistus2018}
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.")))}}]]]])
41 changes: 41 additions & 0 deletions etp-backend/src/main/clj/solita/etp/service/palveluvayla.clj
Original file line number Diff line number Diff line change
@@ -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)))))

0 comments on commit 67b55f0

Please sign in to comment.