From 95dba09c3aae2a622607f237089def7fd5f9e53e Mon Sep 17 00:00:00 2001 From: Aleksei Gorovoi Date: Mon, 24 Jul 2023 11:42:47 +0300 Subject: [PATCH] Change composite edn structure Co-authored-by: @spicyfalafel <285574@niuitmo.ru> Co-authored-by: @rublag_hs Co-authored-by: @Yngwarr --- src/zen/fhir/search_parameter/loader.clj | 33 +++++++------------ .../zen/fhir/search_parameter/loader_test.clj | 20 ++++------- 2 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/zen/fhir/search_parameter/loader.clj b/src/zen/fhir/search_parameter/loader.clj index e350bf5..8d61536 100644 --- a/src/zen/fhir/search_parameter/loader.clj +++ b/src/zen/fhir/search_parameter/loader.clj @@ -54,18 +54,6 @@ :template sp-template :sql (template/expand sp-template types jsonpath)})})) -(defn merge-with-base-paths [base-paths components] - (mapv - (fn [base-path] - (mapv - (fn [c] - (mapv - (fn [knife-path] - (into base-path knife-path)) - c)) - components)) - base-paths)) - (defn components-search-types [ztx components] (mapv (fn [component] @@ -78,30 +66,33 @@ keyword))) components)) -(defn process-composite-expression [ztx inter base-rt base-paths components] - (let [paths (map (comp :default fhirpath/fhirpath->knife :expression) components) +(defn process-composite-expression [ztx inter base-rt base-paths] + (let [components (:component inter) + base-jsonpath (fhirpath/knife->jsonpath base-paths) + components-paths (mapv (comp :default fhirpath/fhirpath->knife :expression) components) + components-jsonpaths (mapv fhirpath/knife->jsonpath components-paths) search-types (components-search-types ztx components) - full-paths (merge-with-base-paths base-paths paths) - jsonpath (mapv (partial mapv fhirpath/knife->jsonpath) full-paths) types (reduce #(into %1 (mapcat (partial get-type-by-knife ztx inter base-rt)) %2) #{} - paths)] + components-paths)] (if (some nil? search-types) nil (utils/strip-nils - {:knife full-paths - :jsonpath jsonpath + {:base-knife base-paths + :base-jsonpath base-jsonpath + :component-knife components-paths + :component-jsonpath components-jsonpaths :data-types types :search-types search-types :template :composite - :sql (template/expand :composite types jsonpath)})))) + :sql (template/expand :composite types base-rt)})))) (defn process-composite-search-parameter [ztx inter] (let [knife-paths (fhirpath/fhirpath->knife (:expression inter))] (reduce-kv (fn [inter base-rt paths] - (if-let [expr (process-composite-expression ztx inter base-rt paths (:component inter))] + (if-let [expr (process-composite-expression ztx inter base-rt paths)] (assoc-in inter [:expr (keyword base-rt)] expr) (reduced nil))) inter diff --git a/test/zen/fhir/search_parameter/loader_test.clj b/test/zen/fhir/search_parameter/loader_test.clj index b266d83..058fa8f 100644 --- a/test/zen/fhir/search_parameter/loader_test.clj +++ b/test/zen/fhir/search_parameter/loader_test.clj @@ -148,20 +148,12 @@ :zen.fhir/schema-ns 'fhir-r5.search.Observation-combo-code-value-quantity, :expr {:Observation - {:knife - [[[["code"]] - [["value" "Quantity"] - ["value" "Number"]]] - [[["component" "code"]] - [["component" "value" "Quantity"] - ["component" "value" "Number"]]]] - :jsonpath - [[["$.\"code\"[*]"] - ["$.\"value\".\"Quantity\"[*]" - "$.\"value\".\"Number\"[*]"]] - [["$.\"component\".\"code\"[*]"] - ["$.\"component\".\"value\".\"Quantity\"[*]" - "$.\"component\".\"value\".\"Number\"[*]"]]] + {:base-knife [[] ["component"]] + :base-jsonpath ["$[*]" "$.\"component\"[*]"] + :component-knife [[["code"]] + [["value" "Quantity"]]], + :component-jsonpath [["$.\"code\"[*]"] + ["$.\"value\".\"Quantity\"[*]"]], :data-types #{{:type "Quantity", :polymorphic? false} {:type "CodeableConcept", :polymorphic? false}}