summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorscottbot <sbostler@gmail.com>2010-05-19 20:56:55 -0400
committerscottbot <sbostler@gmail.com>2010-05-19 20:56:55 -0400
commita246187d41cc7f707881762a238440756cd05945 (patch)
tree23c855d96899e9734d6144999d67c7429d220a70 /src
parente98873d8a6c01c3129d542cf7ed8860ac8e63585 (diff)
Added scoring to profiles
Diffstat (limited to 'src')
-rw-r--r--src/site.clj47
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]
+ ["&#9823;" "&#9822;" "&#9821;" "&#9820;" "&#9819;" "&#9818;"]))
+
+(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))