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

@@ -1,102 +1,53 @@
package models
import (
"github.com/jmoiron/sqlx"
)
type SceneReader interface {
// Find(id int) (*Scene, error)
Find(id int) (*Scene, error)
FindMany(ids []int) ([]*Scene, error)
FindByChecksum(checksum string) (*Scene, error)
FindByOSHash(oshash string) (*Scene, error)
// FindByPath(path string) (*Scene, error)
// FindByPerformerID(performerID int) ([]*Scene, error)
// CountByPerformerID(performerID int) (int, error)
FindByPath(path string) (*Scene, error)
FindByPerformerID(performerID int) ([]*Scene, error)
CountByPerformerID(performerID int) (int, error)
// FindByStudioID(studioID int) ([]*Scene, error)
FindByMovieID(movieID int) ([]*Scene, error)
// CountByMovieID(movieID int) (int, error)
// Count() (int, error)
CountByMovieID(movieID int) (int, error)
Count() (int, error)
Size() (float64, error)
// SizeCount() (string, error)
// CountByStudioID(studioID int) (int, error)
// CountByTagID(tagID int) (int, error)
// CountMissingChecksum() (int, error)
// CountMissingOSHash() (int, error)
// Wall(q *string) ([]*Scene, error)
CountByStudioID(studioID int) (int, error)
CountByTagID(tagID int) (int, error)
CountMissingChecksum() (int, error)
CountMissingOSHash() (int, error)
Wall(q *string) ([]*Scene, error)
All() ([]*Scene, error)
// Query(sceneFilter *SceneFilterType, findFilter *FindFilterType) ([]*Scene, int)
// QueryAllByPathRegex(regex string) ([]*Scene, error)
// QueryByPathRegex(findFilter *FindFilterType) ([]*Scene, int)
GetSceneCover(sceneID int) ([]byte, error)
Query(sceneFilter *SceneFilterType, findFilter *FindFilterType) ([]*Scene, int, error)
QueryAllByPathRegex(regex string, ignoreOrganized bool) ([]*Scene, error)
QueryByPathRegex(findFilter *FindFilterType) ([]*Scene, int, error)
GetCover(sceneID int) ([]byte, error)
GetMovies(sceneID int) ([]MoviesScenes, error)
GetTagIDs(imageID int) ([]int, error)
GetPerformerIDs(imageID int) ([]int, error)
GetStashIDs(performerID int) ([]*StashID, error)
}
type SceneWriter interface {
Create(newScene Scene) (*Scene, error)
Update(updatedScene ScenePartial) (*Scene, error)
UpdateFull(updatedScene Scene) (*Scene, error)
// IncrementOCounter(id int) (int, error)
// DecrementOCounter(id int) (int, error)
// ResetOCounter(id int) (int, error)
// Destroy(id string) error
// UpdateFormat(id int, format string) error
// UpdateOSHash(id int, oshash string) error
// UpdateChecksum(id int, checksum string) error
UpdateSceneCover(sceneID int, cover []byte) error
// DestroySceneCover(sceneID int) error
IncrementOCounter(id int) (int, error)
DecrementOCounter(id int) (int, error)
ResetOCounter(id int) (int, error)
UpdateFileModTime(id int, modTime NullSQLiteTimestamp) error
Destroy(id int) error
UpdateCover(sceneID int, cover []byte) error
DestroyCover(sceneID int) error
UpdatePerformers(sceneID int, performerIDs []int) error
UpdateTags(sceneID int, tagIDs []int) error
UpdateMovies(sceneID int, movies []MoviesScenes) error
UpdateStashIDs(sceneID int, stashIDs []StashID) error
}
type SceneReaderWriter interface {
SceneReader
SceneWriter
}
func NewSceneReaderWriter(tx *sqlx.Tx) SceneReaderWriter {
return &sceneReaderWriter{
tx: tx,
qb: NewSceneQueryBuilder(),
}
}
type sceneReaderWriter struct {
tx *sqlx.Tx
qb SceneQueryBuilder
}
func (t *sceneReaderWriter) FindMany(ids []int) ([]*Scene, error) {
return t.qb.FindMany(ids)
}
func (t *sceneReaderWriter) FindByChecksum(checksum string) (*Scene, error) {
return t.qb.FindByChecksum(checksum)
}
func (t *sceneReaderWriter) FindByOSHash(oshash string) (*Scene, error) {
return t.qb.FindByOSHash(oshash)
}
func (t *sceneReaderWriter) FindByMovieID(movieID int) ([]*Scene, error) {
return t.qb.FindByMovieID(movieID)
}
func (t *sceneReaderWriter) All() ([]*Scene, error) {
return t.qb.All()
}
func (t *sceneReaderWriter) GetSceneCover(sceneID int) ([]byte, error) {
return t.qb.GetSceneCover(sceneID, t.tx)
}
func (t *sceneReaderWriter) Create(newScene Scene) (*Scene, error) {
return t.qb.Create(newScene, t.tx)
}
func (t *sceneReaderWriter) Update(updatedScene ScenePartial) (*Scene, error) {
return t.qb.Update(updatedScene, t.tx)
}
func (t *sceneReaderWriter) UpdateFull(updatedScene Scene) (*Scene, error) {
return t.qb.UpdateFull(updatedScene, t.tx)
}
func (t *sceneReaderWriter) UpdateSceneCover(sceneID int, cover []byte) error {
return t.qb.UpdateSceneCover(sceneID, cover, t.tx)
}