diff options
| author | scottbot <sbostler@gmail.com> | 2010-05-19 20:56:55 -0400 |
|---|---|---|
| committer | scottbot <sbostler@gmail.com> | 2010-05-19 20:56:55 -0400 |
| commit | a246187d41cc7f707881762a238440756cd05945 (patch) | |
| tree | 23c855d96899e9734d6144999d67c7429d220a70 /src | |
| parent | e98873d8a6c01c3129d542cf7ed8860ac8e63585 (diff) | |
Added scoring to profiles
Diffstat (limited to 'src')
| -rw-r--r-- | src/site.clj | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/src/site.clj b/src/site.clj index cda6dc0..11b6859 100644 --- a/src/site.clj +++ b/src/site.clj @@ -154,7 +154,6 @@ (assoc m "topic" topic) m))) - (defn count-messages-by-room [room-id image-only] (let [query (str "SELECT COUNT(*) FROM messages m, users u @@ -370,6 +369,48 @@ [(session-assoc-from-db db-user) (resp-success "OK")]))))) +;; Fav scores + +(def *score-query* " +SELECT u.nick, + COUNT(*) AS cnt +FROM tags t, + messages m, + users u +WHERE t.message_id = m.message_id + AND m.user_id != t.user_id + AND m.user_id = u.user_id +GROUP BY u.nick +ORDER BY cnt DESC; +") + +(def *scores-resfresh-period-sec* (* 30 60)) + +(defn compute-scores [] + (let [res (do-select [*score-query*])] + (zipmap (map :nick res) + (map :cnt res)))) + +(def *user-scores* + (scheduled-agent (no-args-adaptor compute-scores) + *scores-resfresh-period-sec* + {})) + +(def *piece-map* + (zipmap + [:pawn :knight :bishop :rook :queen :king] + ["♟" "♞" "♝" "♜" "♛" "♚"])) + +(defn score-to-piece [score] + (cond (= score 0) :pawn + (< score 50) :knight + (< score 150) :bishop + (< score 300) :rook + (< score 1000) :queen + :else :king)) + +(def score-to-entity (comp *piece-map* score-to-piece)) + ;; Profile (def *zoeee-query* " @@ -403,7 +444,7 @@ ORDER BY created_on DESC; (if (non-empty-string? v) (escape-html v))))) (.setAttribute st "dumps" dumps) (.toString st))) - + (defn profile [session profile-nick offset] (if-let [user-info (fetch-nick profile-nick)] (let [st (fetch-template "profile" session) @@ -413,6 +454,7 @@ ORDER BY created_on DESC; is-home (and nick (= nick profile-nick)) has-avatar (non-empty-string? (user-info :avatar)) offset (maybe-parse-int offset 0) + score (or ((poll *user-scores*) profile-nick) 0) dump-offset (* offset *dumps-per-page*) raw-dumps (logger tags/fetch-dumps-by-nick :nick profile-nick @@ -431,6 +473,7 @@ ORDER BY created_on DESC; (.setAttribute st "dumps" dumps)) (if (> (count raw-dumps) *dumps-per-page*) (.setAttribute st "next" (inc offset))) + (.setAttribute st "score_ent" (score-to-entity score)) (if (not= offset 0) (.setAttribute st "prev" (max (dec offset) 0))) (.setAttribute st "debug_log_items" (logger)) |
