package pubdef import ( "slices" ) type IMedia interface { GetID() int64 GetTitle() string GetPrice() int64 GetCover() string GetPublishID() int64 GetLocationType() LocationType GetIsVIP() bool GetIsDark() bool GetCollectionIds() []int64 GetEpisodeIds() []int64 } type DateCount struct { Date string `json:"date" bson:"date"` // 日期: yyyy-MM-dd Count int64 `json:"count" bson:"count"` // 数量 } type DateCountList []DateCount type MediaType = LocationType type ContentType int32 const ( ContentTypeVideoLong ContentType = 1 // 长视频 ContentTypeVideoDsp ContentType = 2 // 短视频 ) type LocationType int32 const ( LocationTypeNone LocationType = 0 // 占位符,无意义 LocationTypeVideo LocationType = 1 // 视频 LocationTypeVideoLLD LocationType = 2 // 萝莉岛 LocationTypeCartoon LocationType = 3 // 动漫 LocationTypePost LocationType = 4 // 帖子 LocationTypeComment LocationType = 5 // 评论 LocationTypeCollection LocationType = 6 // 合集 LocationTypeComics LocationType = 7 // 漫画 LocationTypeNovel LocationType = 8 // 小说 LocationTypeVoiceNovel LocationType = 9 // 有声小说 LocationTypePhoto LocationType = 10 // 图集 LocationTypeGame LocationType = 11 // 黄游 LocationTypeShort LocationType = 12 // 短视频 ) func (s LocationType) String() string { switch s { case LocationTypeVideo: return "长视频" case LocationTypeVideoLLD: return "萝莉岛" case LocationTypeCartoon: return "动漫" case LocationTypePost: return "动态" case LocationTypeComment: return "评论" case LocationTypeCollection: return "合集" case LocationTypeComics: return "漫画" case LocationTypeNovel: return "小说" case LocationTypeVoiceNovel: return "有声小说" case LocationTypePhoto: return "图集" case LocationTypeGame: return "黄游" case LocationTypeShort: return "短视频" default: return "未知" } } func (s LocationType) HasIntersection(other ...LocationType) bool { for _, v := range other { if s == v { return true } } return false } // 哪些类型可以分配创作者收益, 目前是所有类型 func (s LocationType) CanDistributionWorkerIncome() bool { return slices.Contains([]LocationType{ LocationTypeVideo, LocationTypeVideoLLD, LocationTypeCartoon, LocationTypePost, LocationTypeCollection, LocationTypeComics, LocationTypeNovel, LocationTypePhoto, LocationTypeGame, }, s) } type MediaTagInfo struct { Id int64 `json:"id"` Name string `json:"name"` } type MediaTagInfoList []MediaTagInfo func (s MediaTagInfoList) ToUniqueList() MediaTagInfoList { var ret MediaTagInfoList dict := make(map[int64]struct{}) for _, v := range s { if _, ok := dict[v.Id]; !ok { dict[v.Id] = struct{}{} ret = append(ret, v) } } return ret }