0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-15 01:01:30 -05:00

🚧 Convert projects api to use spec.

This commit is contained in:
Andrey Antukh 2019-09-14 23:16:48 +02:00
parent 5afbfe1ce9
commit 14d9a208a7

View file

@ -15,6 +15,15 @@
[uxbox.util.uuid :as uuid] [uxbox.util.uuid :as uuid]
[uxbox.util.exceptions :as ex])) [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 (defn list-projects
{:description "List projects"} {:description "List projects"}
[{:keys [user] :as req}] [{:keys [user] :as req}]
@ -22,10 +31,16 @@
(->> (sv/query message) (->> (sv/query message)
(p/map rsp/ok)))) (p/map rsp/ok))))
;; --- Create Projects
(s/def ::create-project|body
(s/keys :req-un [::name]
:opt-un [::id]))
(defn create-project (defn create-project
"Create project" "Create project"
{:parameters {:body {:name [st/required st/string] {:parameters {:body ::create-project|body}
:id [st/uuid-str]}}} :validation :spec}
[{:keys [user parameters] :as req}] [{:keys [user parameters] :as req}]
(let [data (get parameters :body) (let [data (get parameters :body)
message (assoc data :type :create-project :user user)] message (assoc data :type :create-project :user user)]
@ -34,11 +49,19 @@
(let [loc (str "/api/projects/" (:id result))] (let [loc (str "/api/projects/" (:id result))]
(rsp/created loc 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 (defn update-project
"Update project" "Update project"
{:parameters {:path {:id [st/required st/uuid-str]} {:parameters {:path ::update-project|path
:body {:name [st/required st/string] :body ::update-project|body}
:version [st/required st/integer]}}} :validation :spec}
[{:keys [user parameters] :as req}] [{:keys [user parameters] :as req}]
(let [id (get-in parameters [:path :id]) (let [id (get-in parameters [:path :id])
data (get parameters :body) data (get parameters :body)
@ -46,18 +69,32 @@
(-> (sv/novelty message) (-> (sv/novelty message)
(p/then rsp/ok)))) (p/then rsp/ok))))
;; --- Delete Project
(s/def ::delete-project|path
(s/keys :req-un [::id]))
(defn delete-project (defn delete-project
"Delete project" "Delete project"
{:parameters {:path {:id [st/required st/uuid-str]}}} {:parameters {:path ::delete-project|path}
:validation :spec}
[{:keys [user parameters] :as req}] [{:keys [user parameters] :as req}]
(let [id (get-in parameters [:path :id]) (let [id (get-in parameters [:path :id])
message {:id id :type :delete-project :user user}] message {:id id :type :delete-project :user user}]
(-> (sv/novelty message) (-> (sv/novelty message)
(p/then (constantly (rsp/no-content)))))) (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 (defn get-project-by-share-token
"Get a project by shared 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}] [{:keys [user parameters] :as req}]
(let [message {:token (get-in parameters [:path :token]) (let [message {:token (get-in parameters [:path :token])
:type :retrieve-project-by-share-token}] :type :retrieve-project-by-share-token}]