Import backend code inside the repository.

This commit is contained in:
Andrey Antukh 2016-11-20 20:04:52 +01:00
parent e21798f1ed
commit de57630c14
No known key found for this signature in database
GPG key ID: 4DFEBCB8316A8B95
113 changed files with 8040 additions and 0 deletions

View file

@ -0,0 +1,73 @@
;; 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.frontend.projects
(:require [clojure.spec :as s]
[promesa.core :as p]
[catacumba.http :as http]
[uxbox.util.spec :as us]
[uxbox.services :as sv]
[uxbox.util.response :refer (rsp)]
[uxbox.util.uuid :as uuid]))
;; --- List Projects
(defn list-projects
[{user :identity}]
(let [message {:user user :type :list-projects}]
(->> (sv/query message)
(p/map #(http/ok (rsp %))))))
;; --- Create Projects
(s/def ::create-project
(s/keys :req-un [::us/name] :opt-un [::us/id]))
(defn create-project
[{user :identity data :data}]
(let [data (us/conform ::create-project data)
message (assoc data
:type :create-project
:user user)]
(->> (sv/novelty message)
(p/map (fn [result]
(let [loc (str "/api/projects/" (:id result))]
(http/created loc (rsp result))))))))
;; --- Update Project
(s/def ::update-project
(s/keys :req-un [::us/name ::us/version]))
(defn update-project
[{user :identity params :route-params data :data}]
(let [data (us/conform ::update-project data)
message (assoc data
:id (uuid/from-string (:id params))
:type :update-project
:user user)]
(-> (sv/novelty message)
(p/then #(http/ok (rsp %))))))
;; --- Delete Project
(defn delete-project
[{user :identity params :route-params}]
(let [message {:id (uuid/from-string (:id params))
:type :delete-project
:user user}]
(-> (sv/novelty message)
(p/then (fn [v] (http/no-content))))))
;; --- Retrieve project
(defn retrieve-project-by-share-token
[{params :route-params}]
(let [message {:token (:token params)
:type :retrieve-project-by-share-token}]
(->> (sv/query message)
(p/map #(http/ok (rsp %))))))