Data layer restructuring (#997)

* Move query builders to sqlite package
* Add transaction system
* Wrap model resolvers in transaction
* Add error return value for StringSliceToIntSlice
* Update/refactor mutation resolvers
* Convert query builders
* Remove unused join types
* Add stash id unit tests
* Use WAL journal mode
This commit is contained in:
WithoutPants
2021-01-18 12:23:20 +11:00
committed by GitHub
parent 7bae990c67
commit 1e04deb3d4
168 changed files with 12683 additions and 10863 deletions

View File

@@ -2,12 +2,12 @@ package manager
import (
"context"
"fmt"
"io/ioutil"
"os"
"sync"
"time"
"github.com/stashapp/stash/pkg/database"
"github.com/stashapp/stash/pkg/ffmpeg"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/models"
@@ -17,6 +17,7 @@ type GenerateScreenshotTask struct {
Scene models.Scene
ScreenshotAt *float64
fileNamingAlgorithm models.HashAlgorithm
txnManager models.TransactionManager
}
func (t *GenerateScreenshotTask) Start(wg *sync.WaitGroup) {
@@ -60,39 +61,31 @@ func (t *GenerateScreenshotTask) Start(wg *sync.WaitGroup) {
return
}
ctx := context.TODO()
tx := database.DB.MustBeginTx(ctx, nil)
if err := t.txnManager.WithTxn(context.TODO(), func(r models.Repository) error {
qb := r.Scene()
updatedTime := time.Now()
updatedScene := models.ScenePartial{
ID: t.Scene.ID,
UpdatedAt: &models.SQLiteTimestamp{Timestamp: updatedTime},
}
qb := models.NewSceneQueryBuilder()
updatedTime := time.Now()
updatedScene := models.ScenePartial{
ID: t.Scene.ID,
UpdatedAt: &models.SQLiteTimestamp{Timestamp: updatedTime},
}
if err := SetSceneScreenshot(checksum, coverImageData); err != nil {
return fmt.Errorf("Error writing screenshot: %s", err.Error())
}
if err := SetSceneScreenshot(checksum, coverImageData); err != nil {
logger.Errorf("Error writing screenshot: %s", err.Error())
tx.Rollback()
return
}
// update the scene cover table
if err := qb.UpdateCover(t.Scene.ID, coverImageData); err != nil {
return fmt.Errorf("Error setting screenshot: %s", err.Error())
}
// update the scene cover table
if err := qb.UpdateSceneCover(t.Scene.ID, coverImageData, tx); err != nil {
logger.Errorf("Error setting screenshot: %s", err.Error())
tx.Rollback()
return
}
// update the scene with the update date
_, err = qb.Update(updatedScene)
if err != nil {
return fmt.Errorf("Error updating scene: %s", err.Error())
}
// update the scene with the update date
_, err = qb.Update(updatedScene, tx)
if err != nil {
logger.Errorf("Error updating scene: %s", err.Error())
tx.Rollback()
return
}
if err := tx.Commit(); err != nil {
logger.Errorf("Error setting screenshot: %s", err.Error())
return
return nil
}); err != nil {
logger.Error(err.Error())
}
}