Restructure data layer (#2532)

* Add new txn manager interface
* Add txn management to sqlite
* Rename get to getByID
* Add contexts to repository methods
* Update query builders
* Add context to reader writer interfaces
* Use repository in resolver
* Tighten interfaces
* Tighten interfaces in dlna
* Tighten interfaces in match package
* Tighten interfaces in scraper package
* Tighten interfaces in scan code
* Tighten interfaces on autotag package
* Remove ReaderWriter usage
* Merge database package into sqlite
This commit is contained in:
WithoutPants
2022-05-19 17:49:32 +10:00
parent 7b5bd80515
commit 964b559309
244 changed files with 7377 additions and 6699 deletions

38
pkg/txn/transaction.go Normal file
View File

@@ -0,0 +1,38 @@
package txn
import "context"
type Manager interface {
Begin(ctx context.Context) (context.Context, error)
Commit(ctx context.Context) error
Rollback(ctx context.Context) error
}
type TxnFunc func(ctx context.Context) error
func WithTxn(ctx context.Context, m Manager, fn TxnFunc) error {
var err error
ctx, err = m.Begin(ctx)
if err != nil {
return err
}
defer func() {
if p := recover(); p != nil {
// a panic occurred, rollback and repanic
_ = m.Rollback(ctx)
panic(p)
}
if err != nil {
// something went wrong, rollback
_ = m.Rollback(ctx)
} else {
// all good, commit
err = m.Commit(ctx)
}
}()
err = fn(ctx)
return err
}