From 0ffe5f797a64862b376258f27eb1477105350a12 Mon Sep 17 00:00:00 2001 From: bel Date: Tue, 4 Apr 2023 19:11:50 -0600 Subject: [PATCH] move --- db.go | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 65 ----------------------------------------------------- 2 files changed, 70 insertions(+), 65 deletions(-) diff --git a/db.go b/db.go index e9ee970..f2c94c4 100644 --- a/db.go +++ b/db.go @@ -1,5 +1,11 @@ package main +import ( + "time" + + "github.com/google/uuid" +) + type ( db struct { Knowledge Knowledge @@ -14,3 +20,67 @@ type ( History map[string][]History } ) + +func (db db) HistoryOf(user string) map[string][]History { + return db.Users[user].History +} + +func (db db) Next(user, q string) time.Time { + history := db.Users[user].History[q] + progress := 0 + for i := range history { + if history[i].Pass { + progress += 1 + } else { + progress -= 1 + } + } + if progress < 0 { + progress = 0 + } else if progress > len(db.Cadence) { + return time.Now().Add(time.Hour * 24 * 365 * 10) + } + return db.lastTS(user, q).Add(time.Duration(db.Cadence[progress])) +} + +func (db db) Question(q string) Question { + return db.Knowledge.Questions[q] +} + +func (db db) LastAnswer(user, q string) Answer { + for _, v := range db.Knowledge.Answers { + if v.Q == q && v.Author == user { + return v + } + } + return Answer{} +} + +func (db db) Answer(a string) Answer { + return db.Knowledge.Answers[a] +} + +func (db db) PushAnswer(user, q, a string, pass bool) error { + uuid := uuid.New().String() + db.Knowledge.Answers[uuid] = Answer{ + Q: q, + A: a, + TS: time.Now().UnixNano(), + Author: user, + } + db.Users[user].History[q] = append(db.Users[user].History[q], History{ + A: uuid, + Pass: pass, + }) + return nil +} + +func (db db) lastTS(user, q string) time.Time { + max := int64(0) + for _, v := range db.Users[user].History[q] { + if v.TS > max { + max = v.TS + } + } + return time.Unix(0, max) +} diff --git a/main.go b/main.go index ea1b909..cbb5ca2 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,6 @@ import ( "strconv" "time" - "github.com/google/uuid" "gopkg.in/yaml.v2" ) @@ -93,70 +92,6 @@ func NewDB() (DB, error) { return db, nil } -func (db db) HistoryOf(user string) map[string][]History { - return db.Users[user].History -} - -func (db db) Question(q string) Question { - return db.Knowledge.Questions[q] -} - -func (db db) Answer(a string) Answer { - return db.Knowledge.Answers[a] -} - -func (db db) LastAnswer(user, q string) Answer { - for _, v := range db.Knowledge.Answers { - if v.Q == q && v.Author == user { - return v - } - } - return Answer{} -} - -func (db db) PushAnswer(user, q, a string, pass bool) error { - uuid := uuid.New().String() - db.Knowledge.Answers[uuid] = Answer{ - Q: q, - A: a, - TS: time.Now().UnixNano(), - Author: user, - } - db.Users[user].History[q] = append(db.Users[user].History[q], History{ - A: uuid, - Pass: pass, - }) - return nil -} - -func (db db) Next(user, q string) time.Time { - history := db.Users[user].History[q] - progress := 0 - for i := range history { - if history[i].Pass { - progress += 1 - } else { - progress -= 1 - } - } - if progress < 0 { - progress = 0 - } else if progress > len(db.Cadence) { - return time.Now().Add(time.Hour * 24 * 365 * 10) - } - return db.LastTS(user, q).Add(time.Duration(db.Cadence[progress])) -} - -func (db db) LastTS(user, q string) time.Time { - max := int64(0) - for _, v := range db.Users[user].History[q] { - if v.TS > max { - max = v.TS - } - } - return time.Unix(0, max) -} - func (d Duration) MarshalYAML() (interface{}, error) { return time.Duration(d).String(), nil }