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 }