summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-03-16 20:35:56 +0800
committereltrac <hi@eltr.ac>2026-03-16 20:35:56 +0800
commit6b190a50c475852da07e4558a03f9653ef2ddb87 (patch)
tree348f200dddb8ca6a2a114f7510250d64be11defd /src
parent96821e2fe6f532107b6b3ffe210be8f71babd2cd (diff)
feat(handler): query webmention by source and target
Diffstat (limited to 'src')
-rw-r--r--src/weepinbell/handler.clj3
-rw-r--r--src/weepinbell/retriever.clj14
2 files changed, 13 insertions, 4 deletions
diff --git a/src/weepinbell/handler.clj b/src/weepinbell/handler.clj
index 17e1936..33f8d74 100644
--- a/src/weepinbell/handler.clj
+++ b/src/weepinbell/handler.clj
@@ -4,7 +4,7 @@
[ring.middleware.defaults :refer [wrap-defaults api-defaults]]
[weepinbell.config :refer [get-config]]
[weepinbell.receiver :refer [receive]]
- [weepinbell.retriever :refer [retrieve retrieve-by-id]]
+ [weepinbell.retriever :refer [retrieve retrieve-by-id retrieve-by-url]]
[weepinbell.processor :refer [process-webmention]]
[clojure.core.async :refer [chan]]))
@@ -17,6 +17,7 @@
(receive {:s source :t target} wmc))
(GET "/api/mentions" [filter] (retrieve filter))
(GET "/api/mention/:id" [id] (retrieve-by-id id))
+ (GET "/api/mention" [source target] (retrieve-by-url source target))
(route/files "/avatars/" {:root "data/avatars"})
(route/not-found "Not Found"))
diff --git a/src/weepinbell/retriever.clj b/src/weepinbell/retriever.clj
index e7f74fe..ee9239e 100644
--- a/src/weepinbell/retriever.clj
+++ b/src/weepinbell/retriever.clj
@@ -18,10 +18,18 @@
:else identity)] ;; Use identity instead of not-empty for "no filter"
(respond-json (filter pred data))))
+(defn respond-json-or-404 [data]
+ (if data
+ (respond-json data)
+ (respond-json {:message "webmention not found"} 404)))
+
(defn retrieve-by-id
"Get one specific webmention by ID."
[id]
- (if-let [wm (storage/get-wm id)]
- (respond-json wm)
- (respond-json {:message "webmention not found"} 404)))
+ (respond-json-or-404 (storage/get-wm id)))
+
+(defn retrieve-by-url
+ "Get one specific webmention by source and target."
+ [source target]
+ (respond-json-or-404 (storage/get-wm source target)))