podgrab/model/queryModels.go

59 lines
2.0 KiB
Go

package model
import "math"
type Pagination struct {
Page int `uri:"page" query:"page" json:"page" form:"page" default:1`
Count int `uri:"count" query:"count" json:"count" form:"count" default:20`
NextPage int `uri:"nextPage" query:"nextPage" json:"nextPage" form:"nextPage"`
PreviousPage int `uri:"previousPage" query:"previousPage" json:"previousPage" form:"previousPage"`
TotalCount int `uri:"totalCount" query:"totalCount" json:"totalCount" form:"totalCount"`
TotalPages int `uri:"totalPages" query:"totalPages" json:"totalPages" form:"totalPages"`
}
type EpisodeSort string
const (
RELEASE_ASC EpisodeSort = "release_asc"
RELEASE_DESC EpisodeSort = "release_desc"
DURATION_ASC EpisodeSort = "duration_asc"
DURATION_DESC EpisodeSort = "duration_desc"
)
type EpisodesFilter struct {
Pagination
IsDownloaded *string `uri:"isDownloaded" query:"isDownloaded" json:"isDownloaded" form:"isDownloaded"`
IsPlayed *string `uri:"isPlayed" query:"isPlayed" json:"isPlayed" form:"isPlayed"`
Sorting EpisodeSort `uri:"sorting" query:"sorting" json:"sorting" form:"sorting"`
Q string `uri:"q" query:"q" json:"q" form:"q"`
TagIds []string `uri:"tagIds" query:"tagIds[]" json:"tagIds" form:"tagIds[]"`
PodcastIds []string `uri:"podcastIds" query:"podcastIds[]" json:"podcastIds" form:"podcastIds[]"`
}
func (filter *EpisodesFilter) VerifyPaginationValues() {
if filter.Count == 0 {
filter.Count = 20
}
if filter.Page == 0 {
filter.Page = 1
}
if filter.Sorting == "" {
filter.Sorting = RELEASE_DESC
}
}
func (filter *EpisodesFilter) SetCounts(totalCount int64) {
totalPages := int(math.Ceil(float64(totalCount) / float64(filter.Count)))
nextPage, previousPage := 0, 0
if filter.Page < totalPages {
nextPage = filter.Page + 1
}
if filter.Page > 1 {
previousPage = filter.Page - 1
}
filter.NextPage = nextPage
filter.PreviousPage = previousPage
filter.TotalCount = int(totalCount)
filter.TotalPages = totalPages
}