Add related object filter criteria to various filter types in graphql schema (#4861)

* Move filter criterion handlers into separate file
* Add related filters for image filter
* Add related filters for scene filter
* Add related filters to gallery filter
* Add related filters to movie filter
* Add related filters to performer filter
* Add related filters to studio filter
* Add related filters to tag filter
* Add scene filter to scene marker filter
This commit is contained in:
WithoutPants
2024-06-11 11:34:38 +10:00
committed by GitHub
parent ff23d4e20b
commit e843c890fb
41 changed files with 4562 additions and 3805 deletions

View File

@@ -61,7 +61,7 @@ func (e *MismatchedSchemaVersionError) Error() string {
return fmt.Sprintf("schema version %d is incompatible with required schema version %d", e.CurrentSchemaVersion, e.RequiredSchemaVersion)
}
type Database struct {
type storeRepository struct {
Blobs *BlobStore
File *FileStore
Folder *FolderStore
@@ -75,6 +75,10 @@ type Database struct {
Studio *StudioStore
Tag *TagStore
Movie *MovieStore
}
type Database struct {
*storeRepository
db *sqlx.DB
dbPath string
@@ -87,23 +91,32 @@ type Database struct {
func NewDatabase() *Database {
fileStore := NewFileStore()
folderStore := NewFolderStore()
galleryStore := NewGalleryStore(fileStore, folderStore)
blobStore := NewBlobStore(BlobStoreOptions{})
performerStore := NewPerformerStore(blobStore)
studioStore := NewStudioStore(blobStore)
tagStore := NewTagStore(blobStore)
ret := &Database{
r := &storeRepository{}
*r = storeRepository{
Blobs: blobStore,
File: fileStore,
Folder: folderStore,
Scene: NewSceneStore(fileStore, blobStore),
Scene: NewSceneStore(r, blobStore),
SceneMarker: NewSceneMarkerStore(),
Image: NewImageStore(fileStore),
Gallery: NewGalleryStore(fileStore, folderStore),
Image: NewImageStore(r),
Gallery: galleryStore,
GalleryChapter: NewGalleryChapterStore(),
Performer: NewPerformerStore(blobStore),
Studio: NewStudioStore(blobStore),
Tag: NewTagStore(blobStore),
Performer: performerStore,
Studio: studioStore,
Tag: tagStore,
Movie: NewMovieStore(blobStore),
SavedFilter: NewSavedFilterStore(),
lockChan: make(chan struct{}, 1),
}
ret := &Database{
storeRepository: r,
lockChan: make(chan struct{}, 1),
}
return ret
@@ -370,7 +383,7 @@ func (db *Database) Analyze(ctx context.Context) error {
}
func (db *Database) ExecSQL(ctx context.Context, query string, args []interface{}) (*int64, *int64, error) {
wrapper := dbWrapper{}
wrapper := dbWrapperType{}
result, err := wrapper.Exec(ctx, query, args...)
if err != nil {
@@ -393,7 +406,7 @@ func (db *Database) ExecSQL(ctx context.Context, query string, args []interface{
}
func (db *Database) QuerySQL(ctx context.Context, query string, args []interface{}) ([]string, [][]interface{}, error) {
wrapper := dbWrapper{}
wrapper := dbWrapperType{}
rows, err := wrapper.QueryxContext(ctx, query, args...)
if err != nil && !errors.Is(err, sql.ErrNoRows) {