diff --git a/anki.d b/anki.d index 1efa3f5..d827e22 100755 Binary files a/anki.d and b/anki.d differ diff --git a/main.go b/main.go index 311faaf..c3e96ce 100644 --- a/main.go +++ b/main.go @@ -14,7 +14,15 @@ import ( ) type ( - DB struct { + DB interface { + HistoryOf(string) map[string][]History + Next(string, string) time.Time + Question(string) Question + LastAnswer(string, string) Answer + Answer(string) Answer + PushAnswer(string, string, string, bool) error + } + db struct { Knowledge Knowledge Users map[string]User Cadence []Duration @@ -88,28 +96,28 @@ func readline() string { } func NewDB() (DB, error) { - var db DB + var db db if b, err := os.ReadFile(os.Getenv("DB")); err != nil { - return DB{}, err + return nil, err } else if err := yaml.Unmarshal(b, &db); err != nil { - return DB{}, err + return nil, err } return db, nil } -func (db DB) HistoryOf(user string) map[string][]History { +func (db db) HistoryOf(user string) map[string][]History { return db.Users[user].History } -func (db DB) Question(q string) Question { +func (db db) Question(q string) Question { return db.Knowledge.Questions[q] } -func (db DB) Answer(a string) Answer { +func (db db) Answer(a string) Answer { return db.Knowledge.Answers[a] } -func (db DB) LastAnswer(user, q string) Answer { +func (db db) LastAnswer(user, q string) Answer { for _, v := range db.Knowledge.Answers { if v.Q == q && v.Author == user { return v @@ -118,7 +126,7 @@ func (db DB) LastAnswer(user, q string) Answer { return Answer{} } -func (db DB) PushAnswer(user, q, a string, pass bool) error { +func (db db) PushAnswer(user, q, a string, pass bool) error { uuid := uuid.New().String() db.Knowledge.Answers[uuid] = Answer{ Q: q, @@ -133,7 +141,7 @@ func (db DB) PushAnswer(user, q, a string, pass bool) error { return nil } -func (db DB) Next(user, q string) time.Time { +func (db db) Next(user, q string) time.Time { history := db.Users[user].History[q] progress := 0 for i := range history { @@ -151,7 +159,7 @@ func (db DB) Next(user, q string) time.Time { return db.LastTS(user, q).Add(time.Duration(db.Cadence[progress])) } -func (db DB) LastTS(user, q string) time.Time { +func (db db) LastTS(user, q string) time.Time { max := int64(0) for _, v := range db.Users[user].History[q] { if v.TS > max {