From f4bf74ecd02d899217679e6a86662464c16742a6 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Thu, 24 May 2018 13:53:31 +0200
Subject: [PATCH] Implement per-user statistics

---
 main.go                   | 20 ++++++++++++++++++++
 templates/statistics.html | 12 +++++++++++-
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/main.go b/main.go
index a6aea1b..24210fa 100644
--- a/main.go
+++ b/main.go
@@ -48,6 +48,13 @@ type ChannelData struct {
 	Name            string
 	TotalWords      int
 	TotalCharacters int
+	Users           []UserData
+}
+
+type UserData struct {
+	Name  string
+	Total int
+	Words int
 }
 
 func main() {
@@ -73,6 +80,19 @@ func main() {
 				println(err.Error())
 				return
 			}
+			result, err := db.Query("SELECT coalesce(users.nick, '[Unknown]'), t.characters, t.words FROM (SELECT coalesce(groups.\"group\", messages.sender) AS hash, SUM(messages.characters) as characters, SUM(messages.words) as words FROM messages LEFT JOIN groups ON messages.sender = groups.nick AND groups.channel = 1 WHERE messages.channel = 1 GROUP BY hash ORDER BY characters DESC) t LEFT JOIN users ON t.hash = users.hash LIMIT 20")
+			if err != nil {
+				println(err.Error())
+				return
+			}
+			for result.Next() {
+				var info UserData
+				err := result.Scan(&info.Name, &info.Total, &info.Words)
+				if err != nil {
+					panic(err)
+				}
+				channelData.Users = append(channelData.Users, info)
+			}
 			err = formatTemplate(w, "statistics", channelData)
 			if err != nil {
 				println(err.Error())
diff --git a/templates/statistics.html b/templates/statistics.html
index 205870d..530fb11 100644
--- a/templates/statistics.html
+++ b/templates/statistics.html
@@ -20,4 +20,14 @@
 <meta name="apple-mobile-web-app-status-bar-style" content="#FFC107">
 
 <link href="/assets/css/style.css" rel="stylesheet">
-<p>Total: {{.TotalCharacters}} Characters, {{.TotalWords}} Words</p>
\ No newline at end of file
+<p>Total: {{.TotalCharacters}} Characters, {{.TotalWords}} Words</p>
+
+<table>
+{{range .Users}}
+    <tr>
+        <td>{{.Name}}</td>
+        <td>{{.Total}}</td>
+        <td>{{.Words}}</td>
+    </tr>
+{{end}}
+</table>
\ No newline at end of file
-- 
GitLab