You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.0 KiB
59 lines
2.0 KiB
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
|
|
}
|