2022-07-13 06:30:54 +00:00
|
|
|
package manager
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/stashapp/stash/pkg/file"
|
|
|
|
"github.com/stashapp/stash/pkg/gallery"
|
|
|
|
"github.com/stashapp/stash/pkg/image"
|
|
|
|
"github.com/stashapp/stash/pkg/models"
|
|
|
|
"github.com/stashapp/stash/pkg/scene"
|
|
|
|
"github.com/stashapp/stash/pkg/sqlite"
|
|
|
|
"github.com/stashapp/stash/pkg/txn"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ImageReaderWriter interface {
|
|
|
|
models.ImageReaderWriter
|
|
|
|
image.FinderCreatorUpdater
|
2022-09-01 07:54:34 +00:00
|
|
|
GetManyFileIDs(ctx context.Context, ids []int) ([][]file.ID, error)
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type GalleryReaderWriter interface {
|
|
|
|
models.GalleryReaderWriter
|
|
|
|
gallery.FinderCreatorUpdater
|
2022-08-30 02:17:15 +00:00
|
|
|
gallery.Finder
|
2022-09-01 07:54:34 +00:00
|
|
|
models.FileLoader
|
|
|
|
GetManyFileIDs(ctx context.Context, ids []int) ([][]file.ID, error)
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type SceneReaderWriter interface {
|
|
|
|
models.SceneReaderWriter
|
|
|
|
scene.CreatorUpdater
|
2022-09-01 07:54:34 +00:00
|
|
|
GetManyFileIDs(ctx context.Context, ids []int) ([][]file.ID, error)
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type FileReaderWriter interface {
|
|
|
|
file.Store
|
|
|
|
Query(ctx context.Context, options models.FileQueryOptions) (*models.FileQueryResult, error)
|
|
|
|
GetCaptions(ctx context.Context, fileID file.ID) ([]*models.VideoCaption, error)
|
2022-10-06 03:50:06 +00:00
|
|
|
IsPrimary(ctx context.Context, fileID file.ID) (bool, error)
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type FolderReaderWriter interface {
|
|
|
|
file.FolderStore
|
|
|
|
}
|
|
|
|
|
|
|
|
type Repository struct {
|
|
|
|
models.TxnManager
|
|
|
|
|
2023-03-16 04:04:54 +00:00
|
|
|
File FileReaderWriter
|
|
|
|
Folder FolderReaderWriter
|
|
|
|
Gallery GalleryReaderWriter
|
|
|
|
GalleryChapter models.GalleryChapterReaderWriter
|
|
|
|
Image ImageReaderWriter
|
|
|
|
Movie models.MovieReaderWriter
|
|
|
|
Performer models.PerformerReaderWriter
|
|
|
|
Scene SceneReaderWriter
|
|
|
|
SceneMarker models.SceneMarkerReaderWriter
|
|
|
|
ScrapedItem models.ScrapedItemReaderWriter
|
|
|
|
Studio models.StudioReaderWriter
|
|
|
|
Tag models.TagReaderWriter
|
|
|
|
SavedFilter models.SavedFilterReaderWriter
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Repository) WithTxn(ctx context.Context, fn txn.TxnFunc) error {
|
|
|
|
return txn.WithTxn(ctx, r, fn)
|
|
|
|
}
|
|
|
|
|
2022-11-20 19:49:10 +00:00
|
|
|
func (r *Repository) WithReadTxn(ctx context.Context, fn txn.TxnFunc) error {
|
|
|
|
return txn.WithReadTxn(ctx, r, fn)
|
|
|
|
}
|
|
|
|
|
2022-09-19 04:52:40 +00:00
|
|
|
func (r *Repository) WithDB(ctx context.Context, fn txn.TxnFunc) error {
|
|
|
|
return txn.WithDatabase(ctx, r, fn)
|
|
|
|
}
|
|
|
|
|
2022-07-13 06:30:54 +00:00
|
|
|
func sqliteRepository(d *sqlite.Database) Repository {
|
|
|
|
txnRepo := d.TxnRepository()
|
|
|
|
|
|
|
|
return Repository{
|
2023-03-16 04:04:54 +00:00
|
|
|
TxnManager: txnRepo,
|
|
|
|
File: d.File,
|
|
|
|
Folder: d.Folder,
|
|
|
|
Gallery: d.Gallery,
|
|
|
|
GalleryChapter: txnRepo.GalleryChapter,
|
|
|
|
Image: d.Image,
|
|
|
|
Movie: txnRepo.Movie,
|
|
|
|
Performer: txnRepo.Performer,
|
|
|
|
Scene: d.Scene,
|
|
|
|
SceneMarker: txnRepo.SceneMarker,
|
|
|
|
ScrapedItem: txnRepo.ScrapedItem,
|
|
|
|
Studio: txnRepo.Studio,
|
|
|
|
Tag: txnRepo.Tag,
|
|
|
|
SavedFilter: txnRepo.SavedFilter,
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type SceneService interface {
|
2022-11-14 05:35:09 +00:00
|
|
|
Create(ctx context.Context, input *models.Scene, fileIDs []file.ID, coverImage []byte) (*models.Scene, error)
|
|
|
|
AssignFile(ctx context.Context, sceneID int, fileID file.ID) error
|
|
|
|
Merge(ctx context.Context, sourceIDs []int, destinationID int, values models.ScenePartial) error
|
2022-07-13 06:30:54 +00:00
|
|
|
Destroy(ctx context.Context, scene *models.Scene, fileDeleter *scene.FileDeleter, deleteGenerated, deleteFile bool) error
|
|
|
|
}
|
|
|
|
|
|
|
|
type ImageService interface {
|
|
|
|
Destroy(ctx context.Context, image *models.Image, fileDeleter *image.FileDeleter, deleteGenerated, deleteFile bool) error
|
2022-07-18 00:51:59 +00:00
|
|
|
DestroyZipImages(ctx context.Context, zipFile file.File, fileDeleter *image.FileDeleter, deleteGenerated bool) ([]*models.Image, error)
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type GalleryService interface {
|
2022-09-29 23:18:58 +00:00
|
|
|
AddImages(ctx context.Context, g *models.Gallery, toAdd ...int) error
|
|
|
|
RemoveImages(ctx context.Context, g *models.Gallery, toRemove ...int) error
|
|
|
|
|
2022-07-13 06:30:54 +00:00
|
|
|
Destroy(ctx context.Context, i *models.Gallery, fileDeleter *image.FileDeleter, deleteGenerated, deleteFile bool) ([]*models.Image, error)
|
2022-09-29 23:18:58 +00:00
|
|
|
|
|
|
|
ValidateImageGalleryChange(ctx context.Context, i *models.Image, updateIDs models.UpdateIDs) error
|
2023-05-31 01:06:01 +00:00
|
|
|
|
|
|
|
Updated(ctx context.Context, galleryID int) error
|
2022-07-13 06:30:54 +00:00
|
|
|
}
|