Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion server/src/ethlance/server/graphql/resolvers.cljs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns ethlance.server.graphql.resolvers
(:require
[camel-snake-kebab.core]
[cljs-ipfs-api.files :as ipfs-files]
[clojure.string :as string]
[district.graphql-utils :as graphql-utils]
[district.server.async-db :as db :include-macros true]
Expand All @@ -9,6 +10,7 @@
[ethlance.server.db :as ethlance-db]
[ethlance.server.event-replay-queue :as replay-queue]
[ethlance.server.graphql.authorization :as authorization]
[ethlance.server.ipfs :as ipfs]
[ethlance.server.syncer :as syncer]
[ethlance.shared.spec :refer [validate-keys]]
[honeysql.core :as sql]
Expand Down Expand Up @@ -1261,6 +1263,30 @@
user)))


(defn data-to-buffer [data]
(let [matcher (re-matches #"data:(\w+/\w+);base64,(.+)" data)]
(if matcher
(let [base64-image (get matcher 2)]
(js/Buffer.from base64-image "base64"))
(ipfs/to-buffer data))))


(defn upload-data-mutation
[_ {:keys [data]} _]
(js/Promise.
(fn [resolve reject]
(ipfs-files/add (data-to-buffer data)
(fn [error result]
(if (or error (empty? result))
(let [err-txt "Error when adding data to ipfs"]
(log/error err-txt {:result result
:error error
:data data}
:upload-data-mutation)
(println ">>> upload-data-mutation REJECT")
(reject err-txt))
(resolve (:Hash result))))))))

(defn replay-events
[_ _ _]
(db/with-async-resolver-tx conn
Expand Down Expand Up @@ -1363,6 +1389,7 @@
:removeJobProposal (require-auth remove-job-proposal-mutation)
:replayEvents replay-events
:githubSignUp (require-auth github-signup-mutation)
:linkedinSignUp (require-auth linkedin-signup-mutation)}
:linkedinSignUp (require-auth linkedin-signup-mutation)
:uploadData (require-auth upload-data-mutation)}
;; :Date ; TODO: https://www.apollographql.com/docs/apollo-server/schema/custom-scalars/#example-the-date-scalar
})
2 changes: 1 addition & 1 deletion server/src/ethlance/server/graphql/server.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

;; NOTE: the order off how we are applying middlewares matter
app (doto (express)
(.use (.json body-parser))
(.use (.json body-parser #js {:limit "2mb"}))
(.use middlewares/current-user-express-middleware))

server (new ApolloServer
Expand Down
1 change: 1 addition & 0 deletions shared/src/ethlance/shared/graphql/schema.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@
replayEvents: Boolean!,
githubSignUp(input: githubSignUpInput!): githubSignUpPayload!
linkedinSignUp(input: linkedinSignUpInput!): linkedinSignUpPayload!
uploadData(data: String!): ID!
}

# mutation result types
Expand Down
11 changes: 11 additions & 0 deletions ui/src/ethlance/ui/effects.cljs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
(ns ethlance.ui.effects
(:require
[cljs-web3.core :as web3]
[district.ui.graphql.events :as gql-events]
[ethlance.ui.events]
[re-frame.core :as re]))


Expand All @@ -16,3 +18,12 @@
(if err
(re/dispatch (conj on-error err))
(re/dispatch (conj on-success (aget result "result"))))))))


(re/reg-fx
:data/upload
(fn [{:keys [:data :on-success :on-error]}]
(re/dispatch [::gql-events/mutation
{:queries [[:upload-data {:data (if (string? data) data (pr-str data))}]]
:on-success [:ethlance/data-upload-success on-success]
:on-error on-error}])))
5 changes: 5 additions & 0 deletions ui/src/ethlance/ui/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,8 @@
[:page.invoices/initialize-page]
[:page.new-invoice/initialize-page]]
:dispatch-later [{:ms 1000 :dispatch [::listen-account-changes]}]})))

(re/reg-event-fx
:ethlance/data-upload-success
(fn [_ [_ on-success result]]
{:dispatch (conj on-success {:Hash (:upload-data result)})}))
7 changes: 3 additions & 4 deletions ui/src/ethlance/ui/page/invoices/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,9 @@
(re/reg-event-fx
:page.invoices/pay
(fn [_ [_ invoice]]
{:ipfs/call {:func "add"
:args [(js/Blob. [invoice])]
:on-success [::invoice-to-ipfs-success invoice]
:on-error [::invoice-to-ipfs-failure invoice]}}))
{:data/upload {:data invoice
:on-success [::invoice-to-ipfs-success invoice]
:on-error [::invoice-to-ipfs-failure invoice]}}))


(re/reg-event-fx
Expand Down
21 changes: 9 additions & 12 deletions ui/src/ethlance/ui/page/job_contract/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,9 @@
:job-story/id job-story-id
:invoice/id invoice-id}]
{:fx [[:dispatch [::set-buttons-disabled true]]]
:ipfs/call {:func "add"
:args [(js/Blob. [ipfs-dispute])]
:on-success [:page.job-contract/raise-dispute-to-ipfs-success ipfs-dispute]
:on-error [::dispute-to-ipfs-failure invoice-id]}}))
:data/upload {:data ipfs-dispute
:on-success [:page.job-contract/raise-dispute-to-ipfs-success ipfs-dispute]
:on-error [::dispute-to-ipfs-failure invoice-id]}}))


(re/reg-event-fx
Expand Down Expand Up @@ -186,10 +185,9 @@
:message/creator (:employer proposal-data)
:text (:text proposal-data)}]
{:fx [[:dispatch [::set-buttons-disabled true]]]
:ipfs/call {:func "add"
:args [(js/Blob. [to-ipfs])]
:on-success [:accept-proposal-to-ipfs-success to-ipfs]
:on-error [::accept-proposal-to-ipfs-failure to-ipfs]}})))
:data/upload {:data to-ipfs
:on-success [:accept-proposal-to-ipfs-success to-ipfs]
:on-error [::accept-proposal-to-ipfs-failure to-ipfs]}})))


(re/reg-event-fx
Expand Down Expand Up @@ -273,10 +271,9 @@
:job/id job-id
:job-story/id job-story-id
:invoice/id invoice-id}]
{:ipfs/call {:func "add"
:args [(js/Blob. [ipfs-dispute])]
:on-success [:page.job-contract/resolve-dispute-to-ipfs-success event]
:on-error [::dispute-to-ipfs-failure event]}}))
{:data/upload {:data ipfs-dispute
:on-success [:page.job-contract/resolve-dispute-to-ipfs-success event]
:on-error [::dispute-to-ipfs-failure event]}}))


(defn send-resolve-dispute-tx
Expand Down
7 changes: 3 additions & 4 deletions ui/src/ethlance/ui/page/job_detail/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,9 @@
:job-arbiter/fee
:job-arbiter/fee-currency-id])]
{:fx [[:dispatch [::set-arbiter-tx-in-progress true]]]
:ipfs/call {:func "add"
:args [(js/Blob. [ipfs-arbitration])]
:on-success [:page.job-detail/arbitration-to-ipfs-success event]
:on-error [::arbitration-to-ipfs-failed]}}))
:data/upload {:data ipfs-arbitration
:on-success [:page.job-detail/arbitration-to-ipfs-success event]
:on-error [::arbitration-to-ipfs-failed]}}))


(re/reg-event-fx
Expand Down
9 changes: 4 additions & 5 deletions ui/src/ethlance/ui/page/new_invoice/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,10 @@
:message/text (:message db-invoice)
:job/id (-> db-invoice :invoiced-job :job/id)
:job-story/id (-> db-invoice :invoiced-job :job-story/id parse-int)}]
{:fx [[:dispatch [::set-tx-in-progress true]]
[:ipfs/call {:func "add"
:args [(js/Blob. [ipfs-invoice])]
:on-success [::invoice-to-ipfs-success ipfs-invoice]
:on-error [::invoice-to-ipfs-failure ipfs-invoice]}]]})))
{:fx [[:dispatch [::set-tx-in-progress true]]]
:data/upload {:data ipfs-invoice
:on-success [::invoice-to-ipfs-success ipfs-invoice]
:on-error [::invoice-to-ipfs-failure ipfs-invoice]}})))


(re/reg-event-fx
Expand Down
7 changes: 3 additions & 4 deletions ui/src/ethlance/ui/page/new_job/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,9 @@
(fn [{:keys [db]}]
(let [db-job (get db state-key)
ipfs-job (reduce-kv (partial db-job->ipfs-job db-job) {} db->ipfs-mapping)]
{:fx [[:ipfs/call {:func "add"
:args [(js/Blob. [ipfs-job])]
:on-success [::job-to-ipfs-success]
:on-error [::job-to-ipfs-failure]}]]})))
{:data/upload {:data ipfs-job
:on-success [::job-to-ipfs-success]
:on-error [::job-to-ipfs-failure]}})))


(re/reg-event-fx
Expand Down
7 changes: 3 additions & 4 deletions ui/src/ethlance/ui/page/profile/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,9 @@
:job/id (get-in invitation-data [:job :job/id])
:message/creator (:employer invitation-data)
:text (:text invitation-data)}]
{:ipfs/call {:func "add"
:args [(js/Blob. [ipfs-invitation])]
:on-success [:invitation-to-ipfs-success ipfs-invitation]
:on-error [:invitation-to-ipfs-failure ipfs-invitation]}})))
{:data/upload {:data ipfs-invitation
:on-success [:invitation-to-ipfs-success ipfs-invitation]
:on-error [:invitation-to-ipfs-failure ipfs-invitation]}})))


(re/reg-event-fx
Expand Down
7 changes: 3 additions & 4 deletions ui/src/ethlance/ui/page/sign_up/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,9 @@
:page.sign-up/upload-user-image
[interceptors]
(fn [_ [{:keys [:file-info] :as data}]]
{:ipfs/call {:func "add"
:args [(:file file-info)]
:on-success [::upload-user-image-success data]
:on-error [::logging/error "Error uploading user image" {:data data}]}}))
{:data/upload {:data (-> file-info :selected-file :url-data)
:on-success [::upload-user-image-success data]
:on-error [::logging/error "Error uploading user image" {:data data}]}}))


(re/reg-event-fx
Expand Down
Loading