DB interface

master
bel 2023-04-04 19:09:08 -06:00
parent 40cdf27198
commit 9e265bb8ca
2 changed files with 19 additions and 11 deletions

BIN
anki.d

Binary file not shown.

30
main.go
View File

@ -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 {