diff --git a/deps/db-sync/src/logseq/db_sync/common.cljs b/deps/db-sync/src/logseq/db_sync/common.cljs index 59bdea9236..79f5355007 100644 --- a/deps/db-sync/src/logseq/db_sync/common.cljs +++ b/deps/db-sync/src/logseq/db_sync/common.cljs @@ -59,17 +59,17 @@ (defn (:block/uuid ent) str) - :title (or (:block/title ent) - (:block/name ent))}))) - (def ^:private max-asset-size (* 100 1024 1024)) (def ^:private snapshot-rows-default-limit 500) (def ^:private snapshot-rows-max-limit 2000) @@ -240,7 +229,7 @@ (or (= path "/graphs") (string/starts-with? path "/graphs/")) - (.fetch (index-stub env) request) + (.fetch (index-stub env) (.clone request)) (string/starts-with? path "/assets/") (if (= method "OPTIONS") @@ -530,65 +519,6 @@ (log/error :db-sync/index-db-missing {:binding "DB"})) db)) -(defn- > (string/split path #"/") (remove string/blank?) @@ -610,8 +540,10 @@ (error-response "server error" 500) :else - (p/let [_ (clj result :keywordize-keys true) + body (coerce-http-request :graph-members/create body) + member-id (:user_id body) + role (or (:role body) "member")] + (cond + (nil? body) + (bad-request "invalid body") + + (not (string? member-id)) + (bad-request "invalid user id") + + :else + (p/let [manager? (index/clj result :keywordize-keys true) + body (coerce-http-request :graph-members/update body) + role (:role body)] + (cond + (nil? body) + (bad-request "invalid body") + + :else + (p/let [manager? (index/> (:graph-members @state) + vals + (filter (fn [row] (= graph-id (:graph_id row)))) + (sort-by :created_at))] + (js-rows members)) + + (string/includes? sql "union select graph_id from graph_members") + (union-access-rows state sql args) + + (string/includes? sql "select g.graph_id") + (let [[user-id] args + owned (->> (:graphs @state) + vals + (filter (fn [row] (= user-id (:user_id row))))) + member-ids (->> (:graph-members @state) + vals + (filter (fn [row] (= user-id (:user_id row)))) + (map :graph_id) + set) + member-graphs (->> (:graphs @state) + vals + (filter (fn [row] (contains? member-ids (:graph_id row)))))] + (js-rows (concat owned member-graphs))) + + :else + (js-rows []))) + +(defn- make-d1 [state] + #js {:prepare (fn [sql] + (let [stmt #js {}] + (set! (.-_sql stmt) sql) + (set! (.-_args stmt) []) + (set! (.-bind stmt) + (fn [& args] + (set! (.-_args stmt) (vec args)) + stmt)) + (set! (.-run stmt) + (fn [] + (run-sql! state (.-_sql stmt) (.-_args stmt)) + #js {})) + (set! (.-all stmt) + (fn [] + (all-sql state (.-_sql stmt) (.-_args stmt)))) + stmt))}) + +(deftest index-init-schema-test + (async done + (let [state (atom {:executed [] + :users {} + :graph-members {} + :graphs {}}) + db (make-d1 state)] + (-> (index/ (index/ (index/