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
+88
View File
@@ -0,0 +1,88 @@
package aiimagetovideodata
import (
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/aiimagetovideomod"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []aiimagetovideomod.AiImageToVideo
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]aiimagetovideomod.AiImageToVideo, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.AiImageToVideo).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = aiimagetovideomod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res aiimagetovideomod.AiImageToVideo, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.AiImageToVideo, id.Hex()).ResBind(&res).Cache(aiimagetovideomod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []aiimagetovideomod.AiImageToVideo, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.AiImageToVideo+"-all").ResBind(&res).Cache(aiimagetovideomod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data aiimagetovideomod.AiImageToVideo) (primitive.ObjectID, error) {
newID, err := aiimagetovideomod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.AiImageToVideo).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := aiimagetovideomod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.AiImageToVideo).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = aiimagetovideomod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.AiImageToVideo).AutoClear(true, &all)
return
}
+43
View File
@@ -0,0 +1,43 @@
package aiimagetovideodata
import "91porn-server/models/v/aiimagetovideomod"
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []aiimagetovideomod.AiImageToVideo) (res []*aiimagetovideomod.AiImageToVideoInfo) {
res = make([]*aiimagetovideomod.AiImageToVideoInfo, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item aiimagetovideomod.AiImageToVideo) (res *aiimagetovideomod.AiImageToVideoInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &aiimagetovideomod.AiImageToVideoInfo{
ID: item.ID,
UID: item.UID,
ImgUrl: item.ImgUrl,
NewImgUrl: item.NewImgUrl,
Status: item.Status,
Coin: item.Coin,
IsFreeTimes: item.IsFreeTimes,
IsHide: item.IsHide,
Remark: item.Remark,
IsDelete: item.IsDelete,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package aiplazadata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/aiplazamod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []aiplazamod.AiPlaza
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]aiplazamod.AiPlaza, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.AiPlaza).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = aiplazamod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res aiplazamod.AiPlaza, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.AiPlaza, id.Hex()).ResBind(&res).Cache(aiplazamod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []aiplazamod.AiPlaza, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.AiPlaza+"-all").ResBind(&res).Cache(aiplazamod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data aiplazamod.AiPlaza) (primitive.ObjectID, error) {
newID, err := aiplazamod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.AiPlaza).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := aiplazamod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.AiPlaza).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id ...primitive.ObjectID) (err error) {
err = aiplazamod.DeleteByID(t, id...)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.AiPlaza).AutoClear(true, &all)
return
}
+153
View File
@@ -0,0 +1,153 @@
package aiplazadata
import (
"91porn-server/app/service/vidhelpser"
"91porn-server/common"
"91porn-server/models/v/aiplazamod"
"91porn-server/models/v/collectmod"
"91porn-server/models/v/likemod"
"91porn-server/models/v/vidmod"
"go.mongodb.org/mongo-driver/bson/primitive"
"sync"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []aiplazamod.AiPlaza) (res []*aiplazamod.AiPlazaInfo) {
res = make([]*aiplazamod.AiPlazaInfo, len(origin))
if len(origin) == 0 {
return
}
// 获取用户数据
uids := []uint64{}
for _, item := range origin {
uids = append(uids, item.Uid)
}
userMap := vidhelpser.GetSimpleUserMapNoUID(uids)
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppSimpleData(item, userMap)
}
return
}
// FormatAppSimpleData 格式化app数据
func FormatAppSimpleData(item aiplazamod.AiPlaza, userMap map[uint64]*vidmod.Publisher) (res *aiplazamod.AiPlazaInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &aiplazamod.AiPlazaInfo{
ID: item.ID,
Type: item.Type,
Template: item.Template,
Uid: item.Uid,
Title: item.Title,
OriginalImage: item.OriginalImage,
OriginalVideo: item.OriginalVideo,
OriginalVideoCover: item.OriginalVideoCover,
OriginContent: item.OriginContent,
GenerateImage: item.GenerateImage,
GenerateVideo: item.GenerateVideo,
GenerateVideoCover: item.GenerateVideoCover,
Status: item.Status,
Reason: item.Reason,
SortCode: item.SortCode,
LikeCount: item.LikeCount,
CollectCount: item.CollectCount,
CommentCount: item.CommentCount,
ViewCount: item.ViewCount,
ReviewAt: item.ReviewAt,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
if userMap != nil {
user, ok := userMap[item.Uid]
if ok && user != nil {
res.Name = user.Name
res.Gender = user.Gender
res.Portrait = user.Portrait
}
}
return
}
// FormatAppData 格式化app列表数据
func FormatAppData(uid uint64, item aiplazamod.AiPlaza) (res *aiplazamod.AiPlazaInfo) {
if item.ID.IsZero() {
return
}
userMap := vidhelpser.GetSimpleUserMapNoUID([]uint64{item.Uid})
// 获取是否点赞,收藏数据
dataStatus := GetDataStatus(uid, []primitive.ObjectID{item.ID})
// 组装返回数据
res = &aiplazamod.AiPlazaInfo{
ID: item.ID,
Type: item.Type,
Template: item.Template,
Uid: item.Uid,
Title: item.Title,
OriginalImage: item.OriginalImage,
OriginalVideo: item.OriginalVideo,
OriginalVideoCover: item.OriginalVideoCover,
OriginContent: item.OriginContent,
GenerateImage: item.GenerateImage,
GenerateVideo: item.GenerateVideo,
GenerateVideoCover: item.GenerateVideoCover,
Status: item.Status,
Reason: item.Reason,
SortCode: item.SortCode,
ReviewAt: item.ReviewAt,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
if userMap != nil {
user, ok := userMap[item.Uid]
if ok && user != nil {
res.Name = user.Name
res.Gender = user.Gender
res.Portrait = user.Portrait
}
}
if dataStatus != nil {
res.HasLiked = dataStatus[item.ID].HasLiked
res.HasCollected = dataStatus[item.ID].HasCollected
}
return
}
// DataStatus 数据状态
type DataStatus struct {
//已点赞
HasLiked bool `json:"hasLiked" bson:"hasLiked"`
//已收藏
HasCollected bool `json:"hasCollected" bson:"hasCollected"`
}
// GetDataStatus 获取数据状态信息
func GetDataStatus(uid uint64, objIds []primitive.ObjectID) map[primitive.ObjectID]DataStatus {
mLike := make(map[primitive.ObjectID]bool)
mCollect := make(map[primitive.ObjectID]bool)
var wg sync.WaitGroup
wg.Add(2)
common.Go(func() {
defer wg.Done()
mLike, _ = likemod.IsLikeVideos(uid, objIds)
})
common.Go(func() {
defer wg.Done()
mCollect, _ = collectmod.IsCollectVideos(uid, objIds)
})
wg.Wait()
m := make(map[primitive.ObjectID]DataStatus)
for _, v := range objIds {
info := DataStatus{
HasLiked: mLike[v],
HasCollected: mCollect[v],
}
m[v] = info
}
return m
}
+89
View File
@@ -0,0 +1,89 @@
package aitemplatemoduledata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/aitemplatemodulemod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []aitemplatemodulemod.AiTemplateModule
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]aitemplatemodulemod.AiTemplateModule, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(3*time.Minute).AutoListKey(models.AiTemplateModule).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = aitemplatemodulemod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res aitemplatemodulemod.AiTemplateModule, err error) {
_, err = cachev2.Classes().CacheTime(5*time.Minute).AutoInfoKey(models.AiTemplateModule, id.Hex()).ResBind(&res).Cache(aitemplatemodulemod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []aitemplatemodulemod.AiTemplateModule, err error) {
_, err = cachev2.Classes().CacheTime(8*time.Minute).AutoListKey(models.AiTemplateModule+"-all").ResBind(&res).Cache(aitemplatemodulemod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data aitemplatemodulemod.AiTemplateModule) (primitive.ObjectID, error) {
newID, err := aitemplatemodulemod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.AiTemplateModule).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := aitemplatemodulemod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.AiTemplateModule).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = aitemplatemodulemod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.AiTemplateModule).AutoClear(true, &all)
return
}
+36
View File
@@ -0,0 +1,36 @@
package aitemplatemoduledata
import (
"91porn-server/models/v/aitemplatemodulemod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []aitemplatemodulemod.AiTemplateModule) (res []*aitemplatemodulemod.AiTemplateModuleInfo) {
res = make([]*aitemplatemodulemod.AiTemplateModuleInfo, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item aitemplatemodulemod.AiTemplateModule) (res *aitemplatemodulemod.AiTemplateModuleInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &aitemplatemodulemod.AiTemplateModuleInfo{
ID: item.ID,
Type: item.Type,
Name: item.Name,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package aitexttoimagedata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/aitexttoimagemod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []aitexttoimagemod.AiTextToImage
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]aitexttoimagemod.AiTextToImage, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(3*time.Minute).AutoListKey(models.AiTextToImage).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = aitexttoimagemod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res aitexttoimagemod.AiTextToImage, err error) {
_, err = cachev2.Classes().CacheTime(5*time.Minute).AutoInfoKey(models.AiTextToImage, id.Hex()).ResBind(&res).Cache(aitexttoimagemod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []aitexttoimagemod.AiTextToImage, err error) {
_, err = cachev2.Classes().CacheTime(8*time.Minute).AutoListKey(models.AiTextToImage+"-all").ResBind(&res).Cache(aitexttoimagemod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data aitexttoimagemod.AiTextToImage) (primitive.ObjectID, error) {
newID, err := aitexttoimagemod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.AiTextToImage).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := aitexttoimagemod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.AiTextToImage).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = aitexttoimagemod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.AiTextToImage).AutoClear(true, &all)
return
}
+49
View File
@@ -0,0 +1,49 @@
package aitexttoimagedata
import (
"91porn-server/models/v/aitexttoimagemod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []aitexttoimagemod.AiTextToImage) (res []*aitexttoimagemod.AiTextToImageInfo) {
res = make([]*aitexttoimagemod.AiTextToImageInfo, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item aitexttoimagemod.AiTextToImage) (res *aitexttoimagemod.AiTextToImageInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &aitexttoimagemod.AiTextToImageInfo{
ID: item.ID,
UID: item.UID,
Text: item.Text,
NewImgUrl: item.NewImgUrl,
Status: item.Status,
AspectRatio: item.AspectRatio,
StyleType: item.StyleType,
Coin: item.Coin,
DebitAmountCoin: item.DebitAmountCoin,
DebitIncomeCoin: item.DebitIncomeCoin,
IsFreeTimes: item.IsFreeTimes,
IsHide: item.IsHide,
Remark: item.Remark,
IsDelete: item.IsDelete,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+88
View File
@@ -0,0 +1,88 @@
package aitexttonoveldata
import (
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/aitexttonovelmod"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []aitexttonovelmod.AiTextToNovel
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]aitexttonovelmod.AiTextToNovel, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.AiTextToNovel).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = aitexttonovelmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res aitexttonovelmod.AiTextToNovel, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.AiTextToNovel, id.Hex()).ResBind(&res).Cache(aitexttonovelmod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []aitexttonovelmod.AiTextToNovel, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.AiTextToNovel+"-all").ResBind(&res).Cache(aitexttonovelmod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data aitexttonovelmod.AiTextToNovel) (primitive.ObjectID, error) {
newID, err := aitexttonovelmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.AiTextToNovel).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := aitexttonovelmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.AiTextToNovel).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = aitexttonovelmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.AiTextToNovel).AutoClear(true, &all)
return
}
+49
View File
@@ -0,0 +1,49 @@
package aitexttonoveldata
import "91porn-server/models/v/aitexttonovelmod"
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []aitexttonovelmod.AiTextToNovel) (res []*aitexttonovelmod.AiTextToNovel) {
res = make([]*aitexttonovelmod.AiTextToNovel, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item aitexttonovelmod.AiTextToNovel) (res *aitexttonovelmod.AiTextToNovel) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &aitexttonovelmod.AiTextToNovel{
ID: item.ID,
UID: item.UID,
Description: item.Description,
Content: item.Content,
Status: item.Status,
CharacterSetting: item.CharacterSetting,
LocationScene: item.LocationScene,
Details: item.Details,
ModelType: item.ModelType,
Coin: item.Coin,
DebitAmountCoin: item.DebitAmountCoin,
DebitIncomeCoin: item.DebitIncomeCoin,
IsFreeTimes: item.IsFreeTimes,
IsHide: item.IsHide,
Remark: item.Remark,
IsDelete: item.IsDelete,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+73
View File
@@ -0,0 +1,73 @@
package bannerjumpdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/bannerjumpmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []bannerjumpmod.BannerJump
Count int64
HasNext bool
}
// GetAllFromCache 获取所有数据
func GetAllFromCache() (res []bannerjumpmod.BannerJump, err error) {
t := time.Now()
cond := bson.M{"enable": true, "startAt": bson.M{"$lte": t}, "endAt": bson.M{"$gt": t}}
sort := bson.D{{"weight", -1}, {"createdAt", -1}}
_, err = cachev2.Classes().CacheTime(8*time.Minute).AutoListKey(models.BannerJump+"-all").ResBind(&res).Cache(bannerjumpmod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data bannerjumpmod.BannerJump) (primitive.ObjectID, error) {
newID, err := bannerjumpmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.BannerJump).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := bannerjumpmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.BannerJump).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = bannerjumpmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.BannerJump).AutoClear(true, &all)
return
}
+43
View File
@@ -0,0 +1,43 @@
package imgroupdata
import (
"91porn-server/models/v/imgroupmod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []imgroupmod.ImGroup) (res []*imgroupmod.ImGroupInfo) {
res = make([]*imgroupmod.ImGroupInfo, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item imgroupmod.ImGroup) (res *imgroupmod.ImGroupInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &imgroupmod.ImGroupInfo{
ID: item.ID,
GroupId: item.GroupId,
Name: item.Name,
Cover: item.Cover,
Summary: item.Summary,
MemberNum: item.MemberNum,
FakeMemberNum: item.FakeMemberNum,
Price: item.Price,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package imgroupdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/imgroupmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []imgroupmod.ImGroup
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]imgroupmod.ImGroup, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.ImGroup).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = imgroupmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res imgroupmod.ImGroup, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.ImGroup, id.Hex()).ResBind(&res).Cache(imgroupmod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []imgroupmod.ImGroup, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.ImGroup+"-all").ResBind(&res).Cache(imgroupmod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data imgroupmod.ImGroup) (primitive.ObjectID, error) {
newID, err := imgroupmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.ImGroup).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := imgroupmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.ImGroup).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = imgroupmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.ImGroup).AutoClear(true, &all)
return
}
+37
View File
@@ -0,0 +1,37 @@
package imgroupmemberdata
import (
"91porn-server/models/v/imgroupmembermod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []imgroupmembermod.ImGroupMember) (res []*imgroupmembermod.ImGroupMemberInfo) {
res = make([]*imgroupmembermod.ImGroupMemberInfo, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item imgroupmembermod.ImGroupMember) (res *imgroupmembermod.ImGroupMemberInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &imgroupmembermod.ImGroupMemberInfo{
ID: item.ID,
Uid: item.Uid,
Price: item.Price,
CreatedAt: item.CreatedAt,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package imgroupmemberdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/imgroupmembermod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []imgroupmembermod.ImGroupMember
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]imgroupmembermod.ImGroupMember, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.ImGroupMember).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = imgroupmembermod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res imgroupmembermod.ImGroupMember, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.ImGroupMember, id.Hex()).ResBind(&res).Cache(imgroupmembermod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []imgroupmembermod.ImGroupMember, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.ImGroupMember+"-all").ResBind(&res).Cache(imgroupmembermod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data imgroupmembermod.ImGroupMember) (primitive.ObjectID, error) {
newID, err := imgroupmembermod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.ImGroupMember).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := imgroupmembermod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.ImGroupMember).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = imgroupmembermod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.ImGroupMember).AutoClear(true, &all)
return
}
+52
View File
@@ -0,0 +1,52 @@
package immessagedata
import (
"91porn-server/app/service/vidhelpser"
"91porn-server/models/v/immessagemod"
"91porn-server/models/v/vidmod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []immessagemod.ImMessage) (res []*immessagemod.ImMessageInfo) {
res = make([]*immessagemod.ImMessageInfo, len(origin))
if len(origin) == 0 {
return
}
// 获取用户数据
uids := []uint64{}
for _, item := range origin {
uids = append(uids, item.Uid)
}
userMap := vidhelpser.GetSimpleUserMapNoUID(uids)
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item, userMap)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item immessagemod.ImMessage, userMap map[uint64]*vidmod.Publisher) (res *immessagemod.ImMessageInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &immessagemod.ImMessageInfo{
ID: item.ID,
GroupId: item.GroupId,
Uid: item.Uid,
Content: item.Content,
Image: item.Image,
CreatedAt: item.CreatedAt,
}
if userMap != nil {
user, ok := userMap[item.Uid]
if ok && user != nil {
res.Name = user.Name
res.Gender = user.Gender
res.Portrait = user.Portrait
}
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package immessagedata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/immessagemod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []immessagemod.ImMessage
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]immessagemod.ImMessage, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.ImMessage).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = immessagemod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res immessagemod.ImMessage, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.ImMessage, id.Hex()).ResBind(&res).Cache(immessagemod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []immessagemod.ImMessage, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.ImMessage+"-all").ResBind(&res).Cache(immessagemod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data immessagemod.ImMessage) (primitive.ObjectID, error) {
newID, err := immessagemod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.ImMessage).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := immessagemod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.ImMessage).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = immessagemod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.ImMessage).AutoClear(true, &all)
return
}
+116
View File
@@ -0,0 +1,116 @@
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
}
+110
View File
@@ -0,0 +1,110 @@
package mediabookshelfdata
import (
"fmt"
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/mediabookshelfmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func getKey(uid uint64) string {
return fmt.Sprintf("%s-%d", models.MediaBookshelf, uid)
}
type ListRes struct {
List []mediabookshelfmod.MediaBookshelf
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(uid uint64, cond bson.M, skip, limit int64, sort bson.D) ([]mediabookshelfmod.MediaBookshelf, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(getKey(uid)).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = mediabookshelfmod.GetList(cond, skip, limit, sort)
return
}
func GetInfoByCond(cond bson.M) (mediabookshelfmod.MediaBookshelf, error) {
return mediabookshelfmod.GetInfoByCond(cond)
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, uid uint64, data mediabookshelfmod.MediaBookshelf) (primitive.ObjectID, error) {
newID, err := mediabookshelfmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(getKey(uid)).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := mediabookshelfmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.MediaBookshelf).AutoClear(true, nil)
return affect, err
}
// DeleteDataByCond 删除数据
func DeleteDataByCond(t *db.MongoTool, uid uint64, cond bson.M) (err error) {
err = mediabookshelfmod.DeleteByCond(t, cond)
if err != nil {
return
}
// 清理缓存
_, _ = cachev2.Classes().Table(getKey(uid)).AutoClear(true, nil)
return
}
// DeleteDataByIds 删除数据
func DeleteDataByIds(t *db.MongoTool, uid uint64, ids []primitive.ObjectID) (err error) {
err = mediabookshelfmod.DeleteByIDS(t, uid, ids)
if err != nil {
return
}
// 清理缓存
_, _ = cachev2.Classes().Table(getKey(uid)).AutoClear(true, nil)
return
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = mediabookshelfmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.MediaBookshelf).AutoClear(true, &all)
return
}
+37
View File
@@ -0,0 +1,37 @@
package mediacontentdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/models"
"91porn-server/models/v/mediacontentmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []mediacontentmod.MediaContent
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]mediacontentmod.MediaContent, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.MediaContent).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = mediacontentmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res mediacontentmod.MediaContent, err error) {
_, err = cachev2.Classes().CacheTime(10*time.Minute).AutoInfoKey(models.MediaContent, id.Hex()).ResBind(&res).Cache(mediacontentmod.GetInfo, id, true)
return
}
+37
View File
@@ -0,0 +1,37 @@
package mediadata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/models"
"91porn-server/models/v/mediamod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []*mediamod.Media
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]*mediamod.Media, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.Media).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.HasNext, err = mediamod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res mediamod.Media, err error) {
_, err = cachev2.Classes().CacheTime(5*time.Minute).AutoInfoKey(models.Media, id.Hex()).ResBind(&res).Cache(mediamod.GetInfo, id)
return
}
+94
View File
@@ -0,0 +1,94 @@
package mediatagdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/mediatagmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []mediatagmod.MediaTag
Count int64
HasNext bool
}
// GetTagIdsByNameFromCache 通过名字获取标签id
func GetTagIdsByNameFromCache(name string) (ids []primitive.ObjectID, err error) {
_, err = cachev2.Classes().CacheTime(300*time.Second).AutoListKey(models.MediaTag).ResBind(&ids).Cache(mediatagmod.FindTagIdsByName, name)
return
}
// GetTagByNameFromCache 通过名字获取标签id
func GetTagByNameFromCache(name string) (tag mediatagmod.MediaTag, err error) {
_, err = cachev2.Classes().CacheTime(300*time.Second).AutoListKey(models.MediaTag).ResBind(&tag).Cache(mediatagmod.FindOneTagByName, name)
return tag, err
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]mediatagmod.MediaTag, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(3600*time.Second).AutoListKey(models.MediaTag).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = mediatagmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res mediatagmod.MediaTag, err error) {
_, err = cachev2.Classes().CacheTime(7200*time.Second).AutoInfoKey(models.MediaTag, id.Hex()).ResBind(&res).Cache(mediatagmod.GetInfo, id)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data mediatagmod.MediaTag) (primitive.ObjectID, error) {
newID, err := mediatagmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.MediaTag).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := mediatagmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.MediaTag).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = mediatagmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.MediaTag).AutoClear(true, &all)
return
}
+82
View File
@@ -0,0 +1,82 @@
package mediatagdimensiondata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/mediatagdimensionmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []mediatagdimensionmod.MediaTagDimension
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]mediatagdimensionmod.MediaTagDimension, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(3600*time.Second).AutoListKey(models.MediaTagDimension).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = mediatagdimensionmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res mediatagdimensionmod.MediaTagDimension, err error) {
_, err = cachev2.Classes().CacheTime(7200*time.Second).AutoInfoKey(models.MediaTagDimension, id.Hex()).ResBind(&res).Cache(mediatagdimensionmod.GetInfo, id)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data mediatagdimensionmod.MediaTagDimension) (primitive.ObjectID, error) {
newID, err := mediatagdimensionmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.MediaTagDimension).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := mediatagdimensionmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.MediaTagDimension).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = mediatagdimensionmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.MediaTagDimension).AutoClear(true, &all)
return
}
+74
View File
@@ -0,0 +1,74 @@
package nakedchatdata
import (
"91porn-server/models/v/nakedchatmod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []nakedchatmod.NakedChat) (res []*nakedchatmod.NakedChatSimple) {
res = make([]*nakedchatmod.NakedChatSimple, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppSimpleData(item)
}
return
}
// FormatAppSimpleData 格式化app数据
func FormatAppSimpleData(item nakedchatmod.NakedChat) (res *nakedchatmod.NakedChatSimple) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &nakedchatmod.NakedChatSimple{
ID: item.ID,
Title: item.Title,
Cover: item.Cover,
Price: item.Price,
Age: item.Age,
Weight: item.Weight,
Height: item.Height,
Cup: item.Cup,
SaleNum: item.SaleNum + item.FakeSaleNum,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item nakedchatmod.NakedChat) (res *nakedchatmod.NakedChatInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &nakedchatmod.NakedChatInfo{
ID: item.ID,
Title: item.Title,
Cover: item.Cover,
Price: item.Price,
Options: item.Options,
Images: item.Images,
Video: item.Video,
Contact: item.Contact,
Age: item.Age,
Weight: item.Weight,
Height: item.Height,
Cup: item.Cup,
SaleNum: item.SaleNum + item.FakeSaleNum,
BusinessHours: item.BusinessHours,
Summary: item.Summary,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package nakedchatdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/nakedchatmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []nakedchatmod.NakedChat
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]nakedchatmod.NakedChat, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.NakedChat).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = nakedchatmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res nakedchatmod.NakedChat, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.NakedChat, id.Hex()).ResBind(&res).Cache(nakedchatmod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []nakedchatmod.NakedChat, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.NakedChat+"-all").ResBind(&res).Cache(nakedchatmod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data nakedchatmod.NakedChat) (primitive.ObjectID, error) {
newID, err := nakedchatmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.NakedChat).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := nakedchatmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.NakedChat).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = nakedchatmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.NakedChat).AutoClear(true, &all)
return
}
+44
View File
@@ -0,0 +1,44 @@
package nakedchatorderdata
import (
"91porn-server/models/v/nakedchatordermod"
)
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []nakedchatordermod.NakedChatOrder) (res []*nakedchatordermod.NakedChatOrderInfo) {
res = make([]*nakedchatordermod.NakedChatOrderInfo, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppData(item)
}
return
}
// FormatAppData 格式化app数据
func FormatAppData(item nakedchatordermod.NakedChatOrder) (res *nakedchatordermod.NakedChatOrderInfo) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &nakedchatordermod.NakedChatOrderInfo{
ID: item.ID,
Nid: item.Nid,
Uid: item.Uid,
UserContact: item.UserContact,
Num: item.Num,
Price: item.Price,
Amount: item.Amount,
Remark: item.Remark,
Status: item.Status,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package nakedchatorderdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/nakedchatordermod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []nakedchatordermod.NakedChatOrder
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]nakedchatordermod.NakedChatOrder, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.NakedChatOrder).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = nakedchatordermod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res nakedchatordermod.NakedChatOrder, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.NakedChatOrder, id.Hex()).ResBind(&res).Cache(nakedchatordermod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []nakedchatordermod.NakedChatOrder, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.NakedChatOrder+"-all").ResBind(&res).Cache(nakedchatordermod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data nakedchatordermod.NakedChatOrder) (primitive.ObjectID, error) {
newID, err := nakedchatordermod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.NakedChatOrder).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := nakedchatordermod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.NakedChatOrder).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = nakedchatordermod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.NakedChatOrder).AutoClear(true, &all)
return
}
+85
View File
@@ -0,0 +1,85 @@
package quicksearchdata
import (
"91porn-server/models/v/quicksearchmod"
)
// AppData 需要组装返回的数据
type AppData struct {
BaseInfo *quicksearchmod.QuickSearchInfo `json:"baseInfo"` // 基础信息
}
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []quicksearchmod.QuickSearch) (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 quicksearchmod.QuickSearch) (res AppData) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res.BaseInfo = &quicksearchmod.QuickSearchInfo{
ID: item.ID,
Enabled: item.Enabled,
Title: item.Title,
SearchKeyword: item.SearchKeyword,
Link: item.Link,
Type: item.Type,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
// AppSimpleData 仅返回基础数据
type AppSimpleData *quicksearchmod.QuickSearchInfo
// FormatAppSimpleDataList 格式化app列表数据
func FormatAppSimpleDataList(origin []quicksearchmod.QuickSearch) (res []AppSimpleData) {
res = make([]AppSimpleData, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppSimpleData(item)
}
return
}
// FormatAppSimpleData 格式化app数据
func FormatAppSimpleData(item quicksearchmod.QuickSearch) (res AppSimpleData) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &quicksearchmod.QuickSearchInfo{
ID: item.ID,
Enabled: item.Enabled,
Title: item.Title,
SearchKeyword: item.SearchKeyword,
Link: item.Link,
Type: item.Type,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
return
}
+89
View File
@@ -0,0 +1,89 @@
package quicksearchdata
import (
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/quicksearchmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []quicksearchmod.QuickSearch
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]quicksearchmod.QuickSearch, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.QuickSearch).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = quicksearchmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res quicksearchmod.QuickSearch, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.QuickSearch, id.Hex()).ResBind(&res).Cache(quicksearchmod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M) (res []quicksearchmod.QuickSearch, err error) {
_, err = cachev2.Classes().CacheTime(3*time.Minute).AutoListKey(models.QuickSearch+"-all").ResBind(&res).Cache(quicksearchmod.GetAll, cond)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data quicksearchmod.QuickSearch) (primitive.ObjectID, error) {
newID, err := quicksearchmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.QuickSearch).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := quicksearchmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.QuickSearch).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = quicksearchmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.QuickSearch).AutoClear(true, &all)
return
}
+89
View File
@@ -0,0 +1,89 @@
package signrecorddata
import (
"91porn-server/models/v/signrecordmod"
)
// AppData 需要组装返回的数据
type AppData struct {
BaseInfo *signrecordmod.SignRecordInfo `json:"baseInfo"` // 基础信息
}
// FormatAppDataList 格式化app列表数据
func FormatAppDataList(origin []signrecordmod.SignRecord) (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 signrecordmod.SignRecord) (res AppData) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res.BaseInfo = &signrecordmod.SignRecordInfo{
ID: item.ID,
PID: item.PID,
UID: item.UID,
TotalDays: item.TotalDays,
CurrentSignDays: item.CurrentSignDays,
ForgetSignDays: item.ForgetSignDays,
RenewalSignDays: item.RenewalSignDays,
SignTime: item.SignTime,
CreatedAt: item.CreatedAt,
UpdateTime: item.UpdateTime,
}
return
}
// AppSimpleData 仅返回基础数据
type AppSimpleData *signrecordmod.SignRecordInfo
// FormatAppSimpleDataList 格式化app列表数据
func FormatAppSimpleDataList(origin []signrecordmod.SignRecord) (res []AppSimpleData) {
res = make([]AppSimpleData, len(origin))
if len(origin) == 0 {
return
}
// 组装返回数据
for i, item := range origin {
res[i] = FormatAppSimpleData(item)
}
return
}
// FormatAppSimpleData 格式化app数据
func FormatAppSimpleData(item signrecordmod.SignRecord) (res AppSimpleData) {
if item.ID.IsZero() {
return
}
// 组装返回数据
res = &signrecordmod.SignRecordInfo{
ID: item.ID,
PID: item.PID,
UID: item.UID,
TotalDays: item.TotalDays,
CurrentSignDays: item.CurrentSignDays,
ForgetSignDays: item.ForgetSignDays,
RenewalSignDays: item.RenewalSignDays,
SignTime: item.SignTime,
CreatedAt: item.CreatedAt,
UpdateTime: item.UpdateTime,
}
return
}
+88
View File
@@ -0,0 +1,88 @@
package signrecorddata
import (
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/models"
"91porn-server/models/v/signrecordmod"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ListRes struct {
List []signrecordmod.SignRecord
Count int64
HasNext bool
}
// GetListFromCache 从缓存获取列表数据
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]signrecordmod.SignRecord, int64, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.SignRecord).ResBind(&data).Cache(GetListData, cond, skip, limit, sort)
return data.List, data.Count, data.HasNext, err
}
// GetListData 获取列表数据并组装适合缓存格式返回
func GetListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
res.List, res.Count, res.HasNext, err = signrecordmod.GetList(cond, skip, limit, sort)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res signrecordmod.SignRecord, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoInfoKey(models.SignRecord, id.Hex()).ResBind(&res).Cache(signrecordmod.GetInfo, id)
return
}
// GetAllFromCache 获取所有数据
func GetAllFromCache(cond bson.M, sort bson.D) (res []signrecordmod.SignRecord, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.SignRecord+"-all").ResBind(&res).Cache(signrecordmod.GetAll, cond, sort)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data signrecordmod.SignRecord) (primitive.ObjectID, error) {
newID, err := signrecordmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
_, err = cachev2.Classes().Table(models.SignRecord).AutoClear(true, nil)
if err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := signrecordmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
// 清理缓存
_, _ = cachev2.Classes().Table(models.SignRecord).AutoClear(true, &id)
return affect, err
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = signrecordmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
all := "*"
_, _ = cachev2.Classes().Table(models.SignRecord).AutoClear(true, &all)
return
}
+161
View File
@@ -0,0 +1,161 @@
package sysconfdata
import (
"strconv"
"time"
"91porn-server/common/cachev2"
"91porn-server/common/db"
"91porn-server/common/localcache"
"91porn-server/models"
"91porn-server/models/v/sysconfmod"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// GetIntsFromSharedCache reads integer settings from the shared cache without
// the process-local one-minute layer, so management changes take effect at once.
func GetIntsFromSharedCache(defaults map[sysconfmod.VCode]int) (map[sysconfmod.VCode]int, error) {
configure, err := getAllFromSharedCache()
if err != nil {
return nil, err
}
values := make(map[sysconfmod.VCode]int, len(defaults))
for code, fallback := range defaults {
values[code] = fallback
if raw, ok := configure[string(code)]; ok {
if parsed, parseErr := strconv.Atoi(raw); parseErr == nil {
values[code] = parsed
}
}
}
return values, nil
}
const (
tmpLocalCacheKey = "AllSysConfTmpKey"
// DefaultTotalWatchCount preserves the legacy free-trial behavior when the
// shared configuration is absent or temporarily unavailable.
DefaultTotalWatchCount uint64 = 3
)
// GetAllFromCache 获取全部配置项
func GetAllFromCache() (res sysconfmod.ConfMap, err error) {
// 频繁访问 从本地进程内缓存中获取,对象不存在则从redis中获取
r, _ := localcache.C.Get(tmpLocalCacheKey)
if r != nil {
return r.(sysconfmod.ConfMap), nil
}
defer func() {
localcache.C.Set(tmpLocalCacheKey, res, 1*time.Minute)
}()
return getAllFromSharedCache()
}
// GetTotalWatchCount returns the configured non-VIP free-trial count from the
// existing bounded configuration cache and falls back to the legacy default.
func GetTotalWatchCount() uint64 {
configure, err := GetAllFromCache()
if err != nil {
return DefaultTotalWatchCount
}
return totalWatchCount(configure)
}
func totalWatchCount(configure sysconfmod.ConfMap) uint64 {
raw, ok := configure[string(sysconfmod.VCodeTotalWatchCount)]
if !ok {
return DefaultTotalWatchCount
}
value, err := strconv.ParseUint(raw, 10, 64)
if err != nil {
return DefaultTotalWatchCount
}
return value
}
func getAllFromSharedCache() (res sysconfmod.ConfMap, err error) {
_, err = cachev2.Classes().CacheTime(5 * time.Minute).AutoListKey(models.SysConf).ResBind(&res).Cache(sysconfmod.GetAllConfig)
return
}
// GetBoolFromSharedCache 绕过进程内缓存读取布尔配置,后台修改并清理 Redis 后可立即生效。
func GetBoolFromSharedCache(code sysconfmod.VCode) (bool, error) {
values, err := GetBoolsFromSharedCache(code)
if err != nil {
return false, err
}
return values[code], nil
}
// GetBoolsFromSharedCache reads several switches from one shared-cache
// snapshot. This keeps request paths that need related switches from fetching
// and decoding the same configuration map repeatedly.
func GetBoolsFromSharedCache(codes ...sysconfmod.VCode) (map[sysconfmod.VCode]bool, error) {
configure, err := getAllFromSharedCache()
if err != nil {
return nil, err
}
values := make(map[sysconfmod.VCode]bool, len(codes))
for _, code := range codes {
if _, exists := configure[string(code)]; !exists {
continue
}
values[code] = configure.GetBool(code)
}
return values, nil
}
func clearAllCache() error {
localcache.C.Delete(tmpLocalCacheKey)
_, err := cachev2.Classes().AutoListKey(models.SysConf).DeleteCurrent()
return err
}
// GetByGpCodeFromCache 获取分组配置数据
func GetByGpCodeFromCache(code sysconfmod.GPCode) (res sysconfmod.ConfMap, err error) {
_, err = cachev2.Classes().CacheTime(30*time.Minute).AutoListKey(models.SysConf).ResBind(&res).Cache(sysconfmod.GetByGpCode, code)
return
}
// InsertData 插入数据
func InsertData(t *db.MongoTool, data sysconfmod.SysConf) (primitive.ObjectID, error) {
newID, err := sysconfmod.Insert(t, data)
if err != nil {
return newID, err
}
// 清除缓存数据
if err = clearAllCache(); err != nil {
return newID, err
}
return newID, nil
}
// UpdateData 更新数据
func UpdateData(t *db.MongoTool, id string, data map[string]interface{}) (int64, error) {
objID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return 0, err
}
affect, err := sysconfmod.UpdateByID(t, objID, data)
if err != nil {
return 0, err
}
if err = clearAllCache(); err != nil {
return affect, err
}
return affect, nil
}
// DeleteData 删除数据
func DeleteData(t *db.MongoTool, id primitive.ObjectID) (err error) {
err = sysconfmod.DeleteByID(t, id)
if err != nil {
return
}
// 清理缓存
return clearAllCache()
}
+27
View File
@@ -0,0 +1,27 @@
package sysconfdata
import (
"testing"
"91porn-server/models/v/sysconfmod"
)
func TestTotalWatchCount(t *testing.T) {
tests := []struct {
name string
config sysconfmod.ConfMap
want uint64
}{
{name: "configured", config: sysconfmod.ConfMap{string(sysconfmod.VCodeTotalWatchCount): "5"}, want: 5},
{name: "zero is allowed", config: sysconfmod.ConfMap{string(sysconfmod.VCodeTotalWatchCount): "0"}, want: 0},
{name: "missing", config: sysconfmod.ConfMap{}, want: DefaultTotalWatchCount},
{name: "invalid", config: sysconfmod.ConfMap{string(sysconfmod.VCodeTotalWatchCount): "invalid"}, want: DefaultTotalWatchCount},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := totalWatchCount(tt.config); got != tt.want {
t.Fatalf("totalWatchCount() = %d, want %d", got, tt.want)
}
})
}
}
Vendored Executable
+36
View File
@@ -0,0 +1,36 @@
package viddata
import (
"91porn-server/common/cachev2"
"91porn-server/models"
"91porn-server/models/v/vidmod"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
"time"
"go.mongodb.org/mongo-driver/bson"
)
type ListRes struct {
List []*vidmod.VideoModel
HasNext bool
}
func GetListFromCache(cond bson.M, skip, limit int64, sort bson.D) ([]*vidmod.VideoModel, bool, error) {
var data ListRes
_, err := cachev2.Classes().CacheTime(10*time.Minute).AutoListKey(models.VideoInfo).ResBind(&data).Cache(getListData, cond, skip, limit, sort)
return data.List, data.HasNext, err
}
// getListData 获取列表数据并组装适合缓存格式返回
func getListData(cond bson.M, skip, limit int64, sort bson.D) (res ListRes, err error) {
opt := options.Find().SetLimit(limit).SetSkip(skip).SetSort(sort)
res.List, res.HasNext, err = vidmod.FindList(cond, opt)
return
}
// GetInfoFromCache 获取数据详情
func GetInfoFromCache(id primitive.ObjectID) (res vidmod.VideoModel, err error) {
_, err = cachev2.Classes().CacheTime(5*time.Minute).AutoInfoKey(models.VideoInfo, id.Hex()).ResBind(&res).Cache(vidmod.GetVideoInfo, id.Hex())
return
}