🚧 Continue working on websocket communication.

This commit is contained in:
Andrey Antukh 2019-12-18 23:13:31 +01:00
parent d88bb1cfcb
commit 51058dd83a
8 changed files with 213 additions and 130 deletions

View file

@ -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]

View file

@ -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