add edit snippet use case
This commit is contained in:
parent
f58db3d88b
commit
2197dd0c1d
5 changed files with 56 additions and 1 deletions
|
|
@ -14,5 +14,5 @@ App to store my code snippets.
|
|||
### How to run dev server
|
||||
|
||||
```
|
||||
$ clojure -M -m snippets.api
|
||||
$ clojure -M -m snippets.infra.api
|
||||
```
|
||||
|
|
|
|||
22
bruno/CodeSnippets/edit_snippet.bru
Normal file
22
bruno/CodeSnippets/edit_snippet.bru
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
meta {
|
||||
name: edit_snippet
|
||||
type: http
|
||||
seq: 7
|
||||
}
|
||||
|
||||
patch {
|
||||
url: {{host}}/api/snippet?id=680a3508-7709-4f71-b5c3-3dcbffe6f5cf
|
||||
body: json
|
||||
auth: none
|
||||
}
|
||||
|
||||
params:query {
|
||||
id: 680a3508-7709-4f71-b5c3-3dcbffe6f5cf
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"title": "Updated from Bruno",
|
||||
"tags": ["code", "mock"]
|
||||
}
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
[snippets.use-cases.view]
|
||||
[snippets.use-cases.delete]
|
||||
[snippets.use-cases.create]
|
||||
[snippets.use-cases.edit]
|
||||
[snippets.infra.config :as config]
|
||||
[muuntaja.middleware :as mm]
|
||||
[ring.middleware.params]
|
||||
|
|
@ -20,6 +21,15 @@
|
|||
(snippets.use-cases.create/create-snippet body)
|
||||
{:status 200, :body "snippet created"})
|
||||
|
||||
(defn handle-edit-snippet [{body :body-params params :query-params}]
|
||||
(let [id (get params "id")]
|
||||
(t/log! {:level :info, :data {:body body :id id}} "Received request to edit snippet")
|
||||
(let [{success :success :as res} (snippets.use-cases.edit/edit-snippet id body)]
|
||||
(cond
|
||||
success {:status 200, :body "snippet updated"}
|
||||
(= (:reason res) :invalid-patch) {:status 400, :body "invalid patch"}
|
||||
:else {:status 500, :body "internal server error"}))))
|
||||
|
||||
(defn handle-view-snippets [{params :query-params}]
|
||||
(let [limit (Integer/parseInt (get params "limit" "10"))
|
||||
skip (Integer/parseInt (get params "skip" "0"))]
|
||||
|
|
@ -51,6 +61,7 @@
|
|||
["/snippets" {:get handle-view-snippets}]
|
||||
["/snippet" {:post handle-create-snippet
|
||||
:get handle-view-snippet
|
||||
:patch handle-edit-snippet
|
||||
:delete handle-delete-snippet}]])
|
||||
(rr/create-default-handler)))
|
||||
|
||||
|
|
|
|||
|
|
@ -35,3 +35,7 @@
|
|||
(defn erase-snippet [id]
|
||||
(t/log! {:level :info, :data {:id id}} "Erasing snippet, aka removing it completely through out time")
|
||||
(xt/execute-tx client [[:erase-docs :snippets id]]))
|
||||
|
||||
(defn patch-snippet [id patch]
|
||||
(t/log! {:level :info, :data {:patch patch :id id}} "Patching snippet")
|
||||
(xt/execute-tx client [[:patch-docs :snippets (merge {:xt/id id} patch)]]))
|
||||
|
|
|
|||
|
|
@ -1,4 +1,22 @@
|
|||
(ns snippets.use-cases.edit
|
||||
(:require
|
||||
[taoensso.telemere :as t]
|
||||
[malli.core :as m]
|
||||
[snippets.infra.db :as db]))
|
||||
|
||||
(def valid-patch?
|
||||
(m/validator
|
||||
[:map {:closed true}
|
||||
[:markdown {:optional true} :string]
|
||||
[:title {:optional true} :string]
|
||||
[:tags [:seqable :string]]
|
||||
[:slug {:optional true} :string]]))
|
||||
|
||||
(defn edit-snippet [id patch]
|
||||
(t/log! {:level :info, :data {:patch patch :id id}} "Editing snippet")
|
||||
(if (valid-patch? patch)
|
||||
(do
|
||||
(t/log! {:level :info, :data {:patch patch :id id}} "Valid changes editing snippet")
|
||||
(db/patch-snippet id patch)
|
||||
{:success true})
|
||||
{:success false :reason :invalid-patch}))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue