Rework sync - also actually remove removed items

This commit is contained in:
Nicholas Kariniemi 2015-07-17 00:36:12 +03:00
parent 755d06f32b
commit d71f9260e8

View file

@ -156,21 +156,31 @@
:recipes {:- #{} :+ nil}}) :recipes {:- #{} :+ nil}})
(defn diff-tx [diff] (defn diff-tx [diff]
(let [grubs-tx (->> diff (let [grubs-upsert-tx (->> diff
:grubs :grubs
:+ :+
(map (fn [[k v]] (assoc v :id k))) (map (fn [[k v]] (assoc v :id k)))
(map upsert-grub-tx) (map upsert-grub-tx)
(flatten) (flatten)
(vec)) (vec))
recipes-tx (->> diff grubs-retract-tx (->> diff
:recipes :grubs
:+ :-
(map (fn [[k v]] (assoc v :id k))) (map (fn [id] [:db.fn/retractEntity [:grub/id id]]))
(map upsert-recipe-tx) (vec))
(flatten) recipes-upsert-tx (->> diff
(vec))] :recipes
(into grubs-tx recipes-tx))) :+
(map (fn [[k v]] (assoc v :id k)))
(map upsert-recipe-tx)
(flatten)
(vec))
recipes-retract-tx (->> diff
:recipes
:-
(map (fn [id] [:db.fn/retractEntity [:recipe/id id]]))
(vec))]
(vec (concat grubs-upsert-tx grubs-retract-tx recipes-upsert-tx recipes-retract-tx))))
(defn patch-state! [conn diff] (defn patch-state! [conn diff]
(pprint (diff-tx diff)) (pprint (diff-tx diff))