From a246187d41cc7f707881762a238440756cd05945 Mon Sep 17 00:00:00 2001 From: scottbot Date: Wed, 19 May 2010 20:56:55 -0400 Subject: Added scoring to profiles --- src/site.clj | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src') 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)) -- cgit v1.2.3-70-g09d2