restructure modules

This commit is contained in:
Travis Shears 2026-03-09 09:24:28 +01:00
parent 48dcb9c5a5
commit 314c480c41
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
12 changed files with 80 additions and 106 deletions

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bb
(ns snippets-cms
(:require [cli.main]))
(:require [snippets-cms.tui]))
(when (= *file* (System/getProperty "babashka.file"))
(apply cli.main/-main *command-line-args*))
(apply snippets-cms.tui/-main *command-line-args*))

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bb
(ns snippets-mcp
(:require [cli.mcp]))
(:require [snippets-cms.mcp]))
(when (= *file* (System/getProperty "babashka.file"))
(apply cli.mcp/-main *command-line-args*))
(apply snippets-cms.mcp/-main *command-line-args*))

View file

@ -1,18 +0,0 @@
(ns cli.delete
(:require
[com.travisshears.gum-utils :as utils]
[cli.config :refer [config]]
[clojure.pprint :refer [pprint]]
[babashka.http-client :as http]
[cheshire.core :as json]))
(defn fetch-snippets []
(let [res (http/get (str (:backend-host config) "/api/snippets?limit=25"))]
(json/parse-string (:body res) true)))
(defn delete-snippet [id]
(http/delete (str (:backend-host config) "/api/snippet") {:query-params {"id" id}}))
(defn run []
(let [selected-snippet (utils/select (map #(hash-map :value (:slug %) :item %) (fetch-snippets)))]
(delete-snippet (:id selected-snippet))))

View file

@ -1,27 +0,0 @@
(ns cli.view
(:require
[babashka.http-client :as http]
[clojure.pprint :refer [pprint]]
[cli.config :refer [config]]
[cheshire.core :as json]
[clojure.string :as str]
[com.travisshears.gum-utils :as utils]))
(defn fetch-snippets []
(let [res (http/get (str (:backend-host config) "/api/snippets?limit=25"))]
(json/parse-string (:body res) true)))
(defn fetch-snippet [id]
(let [res (http/get (str (:backend-host config) "/api/snippet") {:query-params {"id" id}})]
(json/parse-string (:body res) true)))
(defn view [snippet]
(utils/color-print (str "title: " (:title snippet)) "4")
(utils/color-print (str "slug: " (:slug snippet)) "4")
(utils/color-print (str "tags: " (str/join ", " (:tags snippet))) "4")
(utils/color-print "markdown: " "4")
(utils/print-markdown (:markdown snippet)))
(defn run []
(let [snippet-to-view (utils/select (map #(hash-map :value (:slug %) :item %) (fetch-snippets)))]
(view (fetch-snippet (:id snippet-to-view)))))

View file

@ -0,0 +1,32 @@
(ns snippets-cms.backend-connect
(:require
[clojure.edn :as edn]
[babashka.http-client :as http]
[snippets-cms.config :refer [config]]))
(defn- get-request [path params]
(let [res (http/get (str (:backend-host config) path)
{:headers {"Accept" "application/edn"}
:query-params params})]
(edn/read-string (:body res))))
(defn fetch-snippets [& [limit]]
(let [params (if limit {:limit limit} {})]
(get-request "/api/snippets" params)))
(defn fetch-snippet [id]
(get-request "/api/snippet" {:id id}))
(defn delete-snippet [id]
(http/delete (str (:backend-host config) "/api/snippet") {:query-params {"id" id}}))
(defn update-snippet [id patch]
(http/patch (str (:backend-host config) "/api/snippet")
{:query-params {:id id}
:headers {:content-type "application/edn"}
:body (pr-str patch)}))
(defn create-snippet [{:keys [title slug markdown tags]}]
(http/post (str (:backend-host config) "/api/snippet")
{:headers {:content-type "application/edn"}
:body (pr-str {:title title :slug slug :markdown markdown :tags tags})}))

View file

@ -1,4 +1,4 @@
(ns cli.config
(ns snippets-cms.config
(:require
[babashka.fs :as fs]
[clojure.string :as str]))

View file

@ -1,9 +1,9 @@
(ns cli.mcp
(ns snippets-cms.mcp
(:require
[babashka.http-client :as http]
[cli.config :refer [config]]
[clojure.edn :as edn]
[cheshire.core :as json]))
[cheshire.core :as json]
[snippets-cms.backend-connect :refer [create-snippet
fetch-snippet
fetch-snippets]]))
;; Tool definitions
(def available-tools
@ -32,22 +32,6 @@
:description "Array of tags for categorizing the snippet"}}
:required ["title" "slug" "markdown" "tags"]}}])
;; interact with backend api
(defn fetch-snippets []
(let [res (http/get (str (:backend-host config) "/api/snippets"))]
(json/parse-string (:body res) true)))
(defn fetch-snippet [id]
(let [res (http/get (str (:backend-host config) "/api/snippet")
{:headers {"Accept" "application/edn"}
:query-params {:id id}})]
(edn/read-string (:body res))))
(defn create-snippet [{:keys [title slug markdown tags]}]
(http/post (str (:backend-host config) "/api/snippet")
{:headers {:content-type "application/edn"}
:body (pr-str {:title title :slug slug :markdown markdown :tags tags})}))
;; Tool implementations
(defn mcp-res [fn args]
(try

View file

@ -1,10 +1,10 @@
(ns cli.main
(ns snippets-cms.tui
(:require
[cli.create :as create]
[cli.edit :as edit]
[cli.delete :as delete]
[snippets-cms.tui-actions.create :as create]
[snippets-cms.tui-actions.edit :as edit]
[snippets-cms.tui-actions.delete :as delete]
[com.travisshears.gum-utils :as utils]
[cli.view :as view]))
[snippets-cms.tui-actions.view :as view]))
(defn color-test []
(doseq [color (range 0 255)]

View file

@ -1,16 +1,7 @@
(ns cli.create
(ns snippets-cms.tui-actions.create
(:require
[com.travisshears.gum-utils :as utils]
[clojure.string :as str]
[cli.config :refer [config]]
[babashka.http-client :as http]
[cheshire.core :as json]
[babashka.process :refer [shell]]))
(defn create-snippet [{:keys [title slug markdown tags]}]
(http/post (str (:backend-host config) "/api/snippet")
{:headers {:content-type "application/json"}
:body (json/encode {:title title :slug slug :markdown markdown :tags tags})}))
[snippets-cms.backend-connect :refer [create-snippet]]))
(defn run []
(let [title (utils/prompt-for "title")

View file

@ -0,0 +1,8 @@
(ns snippets-cms.tui-actions.delete
(:require
[com.travisshears.gum-utils :as utils]
[snippets-cms.backend-connect :refer [delete-snippet fetch-snippets]]))
(defn run []
(let [selected-snippet (utils/select (map #(hash-map :value (:slug %) :item %) (fetch-snippets)))]
(delete-snippet (:id selected-snippet))))

View file

@ -1,15 +1,9 @@
(ns cli.edit
(ns snippets-cms.tui-actions.edit
(:require
[babashka.http-client :as http]
[clojure.pprint :refer [pprint]]
[cli.config :refer [config]]
[cli.view :as view]
[cheshire.core :as json]
[com.travisshears.gum-utils :as utils]))
(defn fetch-snippets []
(let [res (http/get (str (:backend-host config) "/api/snippets?limit=25"))]
(json/parse-string (:body res) true)))
[com.travisshears.gum-utils :as utils]
[snippets-cms.backend-connect :refer [fetch-snippet fetch-snippets
update-snippet]]
[snippets-cms.tui-actions.view :as view]))
(defn prompt-for-edit-type []
(utils/select (map #(hash-map :value (name %) :item %) '(:title
@ -19,12 +13,6 @@
:add-tags
:done))))
(defn send-patch [id patch]
(http/patch (str (:backend-host config) "/api/snippet")
{:query-params {:id id}
:headers {:content-type "application/json"}
:body (json/encode patch)}))
(defn edit
([snippet]
(edit snippet {}))
@ -46,6 +34,6 @@
(defn run []
(let [snippet-to-edit (utils/select (map #(hash-map :value (:slug %) :item %) (fetch-snippets)))]
(send-patch (:id snippet-to-edit) (edit snippet-to-edit))
(update-snippet (:id snippet-to-edit) (edit snippet-to-edit))
(println "Snippet updated successfully")
(view/view (view/fetch-snippet (:id snippet-to-edit)))))
(view/view (fetch-snippet (:id snippet-to-edit)))))

View file

@ -0,0 +1,16 @@
(ns snippets-cms.tui-actions.view
(:require
[clojure.string :as str]
[com.travisshears.gum-utils :as utils]
[snippets-cms.backend-connect :refer [fetch-snippet fetch-snippets]]))
(defn view [snippet]
(utils/color-print (str "title: " (:title snippet)) "4")
(utils/color-print (str "slug: " (:slug snippet)) "4")
(utils/color-print (str "tags: " (str/join ", " (:tags snippet))) "4")
(utils/color-print "markdown: " "4")
(utils/print-markdown (:markdown snippet)))
(defn run []
(let [snippet-to-view (utils/select (map #(hash-map :value (:slug %) :item %) (fetch-snippets 25)))]
(view (fetch-snippet (:id snippet-to-view)))))