|
24 | 24 | (defn validate-tx-report |
25 | 25 | "Validates the datascript tx-report for entities that have changed. Returns |
26 | 26 | boolean indicating if db is valid" |
27 | | - [{:keys [db-after tx-data tx-meta]} validate-options] |
28 | | - (let [changed-ids (->> tx-data (keep :e) distinct) |
29 | | - tx-datoms (mapcat #(d/datoms db-after :eavt %) changed-ids) |
30 | | - ent-maps* (map (fn [[db-id m]] |
| 27 | + [{:keys [db-after tx-data tx-meta]} {:keys [closed-schema?]}] |
| 28 | + (binding [db-malli-schema/*skip-strict-url-validate?* true] |
| 29 | + (let [changed-ids (->> tx-data (keep :e) distinct) |
| 30 | + tx-datoms (mapcat #(d/datoms db-after :eavt %) changed-ids) |
| 31 | + ent-maps* (map (fn [[db-id m]] |
31 | 32 | ;; Add :db/id for debugging |
32 | | - (assoc m :db/id db-id)) |
33 | | - (db-malli-schema/datoms->entity-maps tx-datoms {:entity-fn #(d/entity db-after %)})) |
34 | | - ent-maps (db-malli-schema/update-properties-in-ents db-after ent-maps*) |
35 | | - validator (get-schema-validator (:closed-schema? validate-options))] |
36 | | - (binding [db-malli-schema/*db-for-validate-fns* db-after] |
37 | | - (let [invalid-ent-maps (remove |
| 33 | + (assoc m :db/id db-id)) |
| 34 | + (db-malli-schema/datoms->entity-maps tx-datoms {:entity-fn #(d/entity db-after %)})) |
| 35 | + ent-maps (db-malli-schema/update-properties-in-ents db-after ent-maps*) |
| 36 | + validator (get-schema-validator closed-schema?)] |
| 37 | + (binding [db-malli-schema/*db-for-validate-fns* db-after] |
| 38 | + (let [invalid-ent-maps (remove |
38 | 39 | ;; remove :db/id as it adds needless declarations to schema |
39 | | - #(validator [(dissoc % :db/id)]) |
40 | | - ent-maps)] |
41 | | - (if (seq invalid-ent-maps) |
42 | | - (do |
43 | | - (prn "Invalid datascript entities detected amongst changed entity ids:" changed-ids :tx-meta tx-meta) |
44 | | - (let [explainer (get-schema-explainer (:closed-schema? validate-options)) |
45 | | - errors (doall |
46 | | - (map |
47 | | - (fn [m] |
48 | | - (let [m' (update m :block/properties (fn [properties] |
49 | | - (map (fn [[p v]] |
50 | | - [(:db/ident p) v]) |
51 | | - properties))) |
52 | | - data {:entity-map m' |
53 | | - :errors (me/humanize (explainer [(dissoc m :db/id)]))}] |
54 | | - (try |
55 | | - (pprint/pprint data) |
56 | | - (catch :default _e |
57 | | - (prn data))) |
58 | | - data)) |
59 | | - invalid-ent-maps))] |
| 40 | + #(validator [(dissoc % :db/id)]) |
| 41 | + ent-maps)] |
| 42 | + (if (seq invalid-ent-maps) |
| 43 | + (do |
| 44 | + (prn "Invalid datascript entities detected amongst changed entity ids:" changed-ids :tx-meta tx-meta) |
| 45 | + (let [explainer (get-schema-explainer closed-schema?) |
| 46 | + errors (doall |
| 47 | + (map |
| 48 | + (fn [m] |
| 49 | + (let [m' (update m :block/properties (fn [properties] |
| 50 | + (map (fn [[p v]] |
| 51 | + [(:db/ident p) v]) |
| 52 | + properties))) |
| 53 | + data {:entity-map m' |
| 54 | + :errors (me/humanize (explainer [(dissoc m :db/id)]))}] |
| 55 | + (try |
| 56 | + (pprint/pprint data) |
| 57 | + (catch :default _e |
| 58 | + (prn data))) |
| 59 | + data)) |
| 60 | + invalid-ent-maps))] |
60 | 61 |
|
61 | | - [false errors])) |
62 | | - [true nil]))))) |
| 62 | + [false errors])) |
| 63 | + [true nil])))))) |
63 | 64 |
|
64 | 65 | (defn group-errors-by-entity |
65 | 66 | "Groups malli errors by entities. db is used for providing more debugging info" |
|
0 commit comments