package mediabookshelfdata import ( "91porn-server/models/v/mediabookshelfmod" "91porn-server/models/v/mediamod" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" "time" ) // AppData 需要组装返回的数据 type AppData struct { BaseInfo *mediabookshelfmod.MediaBookshelfInfo `json:"baseInfo"` // 基础信息 } // FormatAppDataList 格式化app列表数据 func FormatAppDataList(origin []mediabookshelfmod.MediaBookshelf) (res []AppData) { res = make([]AppData, len(origin)) if len(origin) == 0 { return } // 组装返回数据 for i, item := range origin { res[i] = FormatAppData(item) } return } // FormatAppData 格式化app数据 func FormatAppData(item mediabookshelfmod.MediaBookshelf) (res AppData) { if item.ID.IsZero() { return } // 组装返回数据 res.BaseInfo = &mediabookshelfmod.MediaBookshelfInfo{ ID: item.ID, Name: item.Name, UID: item.UID, ReadAt: item.ReadAt, CreatedAt: item.CreatedAt, UpdateTime: item.UpdateTime, } return } // AppSimpleData 仅返回基础数据 type AppSimpleData *mediabookshelfmod.MediaBookshelfInfo // FormatAppSimpleDataList 格式化app列表数据 func FormatAppSimpleDataList(origin []mediabookshelfmod.MediaBookshelf, skip, limit int64, sort bson.D) (res []AppSimpleData) { res = make([]AppSimpleData, len(origin)) if len(origin) == 0 { return } var mids []primitive.ObjectID for i := range origin { mids = append(mids, origin[i].MID) } filter := bson.M{"_id": bson.M{"$in": mids}} opts := options.Find().SetSkip(skip).SetLimit(limit) if len(sort) > 0 { opts = opts.SetSort(sort) } media, err := mediamod.QueryMediaByCond(filter, opts) if err != nil { return } m := make(map[primitive.ObjectID]*mediamod.Media) for i := range media { m[media[i].ID] = media[i] } // 组装返回数据 for i, item := range origin { res[i] = FormatAppSimpleData(item, m[item.MID]) } return } // FormatAppSimpleData 格式化app数据 func FormatAppSimpleData(item mediabookshelfmod.MediaBookshelf, media *mediamod.Media) (res AppSimpleData) { if item.ID.IsZero() { return } // 组装返回数据 res = &mediabookshelfmod.MediaBookshelfInfo{ ID: item.MID, //MID: item.MID, Name: media.Title, VerticalCover: media.VerticalCover, TotalEpisode: media.TotalEpisode, CurrentEpisode: media.CurrentEpisode, MediaType: media.MediaType, MediaSubType: int(media.MediaSubType), UpdateStatus: media.UpdateStatus, CountBrowse: media.CountBrowse, Permission: media.Permission, Price: media.Price, UID: item.UID, ReadAt: item.ReadAt, CreatedAt: item.CreatedAt, UpdateTime: item.UpdateTime, } if time.Now().Add(-time.Hour*24*7).Unix() < media.ContentUpdateTime.Unix() { res.IsNew = true } return }