Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+161
View File
@@ -0,0 +1,161 @@
package officialWebsiteser
import (
"91porn-server/common/stderr"
"91porn-server/models/v/officialWebsitemod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
)
type AlbumListReq struct {
SortType int64 `json:"sortType" form:"sortType"` // 1: 创建时间 目前仅支持一种排序方式,后续增加后再完善这个字段
PageNumber int64 `json:"pageNumber" form:"pageNumber"`
PageSize int64 `json:"pageSize" form:"pageSize"`
}
type AlbumListResp struct {
HasNext bool `json:"hasNext"`
List []*AlbumResp `json:"list"`
}
type AlbumResp struct {
ID string `json:"id"`
HeroID string `json:"heroID"`
Title string `json:"title"`
SeoSlug string `json:"seoSlug"`
Description string `json:"description"`
Cover string `json:"cover"`
IsHot bool `json:"isHot"`
Tags []string `json:"tags"`
}
func (a *AlbumResp) FromModel(album *officialWebsitemod.Album) {
if album == nil {
return
}
a.ID = album.ID.Hex()
a.HeroID = album.HeroID.Hex()
a.Title = album.Title
a.SeoSlug = album.SeoSlug
a.Description = album.Description
a.Cover = album.Cover
a.IsHot = album.IsHot
a.Tags = make([]string, 0)
for _, tag := range album.Tags {
a.Tags = append(a.Tags, tag.Name)
}
}
func AlbumList(req *AlbumListReq) (resp AlbumListResp, err error) {
var sort = bson.D{}
switch req.SortType { // 目前仅支持一种排序方式,后续增加后再完善这个字段
default:
sort = bson.D{{Key: "createdAt", Value: -1}}
}
var albumMod = &officialWebsitemod.Album{}
var skip, limit = transPageAndPageNumber(req.PageSize, req.PageNumber)
var ops = options.Find().SetSort(sort).SetSkip(skip).SetLimit(limit + 1)
albumsData, err := albumMod.FindMany(bson.M{"isActive": true}, ops)
if err != nil {
return
}
resp = AlbumListResp{
HasNext: len(albumsData) > int(limit),
List: make([]*AlbumResp, 0),
}
for _, v := range albumsData {
var albumResp = &AlbumResp{}
albumResp.FromModel(&v)
resp.List = append(resp.List, albumResp)
}
if resp.HasNext {
resp.List = resp.List[:len(resp.List)-1]
}
return resp, nil
}
type AlbumDetailReq struct {
ID string `uri:"id" form:"id"`
PageNumber int64 `json:"pageNumber" form:"pageNumber"`
PageSize int64 `json:"pageSize" form:"pageSize"`
}
type AlbumDetailResp struct {
AlbumResp
Videos []AlbumDetailVideoResp `json:"videos"`
}
type AlbumDetailVideoResp struct {
ID string `json:"id"`
Title string `json:"title"`
SeoSlug string `json:"seoSlug"`
Description string `json:"description"`
Cover string `json:"cover"`
Url string `json:"url"`
IsHot bool `json:"isHot"`
Tags []VideoTagResp `json:"tags"`
WatchCount int64 `json:"watchCount"`
LikeCount int64 `json:"likeCount"`
CommentCount int64 `json:"commentCount"`
CollectCount int64 `json:"collectCount"`
}
func AlbumDetail(req *AlbumDetailReq) (resp AlbumDetailResp, err error) {
if req.ID == "" {
err = stderr.ErrParamError
return
}
// 兼容 id 与 seoSlug24 位 hex 按 _id 查,否则按 seoSlug 查
filter := bson.M{}
if objID, e := primitive.ObjectIDFromHex(req.ID); e == nil {
filter["_id"] = objID
} else {
filter["seoSlug"] = req.ID
}
albumMod := &officialWebsitemod.Album{}
err = albumMod.FindOne(filter)
if err != nil {
return
}
resp.FromModel(albumMod)
// 组装获取专辑下视频列表
filter = bson.M{"albumId": albumMod.ID}
var skip, limit = transPageAndPageNumber(req.PageSize, req.PageNumber)
var option = options.Find().SetSort(bson.D{{Key: "createdAt", Value: -1}}).SetSkip(skip).SetLimit(limit + 1)
videoMod := &officialWebsitemod.Video{}
var videos []officialWebsitemod.Video
videos, err = videoMod.FindMany(filter, option)
if err != nil {
return
}
for _, video := range videos {
var videoResp = AlbumDetailVideoResp{
ID: video.ID.Hex(),
Title: video.Title,
SeoSlug: video.SeoSlug,
Description: video.Description,
Cover: video.Cover,
Url: video.Url,
IsHot: video.IsHot,
WatchCount: video.WatchCount,
LikeCount: video.LikeCount,
CommentCount: video.CommentCount,
CollectCount: video.CollectCount,
}
for _, tag := range video.Tags {
videoResp.Tags = append(videoResp.Tags, VideoTagResp{
ID: tag.ID.Hex(),
Name: tag.Name,
})
}
resp.Videos = append(resp.Videos, videoResp)
}
return
}