git.fiddlerwoaroof.com
Raw Blame History
(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))))