From 90d517d1bf6de194355e8a3e850a48cb873f3189 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Fri, 7 Apr 2023 10:28:48 -0600 Subject: [PATCH] users dont store their own history --- main.go | 8 ++------ yamldb.go | 41 ++++++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/main.go b/main.go index 37d3fb1..20224c5 100644 --- a/main.go +++ b/main.go @@ -14,7 +14,7 @@ import ( type ( DB interface { - HistoryOf(IDU) map[IDQ][]History + HistoryOf(IDU) map[IDQ][]Answer Next(IDU, IDQ) time.Time Question(IDQ) Question LastAnswer(IDU, IDQ) (IDA, Answer) @@ -32,11 +32,7 @@ type ( A Renderable TS int64 Author IDU - } - History struct { - A IDA - TS int64 - Pass bool + Pass bool } IDA string IDQ string diff --git a/yamldb.go b/yamldb.go index d4f2767..c07e754 100644 --- a/yamldb.go +++ b/yamldb.go @@ -2,6 +2,7 @@ package main import ( "os" + "sort" "time" "github.com/google/uuid" @@ -19,8 +20,7 @@ type ( Answers map[IDA]Answer } user struct { - Tags tags - History map[IDQ][]History + Tags tags } tags struct { Assignments []IDT @@ -60,23 +60,31 @@ func (db yamlDB) Close() { } } -func (db yamlDB) HistoryOf(user IDU) map[IDQ][]History { - result := map[IDQ][]History{} - for k, v := range db.Users[user].History { - result[k] = append([]History{}, v...) +func (db yamlDB) HistoryOf(user IDU) map[IDQ][]Answer { + result := map[IDQ][]Answer{} + for _, v := range db.Knowledge.Answers { + if v.Author == user { + result[v.Q] = append(result[v.Q], v) + } } for _, tag := range db.Users[user].Tags.Assignments { for qid, q := range db.Knowledge.Questions { if _, ok := result[qid]; !ok && q.Tagged(tag) { - result[qid] = []History{} + result[qid] = []Answer{} } } } + for _, v := range result { + sort.Slice(v, func(i, j int) bool { + return v[i].TS < v[j].TS + }) + } return result } func (db yamlDB) Next(user IDU, q IDQ) time.Time { - history := db.Users[user].History[q] + allHistory := db.HistoryOf(user) + history := allHistory[q] last := db.lastTS(user, q) log := make([]int, 0, len(history)) for i := range history { @@ -118,21 +126,16 @@ func (db yamlDB) PushAnswer(user IDU, q IDQ, a Renderable, pass bool) error { A: a, TS: time.Now().UnixNano(), Author: user, + Pass: pass, } - db.Users[user].History[q] = append(db.Users[user].History[q], History{ - A: uuid, - Pass: pass, - TS: db.Knowledge.Answers[uuid].TS, - }) return nil } func (db yamlDB) lastTS(user IDU, q IDQ) time.Time { - max := int64(0) - for _, v := range db.Users[user].History[q] { - if v.TS > max { - max = v.TS - } + allHistory := db.HistoryOf(user) + history := allHistory[q] + if len(history) == 0 { + return time.Unix(0, 0) } - return time.Unix(0, max) + return time.Unix(0, history[len(history)-1].TS) }