diff --git a/backend/src/app/loggers/database.clj b/backend/src/app/loggers/database.clj index 16818e57e..fac70eac6 100644 --- a/backend/src/app/loggers/database.clj +++ b/backend/src/app/loggers/database.clj @@ -40,16 +40,16 @@ [{:keys [::l/context ::l/message ::l/props ::l/logger ::l/level ::l/cause] :as record}] (us/assert! ::l/record record) - (let [data (ex-data cause) - context (-> context - (assoc :tenant (cf/get :tenant)) - (assoc :host (cf/get :host)) - (assoc :public-uri (cf/get :public-uri)) - (assoc :logger/name logger) - (assoc :logger/level level) - (dissoc :request/params :value :params :data))] + (let [data (ex-data cause) + ctx (-> context + (assoc :tenant (cf/get :tenant)) + (assoc :host (cf/get :host)) + (assoc :public-uri (cf/get :public-uri)) + (assoc :logger/name logger) + (assoc :logger/level level) + (dissoc :request/params :value :params :data))] (merge - {:context (-> (into (sorted-map) context) + {:context (-> (into (sorted-map) ctx) (pp/pprint-str :width 200 :length 50 :level 10)) :props (pp/pprint-str props :width 200 :length 50) :hint (or (ex-message cause) @message) diff --git a/frontend/src/app/main/data/workspace/fix_broken_shape_links.cljs b/frontend/src/app/main/data/workspace/fix_broken_shape_links.cljs index a9443b2fa..e547f0c03 100644 --- a/frontend/src/app/main/data/workspace/fix_broken_shape_links.cljs +++ b/frontend/src/app/main/data/workspace/fix_broken_shape_links.cljs @@ -11,13 +11,28 @@ [potok.core :as ptk])) (defn- generate-changes - [attr {:keys [objects id]}] + [attr {:keys [objects id] :as container}] (let [base {:type :fix-obj attr id} contains? (partial contains? objects) xform (comp - (remove #(every? contains? (:shapes %))) - (map #(assoc base :id (:id %))))] - (sequence xform (vals objects)))) + ;; FIXME: Ensure all obj have id field (this is needed + ;; because some bug adds an ephimeral shape with id ZERO, + ;; with a single attr `:shapes` having a vector of ids + ;; pointing to not existing shapes). That happens on + ;; components. THIS IS A WORKAOURD + (map (fn [[id obj]] + (if (some? (:id obj)) + obj + (assoc obj :id id)))) + + ;; Remove all valid shapes + (remove (fn [obj] + (every? contains? (:shapes obj)))) + + (map (fn [obj] + (assoc base :id (:id obj)))))] + + (sequence xform objects))) (defn fix-broken-shapes []