users dont store their own history

master
Bel LaPointe 2023-04-07 10:28:48 -06:00
parent 4d73543b17
commit 90d517d1bf
2 changed files with 24 additions and 25 deletions

View File

@ -14,7 +14,7 @@ import (
type ( type (
DB interface { DB interface {
HistoryOf(IDU) map[IDQ][]History HistoryOf(IDU) map[IDQ][]Answer
Next(IDU, IDQ) time.Time Next(IDU, IDQ) time.Time
Question(IDQ) Question Question(IDQ) Question
LastAnswer(IDU, IDQ) (IDA, Answer) LastAnswer(IDU, IDQ) (IDA, Answer)
@ -32,10 +32,6 @@ type (
A Renderable A Renderable
TS int64 TS int64
Author IDU Author IDU
}
History struct {
A IDA
TS int64
Pass bool Pass bool
} }
IDA string IDA string

View File

@ -2,6 +2,7 @@ package main
import ( import (
"os" "os"
"sort"
"time" "time"
"github.com/google/uuid" "github.com/google/uuid"
@ -20,7 +21,6 @@ type (
} }
user struct { user struct {
Tags tags Tags tags
History map[IDQ][]History
} }
tags struct { tags struct {
Assignments []IDT Assignments []IDT
@ -60,23 +60,31 @@ func (db yamlDB) Close() {
} }
} }
func (db yamlDB) HistoryOf(user IDU) map[IDQ][]History { func (db yamlDB) HistoryOf(user IDU) map[IDQ][]Answer {
result := map[IDQ][]History{} result := map[IDQ][]Answer{}
for k, v := range db.Users[user].History { for _, v := range db.Knowledge.Answers {
result[k] = append([]History{}, v...) if v.Author == user {
result[v.Q] = append(result[v.Q], v)
}
} }
for _, tag := range db.Users[user].Tags.Assignments { for _, tag := range db.Users[user].Tags.Assignments {
for qid, q := range db.Knowledge.Questions { for qid, q := range db.Knowledge.Questions {
if _, ok := result[qid]; !ok && q.Tagged(tag) { 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 return result
} }
func (db yamlDB) Next(user IDU, q IDQ) time.Time { 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) last := db.lastTS(user, q)
log := make([]int, 0, len(history)) log := make([]int, 0, len(history))
for i := range history { for i := range history {
@ -118,21 +126,16 @@ func (db yamlDB) PushAnswer(user IDU, q IDQ, a Renderable, pass bool) error {
A: a, A: a,
TS: time.Now().UnixNano(), TS: time.Now().UnixNano(),
Author: user, Author: user,
}
db.Users[user].History[q] = append(db.Users[user].History[q], History{
A: uuid,
Pass: pass, Pass: pass,
TS: db.Knowledge.Answers[uuid].TS, }
})
return nil return nil
} }
func (db yamlDB) lastTS(user IDU, q IDQ) time.Time { func (db yamlDB) lastTS(user IDU, q IDQ) time.Time {
max := int64(0) allHistory := db.HistoryOf(user)
for _, v := range db.Users[user].History[q] { history := allHistory[q]
if v.TS > max { if len(history) == 0 {
max = v.TS return time.Unix(0, 0)
} }
} return time.Unix(0, history[len(history)-1].TS)
return time.Unix(0, max)
} }