(require '[boundary.observability.logging.ports :as log-ports]
'[boundary.observability.metrics.ports :as metrics-ports])
;; Service layer — automatic logging, metrics, error reporting
(defn create-user [this user-data]
(log-ports/info logger
{:event :create-user
:email (:email user-data)})
(metrics-ports/increment-counter! metrics :users.created 1)
(let [user (user-core/prepare-user user-data)]
(.create-user repository user)))
;; Persistence layer — automatic query telemetry
(defn find-user-by-email [ctx email]
(let [start (System/nanoTime)
result (jdbc/execute-one! ctx query)]
(metrics-ports/record-timing! metrics :users.find-by-email.ns (- (System/nanoTime) start))
result))