支持 square/squarenovel/squaresteps/squarehealth 实例与 category 筛选;音乐增加免登录 grouped/track;订阅套餐按 package_name 区分;补 migration 0030/0031 与 OpenAPI。 Co-authored-by: Cursor <cursoragent@cursor.com>
105 lines
2.3 KiB
Go
105 lines
2.3 KiB
Go
package entity
|
|
|
|
// Channel is a square plaza instance (path prefix / data isolation).
|
|
type Channel string
|
|
|
|
const (
|
|
ChannelSquare Channel = "square"
|
|
ChannelSquareNovel Channel = "squarenovel"
|
|
ChannelSquareSteps Channel = "squaresteps"
|
|
ChannelSquareHealth Channel = "squarehealth"
|
|
)
|
|
|
|
// Channels is the closed set of plaza instances.
|
|
func Channels() []Channel {
|
|
return []Channel{ChannelSquare, ChannelSquareNovel, ChannelSquareSteps, ChannelSquareHealth}
|
|
}
|
|
|
|
func (c Channel) Valid() bool {
|
|
switch c {
|
|
case ChannelSquare, ChannelSquareNovel, ChannelSquareSteps, ChannelSquareHealth:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func ParseChannel(s string) (Channel, bool) {
|
|
c := Channel(s)
|
|
if !c.Valid() {
|
|
return "", false
|
|
}
|
|
return c, true
|
|
}
|
|
|
|
// Category is a feed tab / post tag under every channel.
|
|
// Feed modes (recommend/latest/hot/nearby) only affect list sort; tags are stored on posts.
|
|
type Category string
|
|
|
|
const (
|
|
CategoryRecommend Category = "recommend"
|
|
CategoryLatest Category = "latest"
|
|
CategoryHot Category = "hot"
|
|
CategoryNearby Category = "nearby"
|
|
CategoryFunny Category = "funny"
|
|
CategoryBeauty Category = "beauty"
|
|
)
|
|
|
|
// Categories lists every filter tab (feed modes + tags).
|
|
func Categories() []Category {
|
|
return []Category{
|
|
CategoryRecommend, CategoryLatest, CategoryHot, CategoryNearby,
|
|
CategoryFunny, CategoryBeauty,
|
|
}
|
|
}
|
|
|
|
// PublishCategories are tags that may be written on a post.
|
|
func PublishCategories() []Category {
|
|
return []Category{CategoryFunny, CategoryBeauty}
|
|
}
|
|
|
|
func (c Category) Valid() bool {
|
|
switch c {
|
|
case CategoryRecommend, CategoryLatest, CategoryHot, CategoryNearby,
|
|
CategoryFunny, CategoryBeauty, "":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (c Category) IsFeedMode() bool {
|
|
switch c {
|
|
case CategoryRecommend, CategoryLatest, CategoryHot, CategoryNearby, "":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (c Category) IsTag() bool {
|
|
switch c {
|
|
case CategoryFunny, CategoryBeauty:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func ParseCategory(s string) (Category, bool) {
|
|
c := Category(s)
|
|
if !c.Valid() {
|
|
return "", false
|
|
}
|
|
return c, true
|
|
}
|
|
|
|
// FeedListQuery drives public feed filtering and sort in the repository.
|
|
type FeedListQuery struct {
|
|
Cursor int64
|
|
Limit int
|
|
Category Category
|
|
Lat float64
|
|
Lng float64
|
|
}
|