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:
parent
5afbfe1ce9
commit
14d9a208a7
1 changed files with 44 additions and 7 deletions
|
@ -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}]
|
||||||
|
|
Loading…
Add table
Reference in a new issue