diff --git a/bruno/CodeSnippets/delete_snippet.bru b/bruno/CodeSnippets/delete_snippet.bru index 823c7eb..07ef77e 100644 --- a/bruno/CodeSnippets/delete_snippet.bru +++ b/bruno/CodeSnippets/delete_snippet.bru @@ -5,13 +5,13 @@ meta { } delete { - url: {{host}}/api/snippet?id=952cdf1a-a2a8-4fe2-9354-953b240136ae + url: {{host}}/api/snippet?id=90d00a80-78c4-4bc9-a066-01c988599d05 body: none auth: none } params:query { - id: 952cdf1a-a2a8-4fe2-9354-953b240136ae + id: 90d00a80-78c4-4bc9-a066-01c988599d05 } body:json { diff --git a/bruno/CodeSnippets/get_snippet.bru b/bruno/CodeSnippets/get_snippet.bru new file mode 100644 index 0000000..7dd3683 --- /dev/null +++ b/bruno/CodeSnippets/get_snippet.bru @@ -0,0 +1,23 @@ +meta { + name: get_snippet + type: http + seq: 6 +} + +get { + url: {{host}}/api/snippet?id=aea69336-5116-49ac-ab52-bc221bdb7830 + body: none + auth: none +} + +params:query { + id: aea69336-5116-49ac-ab52-bc221bdb7830 +} + +body:json { + { + "title": "Test Snippet", + "markdown": "## Cool Snippet\ndoes a cool thing", + "tags": ["git", "jj"] + } +} diff --git a/bruno/CodeSnippets/get_snippets.bru b/bruno/CodeSnippets/get_snippets.bru index a61d3f4..8bf73c4 100644 --- a/bruno/CodeSnippets/get_snippets.bru +++ b/bruno/CodeSnippets/get_snippets.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{host}}/api/snippet?limit=100&skip=0 + url: {{host}}/api/snippets?limit=100&skip=0 body: none auth: none } diff --git a/src/snippets/api.clj b/src/snippets/api.clj index 3d59d97..d39ee0d 100644 --- a/src/snippets/api.clj +++ b/src/snippets/api.clj @@ -18,11 +18,16 @@ (core/create-snippet body) {:status 200, :body "snippet created"}) -(defn handle-view-snippet [{params :query-params}] +(defn handle-view-snippets [{params :query-params}] (let [limit (Integer/parseInt (get params "limit" "10")) skip (Integer/parseInt (get params "skip" "0"))] {:status 200 - :body (core/list-snippets {:limit limit :skip skip})})) + :body (core/view-snippets {:limit limit :skip skip})})) + +(defn handle-view-snippet [{params :query-params}] + (let [id (get params "id")] + {:status 200 + :body (core/view-snippet id)})) (defn handle-delete-snippet [{params :query-params}] (let [id (get params "id")] @@ -41,6 +46,7 @@ mm/wrap-format [wrap :api]]} ["/ping" {:get handle-ping}] + ["/snippets" {:get handle-view-snippets}] ["/snippet" {:post handle-create-snippet :get handle-view-snippet :delete handle-delete-snippet}]]) diff --git a/src/snippets/core.clj b/src/snippets/core.clj index 11a8ad6..af97dad 100644 --- a/src/snippets/core.clj +++ b/src/snippets/core.clj @@ -11,7 +11,11 @@ (t/log! {:level :info, :data {:title title :slug slug :id id}} "Creating snippet") (db/put-snippet id {:title title :slug slug :markdown markdown :tags tags :pub-date pub-date}))) -(defn list-snippets [& args] +(defn view-snippet [key] + (t/log! {:level :info, :data {:key key}} "Viewing snippet by id") + (db/get-snippet-by-id key)) + +(defn view-snippets [& args] (db/list-snippets args)) (defn delete-snippet [key] diff --git a/src/snippets/db.clj b/src/snippets/db.clj index 6a2fd9e..6b3d24a 100644 --- a/src/snippets/db.clj +++ b/src/snippets/db.clj @@ -21,6 +21,9 @@ (read-string (format "(quote (-> (from :snippets [title pub-date tags slug markdown {:xt/id id}]) (order-by {:val pub-date, :dir :desc, :nulls :last}) (offset %s) (limit %s)))" skip limit))))) +(defn get-snippet-by-id [snippet-id] + (first (xt/q client ['#(from :snippets [{:xt/id %} slug title {:xt/id id} markdown pub-date]) snippet-id]))) + (defn put-snippet [id snippet] (t/log! {:level :info, :data {:snippet snippet :id id}} "Saving new snippet to db") (xt/execute-tx client [[:put-docs :snippets (merge snippet {:xt/id id})]]))