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
|
### 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.view]
|
||||||
[snippets.use-cases.delete]
|
[snippets.use-cases.delete]
|
||||||
[snippets.use-cases.create]
|
[snippets.use-cases.create]
|
||||||
|
[snippets.use-cases.edit]
|
||||||
[snippets.infra.config :as config]
|
[snippets.infra.config :as config]
|
||||||
[muuntaja.middleware :as mm]
|
[muuntaja.middleware :as mm]
|
||||||
[ring.middleware.params]
|
[ring.middleware.params]
|
||||||
|
|
@ -20,6 +21,15 @@
|
||||||
(snippets.use-cases.create/create-snippet body)
|
(snippets.use-cases.create/create-snippet body)
|
||||||
{:status 200, :body "snippet created"})
|
{: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}]
|
(defn handle-view-snippets [{params :query-params}]
|
||||||
(let [limit (Integer/parseInt (get params "limit" "10"))
|
(let [limit (Integer/parseInt (get params "limit" "10"))
|
||||||
skip (Integer/parseInt (get params "skip" "0"))]
|
skip (Integer/parseInt (get params "skip" "0"))]
|
||||||
|
|
@ -51,6 +61,7 @@
|
||||||
["/snippets" {:get handle-view-snippets}]
|
["/snippets" {:get handle-view-snippets}]
|
||||||
["/snippet" {:post handle-create-snippet
|
["/snippet" {:post handle-create-snippet
|
||||||
:get handle-view-snippet
|
:get handle-view-snippet
|
||||||
|
:patch handle-edit-snippet
|
||||||
:delete handle-delete-snippet}]])
|
:delete handle-delete-snippet}]])
|
||||||
(rr/create-default-handler)))
|
(rr/create-default-handler)))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,3 +35,7 @@
|
||||||
(defn erase-snippet [id]
|
(defn erase-snippet [id]
|
||||||
(t/log! {:level :info, :data {:id id}} "Erasing snippet, aka removing it completely through out time")
|
(t/log! {:level :info, :data {:id id}} "Erasing snippet, aka removing it completely through out time")
|
||||||
(xt/execute-tx client [[:erase-docs :snippets id]]))
|
(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
|
(ns snippets.use-cases.edit
|
||||||
(:require
|
(:require
|
||||||
[taoensso.telemere :as t]
|
[taoensso.telemere :as t]
|
||||||
|
[malli.core :as m]
|
||||||
[snippets.infra.db :as db]))
|
[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