src/routes/rss-reader-routes.lisp
(defpackage murja.routes.rss-reader-routes
(:use :cl)
(:import-from :easy-routes :defroute)
(:import-from :com.inuoe.jzon :stringify :parse)
(:import-from :murja.middleware.db :@transaction)
(:import-from :murja.middleware.auth :@authenticated :*user* :@can?)
(:import-from :murja.middleware.json :@json)
(:import-from :murja.rss.reader-db :update-feeds :get-user-feeds :subscribe-to-feed))
(in-package :murja.routes.rss-reader-routes)
(defroute user-feeds-route ("/api/user/feeds"
:method :get
:decorators (@json
@transaction
@authenticated))
(&get archived)
(let ((archived (string= archived "archived")))
(assert (not (null *user*)))
(assert (not (null (gethash "id" *user*))))
(let ((feeds (or (get-user-feeds (gethash "id" *user*) archived) #())))
(com.inuoe.jzon:stringify feeds))))
(defroute updater-metadata ("/api/user/feeds/meta" :method :get
:decorators (@json
@transaction
@authenticated)) ()
(let ((result (make-hash-table :test 'equal)))
(setf (gethash "last-update-timestamps" result)
(or murja.rss.reader-db:*updates*
#()))
(com.inuoe.jzon:stringify result)))
(defroute user-feeds-saving ("/api/user/feeds"
:method :post
:decorators (@transaction @authenticated)) ()
(let* ((request-body (parse (hunchentoot:raw-post-data :force-text t)))
(name (gethash "name" request-body))
(url (gethash "url" request-body)))
(assert (not (null *user*)))
(subscribe-to-feed name url *user*)
(setf (hunchentoot:return-code*) 204)
""))
(defroute mark-as-read ("/api/user/feeds/:feed-id/:item-id/mark-read" :method :post
:decorators (@transaction
@authenticated)) ()
(murja.rss.reader-db:mark-as-read item-id feed-id (gethash "id" *user*))
(setf (hunchentoot:return-code*) 204)
"")
(defroute delete-feed ("/api/user/feeds/:feed-id" :method :delete
:decorators (@transaction
@authenticated)) ()
(murja.rss.reader-db:delete-feed feed-id (gethash "id" *user*))
(setf (hunchentoot:return-code*) 204)
"")
;; This will be called by cron/curl
(defroute update-feeds-rotue ("/api/rss/update" :method :get
:decorators (@transaction)) ()
(update-feeds)
(setf (hunchentoot:return-code*) 204)
"")