Model refactor, part 2 (#4092)

* Move conversions into changesetTranslator
* Improve mutation error messages
* Use models.New and models.NewPartial everywhere
* Replace getStashIDsFor functions
* Remove ImageCreateInput
* Remove unused parameters
* Refactor matching functions
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
DingDongSoLong4
2023-09-11 04:24:15 +02:00
committed by GitHub
parent cf3301c8bc
commit 24e4719abc
61 changed files with 1514 additions and 1407 deletions

View File

@@ -7,7 +7,9 @@ import (
"strings"
"github.com/99designs/gqlgen/graphql"
"github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/sliceutil/stringslice"
)
const updateInputField = "input"
@@ -91,7 +93,7 @@ func (t changesetTranslator) getFields() []string {
return ret
}
func (t changesetTranslator) string(value *string, field string) string {
func (t changesetTranslator) string(value *string) string {
if value == nil {
return ""
}
@@ -127,7 +129,7 @@ func (t changesetTranslator) optionalDate(value *string, field string) (models.O
return models.NewOptionalDate(date), nil
}
func (t changesetTranslator) datePtr(value *string, field string) (*models.Date, error) {
func (t changesetTranslator) datePtr(value *string) (*models.Date, error) {
if value == nil || *value == "" {
return nil, nil
}
@@ -139,7 +141,7 @@ func (t changesetTranslator) datePtr(value *string, field string) (*models.Date,
return &date, nil
}
func (t changesetTranslator) intPtrFromString(value *string, field string) (*int, error) {
func (t changesetTranslator) intPtrFromString(value *string) (*int, error) {
if value == nil || *value == "" {
return nil, nil
}
@@ -151,35 +153,35 @@ func (t changesetTranslator) intPtrFromString(value *string, field string) (*int
return &vv, nil
}
func (t changesetTranslator) ratingConversionInt(legacyValue *int, rating100Value *int) *int {
func (t changesetTranslator) ratingConversion(legacyValue *int, rating100Value *int) *int {
const (
legacyField = "rating"
rating100Field = "rating100"
)
legacyRating := t.optionalInt(legacyValue, legacyField)
if legacyRating.Set && !(legacyRating.Null) {
ret := int(models.Rating5To100(int(legacyRating.Value)))
if legacyRating.Set && !legacyRating.Null {
ret := models.Rating5To100(legacyRating.Value)
return &ret
}
o := t.optionalInt(rating100Value, rating100Field)
if o.Set && !(o.Null) {
if o.Set && !o.Null {
return &o.Value
}
return nil
}
func (t changesetTranslator) ratingConversionOptional(legacyValue *int, rating100Value *int) models.OptionalInt {
func (t changesetTranslator) optionalRatingConversion(legacyValue *int, rating100Value *int) models.OptionalInt {
const (
legacyField = "rating"
rating100Field = "rating100"
)
legacyRating := t.optionalInt(legacyValue, legacyField)
if legacyRating.Set && !(legacyRating.Null) {
legacyRating.Value = int(models.Rating5To100(int(legacyRating.Value)))
if legacyRating.Set && !legacyRating.Null {
legacyRating.Value = models.Rating5To100(legacyRating.Value)
return legacyRating
}
return t.optionalInt(rating100Value, rating100Field)
@@ -212,7 +214,7 @@ func (t changesetTranslator) optionalIntFromString(value *string, field string)
return models.NewOptionalInt(vv), nil
}
func (t changesetTranslator) bool(value *bool, field string) bool {
func (t changesetTranslator) bool(value *bool) bool {
if value == nil {
return false
}
@@ -235,3 +237,151 @@ func (t changesetTranslator) optionalFloat64(value *float64, field string) model
return models.NewOptionalFloat64Ptr(value)
}
func (t changesetTranslator) fileIDPtrFromString(value *string) (*models.FileID, error) {
if value == nil || *value == "" {
return nil, nil
}
vv, err := strconv.Atoi(*value)
if err != nil {
return nil, fmt.Errorf("converting %v to int: %w", *value, err)
}
id := models.FileID(vv)
return &id, nil
}
func (t changesetTranslator) fileIDSliceFromStringSlice(value []string) ([]models.FileID, error) {
ints, err := stringslice.StringSliceToIntSlice(value)
if err != nil {
return nil, err
}
fileIDs := make([]models.FileID, len(ints))
for i, v := range ints {
fileIDs[i] = models.FileID(v)
}
return fileIDs, nil
}
func (t changesetTranslator) relatedIds(value []string) (models.RelatedIDs, error) {
ids, err := stringslice.StringSliceToIntSlice(value)
if err != nil {
return models.RelatedIDs{}, err
}
return models.NewRelatedIDs(ids), nil
}
func (t changesetTranslator) updateIds(value []string, field string) (*models.UpdateIDs, error) {
if !t.hasField(field) {
return nil, nil
}
ids, err := stringslice.StringSliceToIntSlice(value)
if err != nil {
return nil, err
}
return &models.UpdateIDs{
IDs: ids,
Mode: models.RelationshipUpdateModeSet,
}, nil
}
func (t changesetTranslator) updateIdsBulk(value *BulkUpdateIds, field string) (*models.UpdateIDs, error) {
if !t.hasField(field) || value == nil {
return nil, nil
}
ids, err := stringslice.StringSliceToIntSlice(value.Ids)
if err != nil {
return nil, fmt.Errorf("converting ids [%v]: %w", value.Ids, err)
}
return &models.UpdateIDs{
IDs: ids,
Mode: value.Mode,
}, nil
}
func (t changesetTranslator) updateStrings(value []string, field string) *models.UpdateStrings {
if !t.hasField(field) {
return nil
}
return &models.UpdateStrings{
Values: value,
Mode: models.RelationshipUpdateModeSet,
}
}
func (t changesetTranslator) updateStringsBulk(value *BulkUpdateStrings, field string) *models.UpdateStrings {
if !t.hasField(field) || value == nil {
return nil
}
return &models.UpdateStrings{
Values: value.Values,
Mode: value.Mode,
}
}
func (t changesetTranslator) updateStashIDs(value []models.StashID, field string) *models.UpdateStashIDs {
if !t.hasField(field) {
return nil
}
return &models.UpdateStashIDs{
StashIDs: value,
Mode: models.RelationshipUpdateModeSet,
}
}
func (t changesetTranslator) relatedMovies(value []models.SceneMovieInput) (models.RelatedMovies, error) {
moviesScenes, err := models.MoviesScenesFromInput(value)
if err != nil {
return models.RelatedMovies{}, err
}
return models.NewRelatedMovies(moviesScenes), nil
}
func (t changesetTranslator) updateMovieIDs(value []models.SceneMovieInput, field string) (*models.UpdateMovieIDs, error) {
if !t.hasField(field) {
return nil, nil
}
moviesScenes, err := models.MoviesScenesFromInput(value)
if err != nil {
return nil, err
}
return &models.UpdateMovieIDs{
Movies: moviesScenes,
Mode: models.RelationshipUpdateModeSet,
}, nil
}
func (t changesetTranslator) updateMovieIDsBulk(value *BulkUpdateIds, field string) (*models.UpdateMovieIDs, error) {
if !t.hasField(field) || value == nil {
return nil, nil
}
ids, err := stringslice.StringSliceToIntSlice(value.Ids)
if err != nil {
return nil, fmt.Errorf("converting ids [%v]: %w", value.Ids, err)
}
movies := make([]models.MoviesScenes, len(value.Ids))
for _, id := range ids {
movies = append(movies, models.MoviesScenes{MovieID: id})
}
return &models.UpdateMovieIDs{
Movies: movies,
Mode: value.Mode,
}, nil
}