From 5abc0e7a8bcd87be6055b78828ecafe048100740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20L=C3=B6tzsch?= Date: Sat, 12 Mar 2022 01:23:02 +0100 Subject: [PATCH] backend: defscalar int_string Using `defscalar` fixes introspection errors. Be aware, that UNION types are not implemented till now: https://github.com/ajk/specialist-server/issues/3 Also `->Int` was moved from an explicit mapping postprocessing function into the conformer. --- .../resolver/root/ngo/get_offers.clj | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/backend/src/beherbergung/resolver/root/ngo/get_offers.clj b/backend/src/beherbergung/resolver/root/ngo/get_offers.clj index 86fd5d20..37a3c407 100644 --- a/backend/src/beherbergung/resolver/root/ngo/get_offers.clj +++ b/backend/src/beherbergung/resolver/root/ngo/get_offers.clj @@ -13,19 +13,26 @@ (defn JaNein->bool [JaNein] ({"Ja" true "Nein" false} JaNein)) -(defn ->Int - "If unable to parse, we return the original string (requires union datatype)" - [s] - (try - (Integer/parseInt s) - (catch NumberFormatException _e s))) +(t/defscalar int_string + {:name "Int" :description "Integer or String"} + ;; TODO: Here we should be able to use s/with-gen + (fn [v] + (cond + (number? v) + (int v) + (string? v) + (try + (Integer/parseInt v) + (catch NumberFormatException _e v)) + :else + ::s/invalid))) (def mapping_lifeline_wpforms {:id #(or (get % "E-Mail") (get % "Telefonnummer")) ;; TODO: uuid will be generated when record is written to db :time_from_str "frühestes Einzugsdatum" :time_duration_str "Möglicher Aufenthalt (Dauer)" ;; TODO: the duration is not parsed till now - :beds ["Verfügbare Betten" ->Int] + :beds ["Verfügbare Betten" #(s/conform int_string %)] :languages ["Sprachen (sprechen / verstehen)" #(split % #"\n")] :place_country "Land" @@ -62,8 +69,7 @@ (s/def ::t_boolean t/boolean #_ (s/with-gen t/boolean #(s/gen boolean?))) (s/def ::t_string t/string #_ (s/with-gen t/string #(s/gen string?))) -(s/def ::t_int_string (s/or :int t/int - :string t/string) #_ (s/with-gen t/int #(s/gen int?))) +(s/def ::t_int_string int_string #_ (s/with-gen t/int #(s/gen int?))) (s/def :xtdb.api/id (s/nilable ::t_string)) ;; TODO: in future not nilable (s/def ::time_from_str (s/nilable ::t_string))