mirror of
https://github.com/stashapp/stash.git
synced 2025-12-16 20:07:05 +03:00
* Move stashbox package under pkg * Remove StashBox from method names * Add fingerprint conversion methods to Fingerprint Refactor Fingerprints methods * Make FindSceneByFingerprints accept fingerprints not scene ids * Refactor SubmitSceneDraft to not require readers * Have SubmitFingerprints accept scenes Remove SceneReader dependency * Move ScrapedScene to models package * Move ScrapedImage into models package * Move ScrapedGallery into models package * Move Scene relationship matching out of stashbox package This is now expected to be done in the client code * Remove TagFinder dependency from stashbox.Client * Make stashbox scene find full hierarchy of studios * Move studio resolution into separate method * Move studio matching out of stashbox package This is now client code responsibility * Move performer matching out of FindPerformerByID and FindPerformerByName * Refactor performer querying logic and remove unused stashbox models Renames FindStashBoxPerformersByPerformerNames to QueryPerformers and accepts names instead of performer ids * Refactor SubmitPerformerDraft to not load relationships This will be the responsibility of the calling code * Remove repository references
67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package scene
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/stashapp/stash/pkg/models"
|
|
)
|
|
|
|
type LoadRelationshipOption func(context.Context, *models.Scene, models.SceneReader) error
|
|
|
|
func LoadURLs(ctx context.Context, scene *models.Scene, r models.SceneReader) error {
|
|
if err := scene.LoadURLs(ctx, r); err != nil {
|
|
return fmt.Errorf("loading scene URLs: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func LoadStashIDs(ctx context.Context, scene *models.Scene, r models.SceneReader) error {
|
|
if err := scene.LoadStashIDs(ctx, r); err != nil {
|
|
return fmt.Errorf("failed to load stash IDs for scene %d: %w", scene.ID, err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func LoadFiles(ctx context.Context, scene *models.Scene, r models.SceneReader) error {
|
|
if err := scene.LoadFiles(ctx, r); err != nil {
|
|
return fmt.Errorf("failed to load files for scene %d: %w", scene.ID, err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// FindMany retrieves multiple scenes by their IDs.
|
|
// This method will load the specified relationships for each scene.
|
|
func (s *Service) FindMany(ctx context.Context, ids []int, load ...LoadRelationshipOption) ([]*models.Scene, error) {
|
|
var scenes []*models.Scene
|
|
qb := s.Repository
|
|
|
|
var err error
|
|
scenes, err = qb.FindMany(ctx, ids)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// TODO - we should bulk load these relationships
|
|
for _, scene := range scenes {
|
|
if err := s.LoadRelationships(ctx, scene, load...); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return scenes, nil
|
|
}
|
|
|
|
func (s *Service) LoadRelationships(ctx context.Context, scene *models.Scene, load ...LoadRelationshipOption) error {
|
|
for _, l := range load {
|
|
if err := l(ctx, scene, s.Repository); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|