diff --git a/internal/domain/ennoblement.go b/internal/domain/ennoblement.go index ecb572a..1af9765 100644 --- a/internal/domain/ennoblement.go +++ b/internal/domain/ennoblement.go @@ -4,7 +4,6 @@ import ( "fmt" "math" "slices" - "strings" "time" ) @@ -231,23 +230,6 @@ const ( EnnoblementSortServerKeyDESC ) -func newEnnoblementSortFromString(s string) (EnnoblementSort, error) { - allowed := []EnnoblementSort{ - EnnoblementSortCreatedAtASC, - EnnoblementSortCreatedAtDESC, - } - - for _, a := range allowed { - if strings.EqualFold(a.String(), s) { - return a, nil - } - } - - return 0, UnsupportedSortStringError{ - Sort: s, - } -} - // IsInConflict returns true if two sorts can't be used together (e.g. EnnoblementSortIDASC and EnnoblementSortIDDESC). func (s EnnoblementSort) IsInConflict(s2 EnnoblementSort) bool { ss := []EnnoblementSort{s, s2} @@ -539,7 +521,11 @@ func (params *ListEnnoblementsParams) PrependSortString(sort []string) error { toPrepend := make([]EnnoblementSort, 0, len(sort)) for i, s := range sort { - converted, err := newEnnoblementSortFromString(s) + converted, err := newSortFromString( + s, + EnnoblementSortCreatedAtASC, + EnnoblementSortCreatedAtDESC, + ) if err != nil { return SliceElementValidationError{ Model: listEnnoblementsParamsModelName, diff --git a/internal/domain/player.go b/internal/domain/player.go index 42389a3..116dbeb 100644 --- a/internal/domain/player.go +++ b/internal/domain/player.go @@ -6,7 +6,6 @@ import ( "math" "net/url" "slices" - "strings" "time" ) @@ -541,33 +540,6 @@ const ( PlayerSortDeletedAtDESC ) -func newPlayerSortFromString(s string) (PlayerSort, error) { - allowed := []PlayerSort{ - PlayerSortODScoreAttASC, - PlayerSortODScoreAttDESC, - PlayerSortODScoreDefASC, - PlayerSortODScoreDefDESC, - PlayerSortODScoreSupASC, - PlayerSortODScoreSupDESC, - PlayerSortODScoreTotalASC, - PlayerSortODScoreTotalDESC, - PlayerSortPointsASC, - PlayerSortPointsDESC, - PlayerSortDeletedAtASC, - PlayerSortDeletedAtDESC, - } - - for _, a := range allowed { - if strings.EqualFold(a.String(), s) { - return a, nil - } - } - - return 0, UnsupportedSortStringError{ - Sort: s, - } -} - // IsInConflict returns true if two sorts can't be used together (e.g. PlayerSortIDASC and PlayerSortIDDESC). func (s PlayerSort) IsInConflict(s2 PlayerSort) bool { ss := []PlayerSort{s, s2} @@ -991,7 +963,21 @@ func (params *ListPlayersParams) PrependSortString(sort []string) error { toPrepend := make([]PlayerSort, 0, len(sort)) for i, s := range sort { - converted, err := newPlayerSortFromString(s) + converted, err := newSortFromString( + s, + PlayerSortODScoreAttASC, + PlayerSortODScoreAttDESC, + PlayerSortODScoreDefASC, + PlayerSortODScoreDefDESC, + PlayerSortODScoreSupASC, + PlayerSortODScoreSupDESC, + PlayerSortODScoreTotalASC, + PlayerSortODScoreTotalDESC, + PlayerSortPointsASC, + PlayerSortPointsDESC, + PlayerSortDeletedAtASC, + PlayerSortDeletedAtDESC, + ) if err != nil { return SliceElementValidationError{ Model: listPlayersParamsModelName, diff --git a/internal/domain/tribe.go b/internal/domain/tribe.go index 521b761..2b06c83 100644 --- a/internal/domain/tribe.go +++ b/internal/domain/tribe.go @@ -6,7 +6,6 @@ import ( "math" "net/url" "slices" - "strings" "time" ) @@ -469,33 +468,6 @@ const ( TribeSortDeletedAtDESC ) -func newTribeSortFromString(s string) (TribeSort, error) { - allowed := []TribeSort{ - TribeSortODScoreAttASC, - TribeSortODScoreAttDESC, - TribeSortODScoreDefASC, - TribeSortODScoreDefDESC, - TribeSortODScoreTotalASC, - TribeSortODScoreTotalDESC, - TribeSortPointsASC, - TribeSortPointsDESC, - TribeSortDominanceASC, - TribeSortDominanceDESC, - TribeSortDeletedAtASC, - TribeSortDeletedAtDESC, - } - - for _, a := range allowed { - if strings.EqualFold(a.String(), s) { - return a, nil - } - } - - return 0, UnsupportedSortStringError{ - Sort: s, - } -} - // IsInConflict returns true if two sorts can't be used together (e.g. TribeSortIDASC and TribeSortIDDESC). func (s TribeSort) IsInConflict(s2 TribeSort) bool { ss := []TribeSort{s, s2} @@ -878,7 +850,21 @@ func (params *ListTribesParams) PrependSortString(sort []string) error { toPrepend := make([]TribeSort, 0, len(sort)) for i, s := range sort { - converted, err := newTribeSortFromString(s) + converted, err := newSortFromString( + s, + TribeSortODScoreAttASC, + TribeSortODScoreAttDESC, + TribeSortODScoreDefASC, + TribeSortODScoreDefDESC, + TribeSortODScoreTotalASC, + TribeSortODScoreTotalDESC, + TribeSortPointsASC, + TribeSortPointsDESC, + TribeSortDominanceASC, + TribeSortDominanceDESC, + TribeSortDeletedAtASC, + TribeSortDeletedAtDESC, + ) if err != nil { return SliceElementValidationError{ Model: listTribesParamsModelName, diff --git a/internal/domain/tribe_change.go b/internal/domain/tribe_change.go index b658160..2447435 100644 --- a/internal/domain/tribe_change.go +++ b/internal/domain/tribe_change.go @@ -5,7 +5,6 @@ import ( "fmt" "math" "slices" - "strings" "time" ) @@ -264,23 +263,6 @@ const ( TribeChangeSortServerKeyDESC ) -func newTribeChangeSortFromString(s string) (TribeChangeSort, error) { - allowed := []TribeChangeSort{ - TribeChangeSortCreatedAtASC, - TribeChangeSortCreatedAtDESC, - } - - for _, a := range allowed { - if strings.EqualFold(a.String(), s) { - return a, nil - } - } - - return 0, UnsupportedSortStringError{ - Sort: s, - } -} - // IsInConflict returns true if two sorts can't be used together (e.g. TribeChangeSortIDASC and TribeChangeSortIDDESC). func (s TribeChangeSort) IsInConflict(s2 TribeChangeSort) bool { ss := []TribeChangeSort{s, s2} @@ -592,7 +574,11 @@ func (params *ListTribeChangesParams) PrependSortString(sort []string) error { toPrepend := make([]TribeChangeSort, 0, len(sort)) for i, s := range sort { - converted, err := newTribeChangeSortFromString(s) + converted, err := newSortFromString( + s, + TribeChangeSortCreatedAtASC, + TribeChangeSortCreatedAtDESC, + ) if err != nil { return SliceElementValidationError{ Model: listTribeChangesParamsModelName, diff --git a/internal/domain/utils.go b/internal/domain/utils.go index 090e1c0..856e1dd 100644 --- a/internal/domain/utils.go +++ b/internal/domain/utils.go @@ -185,3 +185,17 @@ func (c decodedCursor) time(k string) (time.Time, error) { return val, nil } + +func newSortFromString[T interface { + String() string +}](s string, allowed ...T) (T, error) { + for _, a := range allowed { + if strings.EqualFold(a.String(), s) { + return a, nil + } + } + var zero T + return zero, UnsupportedSortStringError{ + Sort: s, + } +}