Split project and page repository functions in different namespaces.

This commit is contained in:
Andrey Antukh 2016-03-19 15:26:11 +02:00
parent 124366cbce
commit 6fdc0c0fd6
4 changed files with 58 additions and 34 deletions

View file

@ -7,15 +7,16 @@
(ns uxbox.repo (ns uxbox.repo
"A main interface for access to remote resources." "A main interface for access to remote resources."
(:refer-clojure :exclude [do]) (:refer-clojure :exclude [do])
(:require [uxbox.repo.core :as urc] (:require [uxbox.repo.core :refer (-do)]
[uxbox.repo.auth] [uxbox.repo.auth]
[uxbox.repo.projects] [uxbox.repo.projects]
[uxbox.repo.pages]
[beicon.core :as rx])) [beicon.core :as rx]))
(defn do (defn do
"Perform a side effectfull action accesing "Perform a side effectfull action accesing
remote resources." remote resources."
([type] ([type]
(urc/-do type nil)) (-do type nil))
([type data] ([type data]
(urc/-do type data))) (-do type data)))

View file

@ -65,10 +65,11 @@
(->> (http/send! request) (->> (http/send! request)
(rx/from-promise) (rx/from-promise)
(rx/map conditional-decode) (rx/map conditional-decode)
(rx/mapcat handle-http-status) (rx/mapcat handle-http-status))))
(rx/tap #(println "tt:" %)))))
;; "tt: "))))
(defmulti -do (defmulti -do
(fn [type data] type)) (fn [type data] type))
(defmethod -do :default
[type data]
(throw (ex-info (str "No implementation found for " type) {:data data})))

50
src/uxbox/repo/pages.cljs Normal file
View file

@ -0,0 +1,50 @@
;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) 2016 Andrey Antukh <niwi@niwi.nz>
(ns uxbox.repo.pages
"A main interface for access to remote resources."
(:require [beicon.core :as rx]
[uxbox.repo.core :refer (-do url send!)]
[uxbox.state :as ust]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Login
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod -do :fetch/pages
[type data]
(send! {:url (str url "/pages") :method :get}))
(defmethod -do :fetch/pages-by-project
[type {:keys [project] :as params}]
(let [url (str url "/projects/" project "/pages")]
(send! {:method :get :url url})))
(defmethod -do :delete/page
[_ id]
(let [url (str url "/pages/" id)]
(send! {:url url :method :delete})))
(defmethod -do :create/page
[type {:keys [id] :as data}]
(let [params {:url (str url "/pages")
:method :post
:body data}]
(send! params)))
(defmethod -do :update/page
[type {:keys [id] :as data}]
(let [params {:url (str url "/pages/" id)
:method :put
:body data}]
(send! params)))
(defmethod -do :update/page-metadata
[type {:keys [id] :as data}]
(let [params {:url (str url "/pages/" id "/metadata")
:method :put
:body data}]
(send! params)))

View file

@ -19,15 +19,6 @@
(let [url (str url "/projects")] (let [url (str url "/projects")]
(send! {:url url :method :get}))) (send! {:url url :method :get})))
(defmethod -do :fetch/pages
[type data]
(send! {:url (str url "/pages") :method :get}))
(defmethod -do :fetch/pages-by-project
[type {:keys [project] :as params}]
(let [url (str url "/projects/" project "/pages")]
(send! {:method :get :url url})))
(defmethod -do :create/project (defmethod -do :create/project
[_ data] [_ data]
(let [params {:url (str url "/projects") (let [params {:url (str url "/projects")
@ -39,22 +30,3 @@
[_ id] [_ id]
(let [url (str url "/projects/" id)] (let [url (str url "/projects/" id)]
(send! {:url url :method :delete}))) (send! {:url url :method :delete})))
(defmethod -do :delete/page
[_ id]
(let [url (str url "/pages/" id)]
(send! {:url url :method :delete})))
(defmethod -do :create/page
[type {:keys [id] :as data}]
(let [params {:url (str url "/pages")
:method :post
:body data}]
(send! params)))
(defmethod -do :update/page
[type {:keys [id] :as data}]
(let [params {:url (str url "/pages/" id)
:method :put
:body data}]
(send! params)))