Skip to content

revelaction/go-srs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-srs

Go Reference test Go Report Card

go-srs provides libraries to build spaced repetition learning capable programs and servers.

It currently provides:

Use

First, instantiate the srs struct with the provided algorithm, uid and db implementations:

// Algo
now := time.Now().UTC()
sm2 := sm2.New(now)

// Db
opts := badger.DefaultOptions("./badger")
opts.Logger = nil
bad, err := badger.Open(opts)
defer bad.Close()
db := bdg.New(bad, sm2)

// uid
entropy := ulidPkg.Monotonic(crand.Reader, 0)
uid := ulid.New(entropy)

// instantiate srs struct
hdl := srs.New(db, uid)

After that, you can update and save card reviews of a given deck:

r = review.Review{}
r.DeckId = "somedeckid"

r.Items = []review.ReviewItem{
    {CardId: 65, Quality: 1},
    {CardId: 3, Quality: 5},
    {CardId: 1, Quality: 0},
}

_, err = hdl.Update(r)
if err != nil {
    fatal(err)
}

And retrieve cards that are due for review

tdue := time.Now().UTC()
dueCards, _ := hdl.Due(res.DeckId, tdue)

See srs_test.go for more examples.

Additional implementations

go-srs provides interfaces for db, algorithm and unique id implementations.