users dont store their own history
parent
4d73543b17
commit
90d517d1bf
8
main.go
8
main.go
|
|
@ -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,11 +32,7 @@ type (
|
||||||
A Renderable
|
A Renderable
|
||||||
TS int64
|
TS int64
|
||||||
Author IDU
|
Author IDU
|
||||||
}
|
Pass bool
|
||||||
History struct {
|
|
||||||
A IDA
|
|
||||||
TS int64
|
|
||||||
Pass bool
|
|
||||||
}
|
}
|
||||||
IDA string
|
IDA string
|
||||||
IDQ string
|
IDQ string
|
||||||
|
|
|
||||||
41
yamldb.go
41
yamldb.go
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
@ -19,8 +20,7 @@ type (
|
||||||
Answers map[IDA]Answer
|
Answers map[IDA]Answer
|
||||||
}
|
}
|
||||||
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,
|
||||||
|
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
|
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, max)
|
return time.Unix(0, history[len(history)-1].TS)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue