spark-server/internal/module/square/entity/channel.go
DESKTOP-L8OUL9F\gfl0034 53426af122 feat: 多广场 channel、音乐公开 API 与订阅 package_name
支持 square/squarenovel/squaresteps/squarehealth 实例与 category 筛选;音乐增加免登录 grouped/track;订阅套餐按 package_name 区分;补 migration 0030/0031 与 OpenAPI。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-30 09:02:28 +08:00

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
}