mirror of
https://github.com/penpot/penpot.git
synced 2025-03-13 16:21:57 -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.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}]
|
||||
|
|
Loading…
Add table
Reference in a new issue