mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 04:44:37 +03:00
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:
@@ -11,7 +11,11 @@ import (
|
||||
)
|
||||
|
||||
type Queryer interface {
|
||||
Query(options models.SceneQueryOptions) (*models.SceneQueryResult, error)
|
||||
Query(ctx context.Context, options models.SceneQueryOptions) (*models.SceneQueryResult, error)
|
||||
}
|
||||
|
||||
type IDFinder interface {
|
||||
Find(ctx context.Context, id int) (*models.Scene, error)
|
||||
}
|
||||
|
||||
// QueryOptions returns a SceneQueryOptions populated with the provided filters.
|
||||
@@ -26,15 +30,15 @@ func QueryOptions(sceneFilter *models.SceneFilterType, findFilter *models.FindFi
|
||||
}
|
||||
|
||||
// QueryWithCount queries for scenes, returning the scene objects and the total count.
|
||||
func QueryWithCount(qb Queryer, sceneFilter *models.SceneFilterType, findFilter *models.FindFilterType) ([]*models.Scene, int, error) {
|
||||
func QueryWithCount(ctx context.Context, qb Queryer, sceneFilter *models.SceneFilterType, findFilter *models.FindFilterType) ([]*models.Scene, int, error) {
|
||||
// this was moved from the queryBuilder code
|
||||
// left here so that calling functions can reference this instead
|
||||
result, err := qb.Query(QueryOptions(sceneFilter, findFilter, true))
|
||||
result, err := qb.Query(ctx, QueryOptions(sceneFilter, findFilter, true))
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
scenes, err := result.Resolve()
|
||||
scenes, err := result.Resolve(ctx)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
@@ -43,13 +47,13 @@ func QueryWithCount(qb Queryer, sceneFilter *models.SceneFilterType, findFilter
|
||||
}
|
||||
|
||||
// Query queries for scenes using the provided filters.
|
||||
func Query(qb Queryer, sceneFilter *models.SceneFilterType, findFilter *models.FindFilterType) ([]*models.Scene, error) {
|
||||
result, err := qb.Query(QueryOptions(sceneFilter, findFilter, false))
|
||||
func Query(ctx context.Context, qb Queryer, sceneFilter *models.SceneFilterType, findFilter *models.FindFilterType) ([]*models.Scene, error) {
|
||||
result, err := qb.Query(ctx, QueryOptions(sceneFilter, findFilter, false))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scenes, err := result.Resolve()
|
||||
scenes, err := result.Resolve(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -57,7 +61,7 @@ func Query(qb Queryer, sceneFilter *models.SceneFilterType, findFilter *models.F
|
||||
return scenes, nil
|
||||
}
|
||||
|
||||
func BatchProcess(ctx context.Context, reader models.SceneReader, sceneFilter *models.SceneFilterType, findFilter *models.FindFilterType, fn func(scene *models.Scene) error) error {
|
||||
func BatchProcess(ctx context.Context, reader Queryer, sceneFilter *models.SceneFilterType, findFilter *models.FindFilterType, fn func(scene *models.Scene) error) error {
|
||||
const batchSize = 1000
|
||||
|
||||
if findFilter == nil {
|
||||
@@ -74,7 +78,7 @@ func BatchProcess(ctx context.Context, reader models.SceneReader, sceneFilter *m
|
||||
return nil
|
||||
}
|
||||
|
||||
scenes, err := Query(reader, sceneFilter, findFilter)
|
||||
scenes, err := Query(ctx, reader, sceneFilter, findFilter)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error querying for scenes: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user