aboutsummaryrefslogtreecommitdiff
path: root/validators.go
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.com>2023-08-15 13:37:22 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.com>2023-08-15 13:37:22 +0530
commitd0d0d0cdc4218f1f944481a5116c74d81682deff (patch)
tree9cca99607126273d317ad9bae0b66c6248f07035 /validators.go
parent266af04ade2dd1617bb27079779bdb81d6f18ee0 (diff)
added validators for read-only endpoints
Diffstat (limited to 'validators.go')
-rw-r--r--validators.go276
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(&params.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(&params.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(&params.Fields)
+
+ return err
+}
+
+func validateSuggestedParams(params *SuggestedParams) error {
+ if params.Limit > 100 || params.Limit < 1 {
+ return ErrLimitOutOfRange
+ }
+
+ return validateAnimeFields(&params.Fields)
+}
+
+func validateMangaSearchParams(params *SearchParams) error {
+ if strings.TrimSpace(params.SearchString) == "" {
+ return ErrEmptySearchString
+ }
+
+ if params.Limit > 100 || params.Limit < 1 {
+ return ErrLimitOutOfRange
+ }
+
+ err := validateMangaFields(&params.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(&params.Fields)
+
+ return err
+}