(in-package :whitespace) (defstruct (rss-item-store-vector (:type vector)) id title link description comments enclosure guid pub-date source feed) (defstruct (rss-feed-store-vector (:type vector)) id title link description fetch-url) (defmacro select-rfs ((&rest select-clauses) (&rest where-clauses)) `(:select ,@(or (list :*) select-clauses) :from 'rss_feed_store ,@(when where-clauses `(:where ,@where-clauses)))) (wc (postmodern:query (select-rfs () ()))) (defun get-rss-feed-by-id (id) (apply #'make-rss-feed-store-vector (postmodern:query (:select :* :from 'rss-feed-store :where (:= :id id)) :plist))) (defun get-rss-feeds () (mapcar (lambda (it) (apply #'make-rss-feed-store-vector it)) (postmodern:query (:select :* :from 'rss-feed-store) :plists))) (defun get-rss-feed-by-title (title) (mapcar (lambda (it) (apply #'make-rss-feed-store-vector it)) (postmodern:query (:select :* :from 'rss-feed-store :where (:= :title title)) :plists))) (defun get-fetch-urls () (mapcar (lambda (it) (apply #'make-rss-feed-store-vector it)) (postmodern:query (:select :fetch-url :from 'rss-feed-store) :plists))) (defun get-rss-items () (mapcar (lambda (it) (apply #'make-rss-item-store-vector it)) (postmodern:query (:select :* :from 'rss-item-store) :plists))) (defgeneric get-items-for-feed (feed) (:method ((feed vector)) (get-items-for-feed (rss-feed-store-vector-id feed))) (:method ((feed integer)) (mapcar (lambda (it) (apply #'make-rss-item-store-vector it)) (postmodern:query (:select :* :from 'rss-item-store :where (:= :feed feed)) :plists))))