From f58db3d88b274adb5d7078df4e84d422fc2065c6 Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Tue, 10 Jun 2025 09:27:25 +0200 Subject: [PATCH] move towards "Clean Arch" --- src/snippets/{ => infra}/api.clj | 24 +++++++------------ src/snippets/{ => infra}/config.clj | 2 +- src/snippets/{ => infra}/db.clj | 4 ++-- .../backfill_from_file.clj} | 2 +- .../{core.clj => use_cases/create.clj} | 15 ++---------- src/snippets/use_cases/delete.clj | 8 +++++++ src/snippets/use_cases/edit.clj | 4 ++++ src/snippets/use_cases/view.clj | 11 +++++++++ 8 files changed, 38 insertions(+), 32 deletions(-) rename src/snippets/{ => infra}/api.clj (81%) rename src/snippets/{ => infra}/config.clj (94%) rename src/snippets/{ => infra}/db.clj (95%) rename src/snippets/{backfill.clj => use_cases/backfill_from_file.clj} (95%) rename src/snippets/{core.clj => use_cases/create.clj} (52%) create mode 100644 src/snippets/use_cases/delete.clj create mode 100644 src/snippets/use_cases/edit.clj create mode 100644 src/snippets/use_cases/view.clj diff --git a/src/snippets/api.clj b/src/snippets/infra/api.clj similarity index 81% rename from src/snippets/api.clj rename to src/snippets/infra/api.clj index d39ee0d..f1dcfee 100644 --- a/src/snippets/api.clj +++ b/src/snippets/infra/api.clj @@ -1,10 +1,12 @@ -(ns snippets.api +(ns snippets.infra.api (:require [ring.adapter.jetty :as jetty] [clojure.pprint :as pprint] [taoensso.telemere :as t] - [snippets.core :as core] - [snippets.config :as config] + [snippets.use-cases.view] + [snippets.use-cases.delete] + [snippets.use-cases.create] + [snippets.infra.config :as config] [muuntaja.middleware :as mm] [ring.middleware.params] [reitit.ring :as rr])) @@ -15,23 +17,23 @@ (defn handle-create-snippet [{body :body-params}] (t/log! {:level :info, :data {:body body}} "Received request to create snippet") - (core/create-snippet body) + (snippets.use-cases.create/create-snippet body) {:status 200, :body "snippet created"}) (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/view-snippets {:limit limit :skip skip})})) + :body (snippets.use-cases.view/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)})) + :body (snippets.use-cases.view/view-snippet id)})) (defn handle-delete-snippet [{params :query-params}] (let [id (get params "id")] - (core/delete-snippet id) + (snippets.use-cases.delete/delete-snippet id) {:status 200 :body (format "Deleted snippet with id: %s if it existed" id)})) @@ -52,14 +54,6 @@ :delete handle-delete-snippet}]]) (rr/create-default-handler))) -;; (defroutes app-routes -;; (GET "/" [] "Hello World") -;; (route/not-found "Not Found")) - -;; (def app -;; ;; use #' prefix for REPL-friendly code -- see note below -;; (wrap-defaults #'app-routes site-defaults)) -;; (defn run-server [] (let [jetty-config (:jetty (config/get-config)) port (:port jetty-config) diff --git a/src/snippets/config.clj b/src/snippets/infra/config.clj similarity index 94% rename from src/snippets/config.clj rename to src/snippets/infra/config.clj index dd3d315..c010003 100644 --- a/src/snippets/config.clj +++ b/src/snippets/infra/config.clj @@ -1,4 +1,4 @@ -(ns snippets.config +(ns snippets.infra.config (:require [environ.core :refer [env]])) (defn- static-config [] (read-string (slurp "config.edn"))) diff --git a/src/snippets/db.clj b/src/snippets/infra/db.clj similarity index 95% rename from src/snippets/db.clj rename to src/snippets/infra/db.clj index 6b3d24a..ddf8715 100644 --- a/src/snippets/db.clj +++ b/src/snippets/infra/db.clj @@ -1,7 +1,7 @@ -(ns snippets.db +(ns snippets.infra.db (:require [taoensso.telemere :as t] - [snippets.config :as config] + [snippets.infra.config :as config] [xtdb.api :as xt])) (def client diff --git a/src/snippets/backfill.clj b/src/snippets/use_cases/backfill_from_file.clj similarity index 95% rename from src/snippets/backfill.clj rename to src/snippets/use_cases/backfill_from_file.clj index 672d458..4bda21e 100644 --- a/src/snippets/backfill.clj +++ b/src/snippets/use_cases/backfill_from_file.clj @@ -1,4 +1,4 @@ -(ns snippets.backfill +(ns snippets.use-cases.backfill-from-file (:require [clojure.java.io :as io] [clojure.pprint :as pprint] diff --git a/src/snippets/core.clj b/src/snippets/use_cases/create.clj similarity index 52% rename from src/snippets/core.clj rename to src/snippets/use_cases/create.clj index af97dad..347f18d 100644 --- a/src/snippets/core.clj +++ b/src/snippets/use_cases/create.clj @@ -1,7 +1,7 @@ -(ns snippets.core +(ns snippets.use-cases.create (:require [taoensso.telemere :as t] - [snippets.db :as db])) + [snippets.infra.db :as db])) (defn- uuid [] (str (java.util.UUID/randomUUID))) @@ -10,14 +10,3 @@ pub-date (java.util.Date.)] (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 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] - (t/log! {:level :info, :data {:key key}} "Deleting snippet by id") - (db/delete-snippet key)) diff --git a/src/snippets/use_cases/delete.clj b/src/snippets/use_cases/delete.clj new file mode 100644 index 0000000..cfd024a --- /dev/null +++ b/src/snippets/use_cases/delete.clj @@ -0,0 +1,8 @@ +(ns snippets.use-cases.delete + (:require + [snippets.infra.db :as db] + [taoensso.telemere :as t])) + +(defn delete-snippet [key] + (t/log! {:level :info, :data {:key key}} "Deleting snippet by id") + (db/delete-snippet key)) diff --git a/src/snippets/use_cases/edit.clj b/src/snippets/use_cases/edit.clj new file mode 100644 index 0000000..1aecad0 --- /dev/null +++ b/src/snippets/use_cases/edit.clj @@ -0,0 +1,4 @@ +(ns snippets.use-cases.edit + (:require + [taoensso.telemere :as t] + [snippets.infra.db :as db])) diff --git a/src/snippets/use_cases/view.clj b/src/snippets/use_cases/view.clj new file mode 100644 index 0000000..ac6e83b --- /dev/null +++ b/src/snippets/use_cases/view.clj @@ -0,0 +1,11 @@ +(ns snippets.use-cases.view + (:require + [taoensso.telemere :as t] + [snippets.infra.db :as db])) + +(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))