users dont store their own history
parent
4d73543b17
commit
90d517d1bf
8
main.go
8
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
|
||||
|
|
|
|||
41
yamldb.go
41
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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue