From 14d9a208a7c859e80a8f4e9c233fb2c05620f622 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Sat, 14 Sep 2019 23:16:48 +0200 Subject: [PATCH] :construction: Convert projects api to use spec. --- backend/src/uxbox/api/projects.clj | 51 ++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/backend/src/uxbox/api/projects.clj b/backend/src/uxbox/api/projects.clj index c40081fb2..5167a80d9 100644 --- a/backend/src/uxbox/api/projects.clj +++ b/backend/src/uxbox/api/projects.clj @@ -15,6 +15,15 @@ [uxbox.util.uuid :as uuid] [uxbox.util.exceptions :as ex])) + +;; --- Common Specs + +(s/def ::id ::us/uuid) +(s/def ::name string?) +(s/def ::version (s/and int? pos?)) + +;; --- List Projects + (defn list-projects {:description "List projects"} [{:keys [user] :as req}] @@ -22,10 +31,16 @@ (->> (sv/query message) (p/map rsp/ok)))) +;; --- Create Projects + +(s/def ::create-project|body + (s/keys :req-un [::name] + :opt-un [::id])) + (defn create-project "Create project" - {:parameters {:body {:name [st/required st/string] - :id [st/uuid-str]}}} + {:parameters {:body ::create-project|body} + :validation :spec} [{:keys [user parameters] :as req}] (let [data (get parameters :body) message (assoc data :type :create-project :user user)] @@ -34,11 +49,19 @@ (let [loc (str "/api/projects/" (:id result))] (rsp/created loc result))))))) +;; --- Update Project + +(s/def ::update-project|path + (s/keys :req-un [::id])) + +(s/def ::update-project|body + (s/keys :req-un [::name ::version])) + (defn update-project "Update project" - {:parameters {:path {:id [st/required st/uuid-str]} - :body {:name [st/required st/string] - :version [st/required st/integer]}}} + {:parameters {:path ::update-project|path + :body ::update-project|body} + :validation :spec} [{:keys [user parameters] :as req}] (let [id (get-in parameters [:path :id]) data (get parameters :body) @@ -46,18 +69,32 @@ (-> (sv/novelty message) (p/then rsp/ok)))) +;; --- Delete Project + +(s/def ::delete-project|path + (s/keys :req-un [::id])) + (defn delete-project "Delete project" - {:parameters {:path {:id [st/required st/uuid-str]}}} + {:parameters {:path ::delete-project|path} + :validation :spec} [{:keys [user parameters] :as req}] (let [id (get-in parameters [:path :id]) message {:id id :type :delete-project :user user}] (-> (sv/novelty message) (p/then (constantly (rsp/no-content)))))) +;; --- Get Project by Share Token + +(s/def ::token string?) + +(s/def ::get-project-by-share-token|path + (s/keys :req-un [::token])) + (defn get-project-by-share-token "Get a project by shared token" - {:parameters {:path {:token [st/required st/string]}}} + {:parameters {:path ::get-project-by-share-token|path} + :validation :spec} [{:keys [user parameters] :as req}] (let [message {:token (get-in parameters [:path :token]) :type :retrieve-project-by-share-token}]