refactor: domain - generic newSortFromString
ci/woodpecker/push/govulncheck Pipeline was successful Details
ci/woodpecker/push/test Pipeline was successful Details

This commit is contained in:
Dawid Wysokiński 2024-03-15 07:49:55 +01:00
parent 02108fcb00
commit 07f18c8aab
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
5 changed files with 54 additions and 96 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,
}
}