This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2019-12-05
Channels
- # adventofcode (95)
- # announcements (3)
- # babashka (11)
- # beginners (39)
- # boot (19)
- # bristol-clojurians (1)
- # cider (32)
- # clj-kondo (39)
- # cljsrn (8)
- # clojure (156)
- # clojure-dev (35)
- # clojure-europe (4)
- # clojure-italy (15)
- # clojure-nl (28)
- # clojure-spec (43)
- # clojure-uk (153)
- # clojurescript (168)
- # core-async (13)
- # core-logic (11)
- # cryogen (4)
- # cursive (13)
- # datomic (26)
- # duct (3)
- # emacs (8)
- # fulcro (33)
- # garden (4)
- # graalvm (18)
- # graphql (4)
- # jobs-discuss (2)
- # kaocha (1)
- # leiningen (3)
- # malli (8)
- # off-topic (1)
- # pathom (7)
- # re-frame (21)
- # reagent (3)
- # rewrite-clj (1)
- # schema (4)
- # shadow-cljs (40)
- # sql (2)
- # uncomplicate (3)
Hello everybody, I just released pathom 2.2.28
, in this version:
• fix bounded recursive queries on parallel parser @mroerni
• connect mutations add the key ::pc/mutation-ast
to env , @splayemu you can use this now to see the source mutation when doing follow up reads
Hi there! I’m trying to get a root resolver for ::current-user
, which is resolved from the ::current-session
, which doesn’t require any inputs. So, instead of having to write [{::current-session [{:session/user [:user/id]}]}]
every time, I want to be able to get the same result by [::current-user]
. Seems like it would require to be able to resolve attributes inside of the resolver itself, something like
(defresolver current-user-resolver [_ {::keys [current-session]}]
{::pc/input #{{::current-session [{:session/user [:user/id]}]}}
::pc/output [{::current-user [:user/id]}]}
{::current-user (select-keys (:session/user current-session) [:user/id])})
(defresolver session-resolver [{:keys [db]} {:session/keys [id]}]
{::pc/input #{:session/id}
::pc/output [{:session/user [:user/id]}]}
(d/pull db [{:session/user [:user/id]}] [:session/id id]))
(defresolver current-session-resolver [{{:keys [session]} :ring/request} _]
{::pc/output [{::current-session [:session/id]}]}
{::current-session (select-keys session [:session/id])})
Is there a way to achieve that without writing a custom DB query (given that Pathom Connect knows how to get the needed data)?I guess what you are looking for is nested inputs, this is something I like to support, but not there yet, there is a way around it now, you can do a manual call to the parser with the input sub-query, something like this:
(defresolver current-user-resolver [{:keys [parser] :as env} {::keys [current-session]}]
{::pc/input #{::current-session}
::pc/output [{::current-user [:user/id]}]}
; note: if you are using async or parallel parsers, the parser return is a channel and
; you have to add code to wait for it
(let [current-session (-> (parser env [{::current-session [{:session/user [:user/id]}]}])
::current-session)]
{::current-user (select-keys (:session/user current-session) [:user/id])}))
(defresolver session-resolver [{:keys [db]} {:session/keys [id]}]
{::pc/input #{:session/id}
::pc/output [{:session/user [:user/id]}]}
(d/pull db [{:session/user [:user/id]}] [:session/id id]))
(defresolver current-session-resolver [{{:keys [session]} :ring/request} _]
{::pc/output [{::current-session [:session/id]}]}
{::current-session (select-keys session [:session/id])})
makes sense?