Kaynağa Gözat

fix: graph role

Tienson Qin 1 ay önce
ebeveyn
işleme
3f4685f862

+ 4 - 1
deps/db-sync/src/logseq/db_sync/index.cljs

@@ -34,7 +34,8 @@
 (defn <index-list [db user-id]
   (if (string? user-id)
     (p/let [result (common/<d1-all db
-                                   (str "select g.graph_id, g.graph_name, g.schema_version, g.created_at, g.updated_at "
+                                   (str "select g.graph_id, g.graph_name, g.schema_version, g.created_at, g.updated_at, "
+                                        "m.role, m.invited_by "
                                         "from graphs g "
                                         "left join graph_members m on g.graph_id = m.graph_id and m.user_id = ? "
                                         "where g.user_id = ? or m.user_id = ? "
@@ -47,6 +48,8 @@
               {:graph-id (aget row "graph_id")
                :graph-name (aget row "graph_name")
                :schema-version (aget row "schema_version")
+               :role (aget row "role")
+               :invited-by (aget row "invited_by")
                :created-at (aget row "created_at")
                :updated-at (aget row "updated_at")})
             rows))

+ 5 - 3
deps/db-sync/src/logseq/db_sync/malli_schema.cljs

@@ -94,17 +94,19 @@
   [:map
    [:ok :boolean]])
 
+(def graph-member-role-schema
+  [:enum "manager" "member"])
+
 (def graph-info-schema
   [:map
    [:graph-id :string]
    [:graph-name :string]
    [:schema-version {:optional true} [:maybe :string]]
+   [:role {:optional true} [:maybe graph-member-role-schema]]
+   [:invited-by {:optional true} [:maybe :string]]
    [:created-at :int]
    [:updated-at :int]])
 
-(def graph-member-role-schema
-  [:enum "manager" "member"])
-
 (def graph-member-info-schema
   [:map
    [:user-id :string]

+ 35 - 2
deps/db-sync/test/logseq/db_sync/index_test.cljs

@@ -108,8 +108,16 @@
                           set)
           member-graphs (->> (:graphs @state)
                              vals
-                             (filter (fn [row] (contains? member-ids (:graph-id row)))))]
-      (js-rows (concat owned member-graphs)))
+                             (filter (fn [row] (contains? member-ids (:graph-id row)))))
+          rows (concat owned member-graphs)
+          rows (map (fn [row]
+                      (let [member (get-in @state [:graph-members [user-id (:graph-id row)]])]
+                        (cond-> row
+                          member
+                          (assoc :role (:role member)
+                                 :invited-by (:invited-by member)))))
+                    rows)]
+      (js-rows rows))
 
     (string/includes? sql "select graph_id from graphs where graph_name")
     (let [[graph-name user-id] args
@@ -203,6 +211,31 @@
                           (is false (str e))
                           (done)))))))
 
+(deftest graph-list-includes-role-and-invited-by-test
+  (async done
+         (let [state (atom {:executed []
+                            :users {}
+                            :graph-members {}
+                            :graphs {}})
+               db (make-d1 state)]
+           (-> (p/do!
+                (index/<index-upsert! db "graph-1" "alpha" "user-1" "1")
+                (index/<graph-member-upsert! db "graph-1" "user-1" "manager" "user-2")
+                (index/<index-upsert! db "graph-2" "beta" "user-2" "1")
+                (index/<graph-member-upsert! db "graph-2" "user-1" "member" "user-2"))
+               (p/then (fn [_]
+                         (p/let [graphs (index/<index-list db "user-1")
+                                 alpha (first (filter (fn [g] (= "graph-1" (:graph-id g))) graphs))
+                                 beta (first (filter (fn [g] (= "graph-2" (:graph-id g))) graphs))]
+                           (is (= "manager" (:role alpha)))
+                           (is (= "user-2" (:invited-by alpha)))
+                           (is (= "member" (:role beta)))
+                           (is (= "user-2" (:invited-by beta)))
+                           (done))))
+               (p/catch (fn [e]
+                          (is false (str e))
+                          (done)))))))
+
 (deftest graph-member-upsert-test
   (async done
          (let [state (atom {:executed []

+ 4 - 2
src/main/frontend/handler/db_based/db_sync.cljs

@@ -307,8 +307,10 @@
                                    :GraphName (:graph-name graph)
                                    :GraphSchemaVersion (:schema-version graph)
                                    :GraphUUID (:graph-id graph)
-                                   :rtc-graph? true}
-                                  (dissoc graph :graph-id :graph-name :schema-version)))
+                                   :rtc-graph? true
+                                   :graph<->user-user-type (:role graph)
+                                   :graph<->user-grant-by-user (:invited-by graph)}
+                                  (dissoc graph :graph-id :graph-name :schema-version :role :invited-by)))
                                graphs)]
             (state/set-state! :rtc/graphs result)
             (repo-handler/refresh-repos!)