mirror of
https://github.com/penpot/penpot.git
synced 2025-05-29 16:46:12 +02:00
🚧 Continue working on websocket communication.
This commit is contained in:
parent
d88bb1cfcb
commit
51058dd83a
8 changed files with 213 additions and 130 deletions
|
@ -56,8 +56,10 @@
|
|||
|
||||
(defmethod handle-message :disconnect
|
||||
[{:keys [user-id] :as ws} {:keys [file-id] :as message}]
|
||||
(swap! state update file-id dissoc user-id)
|
||||
nil)
|
||||
(let [local (swap! state update file-id dissoc user-id)
|
||||
sessions (get local file-id)
|
||||
message {:type :who :users (set (keys sessions))}]
|
||||
(run! #(send! % message) (vals sessions))))
|
||||
|
||||
(defmethod handle-message :who
|
||||
[{:keys [file-id] :as ws} message]
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
(s/def ::id ::us/uuid)
|
||||
(s/def ::name ::us/string)
|
||||
(s/def ::project-id ::us/uuid)
|
||||
(s/def ::file-id ::us/uuid)
|
||||
(s/def ::user ::us/uuid)
|
||||
|
||||
(su/defstr sql:generic-project-files
|
||||
|
@ -75,7 +76,6 @@
|
|||
(-> (db/query conn [sql:recent-files user 20])
|
||||
(p/then' (partial mapv decode-row))))
|
||||
|
||||
|
||||
;; --- Query: Project File (By ID)
|
||||
|
||||
(su/defstr sql:project-file
|
||||
|
@ -90,6 +90,40 @@
|
|||
(-> (db/query-one db/pool [sql:project-file user id])
|
||||
(p/then' decode-row)))
|
||||
|
||||
;; --- Query: Users of the File
|
||||
|
||||
(su/defstr sql:file-users
|
||||
"select u.id, u.fullname, u.photo
|
||||
from users as u
|
||||
join project_file_users as pfu on (pfu.user_id = u.id)
|
||||
where pfu.file_id = $1
|
||||
union all
|
||||
select u.id, u.fullname, u.photo
|
||||
from users as u
|
||||
join project_users as pu on (pu.user_id = u.id)
|
||||
where pu.project_id = $2")
|
||||
|
||||
(declare retrieve-minimal-file)
|
||||
|
||||
(su/defstr sql:minimal-file
|
||||
"with files as (~{sql:generic-project-files})
|
||||
select id, project_id from files where id = $2")
|
||||
|
||||
(s/def ::project-file-users
|
||||
(s/keys :req-un [::user ::file-id]))
|
||||
|
||||
(sq/defquery ::project-file-users
|
||||
[{:keys [user file-id] :as params}]
|
||||
(db/with-atomic [conn db/pool]
|
||||
(-> (retrieve-minimal-file conn user file-id)
|
||||
(p/then (fn [{:keys [id project-id]}]
|
||||
(prn ::project-file-users id project-id)
|
||||
(db/query conn [sql:file-users id project-id]))))))
|
||||
|
||||
(defn- retrieve-minimal-file
|
||||
[conn user-id file-id]
|
||||
(-> (db/query-one conn [sql:minimal-file user-id file-id])
|
||||
(p/then' su/raise-not-found-if-nil)))
|
||||
|
||||
;; --- Helpers
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue