src/newseasons/models/shows.clj @ 472b20cb4c5f
Holy shit it pretty much works.
author |
Steve Losh <steve@stevelosh.com> |
date |
Tue, 04 Oct 2011 18:50:28 -0400 |
parents |
89f24149ecd7 |
children |
34a95eb41902 |
(ns newseasons.models.shows
(:use newseasons.models.keys)
(:use [aleph.redis :only (redis-client)]))
(def r (redis-client {:host "localhost" :password "devpass"}))
; "Schema" --------------------------------------------------------------------
;
; Shows are stored as hashes.
;
; shows:<iTunes artist ID> = {
; id: show id
; title: show tile
; latest: description of the latest season
; release-date: release date of the latest season
; image: url to show's image
; url: url to view the show on iTunes
; }
;
; The shows we need to check are stored in a set:
;
; shows:to-check = z#{<iTunes artist ID>, ...}
;
; All current version IDs for shows are stored as a hash:
;
; shows:versions = {
; <iTunes artist ID>: <iTunes collection release date>,
; ...
; }
; Code ------------------------------------------------------------------------
(defn show-get [id]
(let [show (apply hash-map @(r [:hgetall (key-show id)]))]
(when (not (empty? show))
{:id (show "id")
:title (show "title")
:image (show "image")
:latest (show "latest")
:release-date (show "release-date")
:url (show "url")})))
(defn show-set-id! [id new-id]
@(r [:hset (key-show id) "id" new-id]))
(defn show-set-title! [id new-title]
@(r [:hset (key-show id) "title" new-title]))
(defn show-set-latest! [id new-latest]
@(r [:hset (key-show id) "latest" new-latest]))
(defn show-set-release-date! [id new-release-date]
@(r [:hset (key-show id) "release-date" new-release-date]))
(defn show-set-image! [id new-image]
@(r [:hset (key-show id) "image" new-image]))
(defn show-set-url! [id new-url]
@(r [:hset (key-show id) "url" new-url]))
(defn show-get-version [id]
@(r [:hget "shows:versions" id]))
(defn show-set-version-maybe! [id release-date]
@(r [:hsetnx "shows:versions" id release-date]))
(defn show-set-version! [id release-date]
@(r [:hset "shows:versions" id release-date]))
(defn show-get-watchers [show-id]
@(r [:smembers (key-show-watchers show-id)]))
(defn show-add-to-check! [id]
@(r [:sadd "shows:to-check" id]))
(defn shows-get-to-check []
@(r [:smembers "shows:to-check"]))
(defn store-raw-show [show]
(let [id (show "artistId")]
(show-set-id! id id)
(show-set-title! id (show "artistName"))
(show-set-latest! id (show "collectionName"))
(show-set-release-date! id (show "releaseDate"))
(show-set-image! id (show "artworkUrl100"))
(show-set-url! id (show "artistViewUrl"))))
(defn store-raw-shows [seasons]
(dorun (map store-raw-show seasons)))