diff options
author | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2023-08-15 13:37:22 +0530 |
---|---|---|
committer | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2023-08-15 13:37:22 +0530 |
commit | d0d0d0cdc4218f1f944481a5116c74d81682deff (patch) | |
tree | 9cca99607126273d317ad9bae0b66c6248f07035 /validators.go | |
parent | 266af04ade2dd1617bb27079779bdb81d6f18ee0 (diff) |
added validators for read-only endpoints
Diffstat (limited to 'validators.go')
-rw-r--r-- | validators.go | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/validators.go b/validators.go index 206585b..2dafaad 100644 --- a/validators.go +++ b/validators.go @@ -16,3 +16,279 @@ */ package mg + +import ( + "strings" + "slices" +) + +func validateAnimeFields(fields *[]string) error { + // if no fields given, set all + if cap(*fields) == 0 { + *fields = DefaultAnimeFields + return nil + } + + // check if given fields exist in DefaultAnimeFields + for _, f := range *fields { + if !slices.Contains(DefaultAnimeFields, f) { + return ErrInvalidField + } + } + + return nil +} + +func validateAnimeRankingType(t string) error { + if !slices.Contains([]string{ + RankingTypeAll, + RankingTypeByPopularity, + RankingTypeFavorite, + RankingTypeAiring, + RankingTypeUpcoming, + RankingTypeTV, + RankingTypeOVA, + RankingTypeMovie, + RankingTypeSpecial, + }, t) { + return ErrInvalidRankingType + } + + return nil +} + +func validateAnimeListSort(s string) error { + if !slices.Contains([]string{ + SortByListScore, + SortByListUpdatedAt, + SortByAnimeTitle, + SortByAnimeStartDate, + SortByAnimeId, + }, s) { + return ErrInvalidSort + } + + return nil +} + +func validateAnimeListStatus(s string) error { + if !slices.Contains([]string{ + ListStatusCompleted, + ListStatusOnHold, + ListStatusDropped, + ListStatusWatching, + ListStatusPTW, + }, s) { + return ErrInvalidStatus + } + + return nil +} + +func validateAnimeSeason(s string) error { + if !slices.Contains([]string{ + SeasonWinter, + SeasonSpring, + SeasonSummer, + SeasonFall, + }, s) { + return ErrInvalidSeason + } + + return nil +} + +func validateAnimeSeasonSort(s string) error { + if !slices.Contains([]string{ + SeasonSortByAnimeScore, + SeasonSortByNumListUsers, + }, s) { + return ErrInvalidSort + } + + return nil +} + +func validateMangaFields(fields *[]string) error { + // if no fields given, set all + if cap(*fields) == 0 { + *fields = DefaultMangaFields + return nil + } + + // check if given fields exist in DefaultAnimeFields + for _, f := range *fields { + if !slices.Contains(DefaultMangaFields, f) { + return ErrInvalidField + } + } + + return nil +} + +func validateMangaRankingType(t string) error { + if !slices.Contains([]string{ + RankingTypeAll, + RankingTypeByPopularity, + RankingTypeFavorite, + RankingTypeManga, + RankingTypeNovel, + RankingTypeOneShot, + RankingTypeDoujin, + RankingTypeManhwa, + RankingTypeManhua, + }, t) { + return ErrInvalidRankingType + } + + return nil +} + +func validateMangaListSort(s string) error { + if !slices.Contains([]string{ + SortByListScore, + SortByListUpdatedAt, + SortByMangaTitle, + SortByMangaStartDate, + SortByMangaId, + }, s) { + return ErrInvalidSort + } + + return nil +} + +func validateMangaListStatus(s string) error { + if !slices.Contains([]string{ + ListStatusCompleted, + ListStatusOnHold, + ListStatusDropped, + ListStatusReading, + ListStatusPTR, + }, s) { + return ErrInvalidStatus + } + + return nil +} + +func validateScore(score int) error { + if score >= 0 && score <= 10 { + return nil + } + + return ErrInvalidScore +} + +func validatePriority(priority int) error { + if priority >= 0 && priority <= 2 { + return nil + } + + return ErrInvalidPriority +} + +func validateRewatchValue(val int) error { + if val >= 0 && val <= 5 { + return nil + } + + return ErrInvalidRewatchValue +} + +func validateRereadValue(val int) error { + if val >= 0 && val <= 5 { + return nil + } + + return ErrInvalidRereadValue +} + +func validateAnimeSearchParams(params *SearchParams) error { + if strings.TrimSpace(params.SearchString) == "" { + return ErrEmptySearchString + } + + if params.Limit > 100 || params.Limit < 1 { + return ErrLimitOutOfRange + } + + err := validateAnimeFields(¶ms.Fields) + + return err +} + +func validateAnimeRankingParams(params *RankingParams) error { + err := validateAnimeRankingType(params.RankingType) + if err != nil { + return err + } + + if params.Limit > 500 || params.Limit < 1 { + return ErrLimitOutOfRange + } + + err = validateAnimeFields(¶ms.Fields) + + return err +} + +func validateSeasonalParams(params *SeasonalParams) error { + // check if year is int + + err := validateAnimeSeason(params.Season) + if err != nil { + return err + } + + err = validateAnimeSeasonSort(params.Sort) + if err != nil { + return err + } + + if params.Limit > 500 || params.Limit < 1 { + return ErrLimitOutOfRange + } + + err = validateMangaFields(¶ms.Fields) + + return err +} + +func validateSuggestedParams(params *SuggestedParams) error { + if params.Limit > 100 || params.Limit < 1 { + return ErrLimitOutOfRange + } + + return validateAnimeFields(¶ms.Fields) +} + +func validateMangaSearchParams(params *SearchParams) error { + if strings.TrimSpace(params.SearchString) == "" { + return ErrEmptySearchString + } + + if params.Limit > 100 || params.Limit < 1 { + return ErrLimitOutOfRange + } + + err := validateMangaFields(¶ms.Fields) + + return err +} + + +func validateMangaRankingParams(params *RankingParams) error { + err := validateMangaRankingType(params.RankingType) + if err != nil { + return err + } + + if params.Limit > 500 || params.Limit < 1 { + return ErrLimitOutOfRange + } + + err = validateMangaFields(¶ms.Fields) + + return err +} |