Files
huangguo_server/web/api/vidctrl/vid.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

841 lines
30 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package vidctrl
import (
"91porn-server/models/v/export_task_mod"
"91porn-server/models/v/vidtimeonlinemod"
"encoding/json"
"fmt"
"time"
"91porn-server/common"
"91porn-server/common/constant"
"91porn-server/common/constant/redisconst"
"91porn-server/common/stderr"
"91porn-server/models/l/operatorlgmod"
"91porn-server/models/s/statrecordmod"
"91porn-server/models/v/operationlogmod"
"91porn-server/models/v/pushmod"
"91porn-server/models/v/tagmod"
"91porn-server/models/v/vidmod"
"91porn-server/models/v/vidpopmod"
"91porn-server/web/service/vidser"
"91porn-server/web/webg"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// GetVidList doc
// @Summary 获取视频列表
// @Description 根据各种条件获取视频的列表
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param pageNumber formData integer true "查询页码"
// @Param pageSize formData integer true "页码大小"
// @Param status formData integer true "是否通过审核,0 未审核 1通过 2审核失败 3视为免费 4所有 5非零"
// @Param key formData string true "查询的排序条件,createdAtplayCount"
// @Param value formData integer true "正序反序,-11"
// @Param isFree formData integer true "是否付费视频,0, 付费,1,免费, 2, 所有"
// @Param isUserUp formData integer true "是否用户上传,0, 所有,1,是, 2,否"
// @Param chosen formData integer true "是否精选 1精选 2未精选"
// @Param title formData string true "过滤标题"
// @Param uid formData string true "上传用户uid过滤"
// @Param start formData integer true "上传时间,开始范围,时间戳"
// @Param end formData integer true "上传时间,结束范围,时间戳"
// @Param sectionID formData string false "专题ID"
// @Param isSortedUnderModule formData string false "视频在专题下是否设置了排序"
// @Param seedLinkUrl formData string false "种子下载链接"
// @Param seedSize formData int false "种子影片大小"
// @Param seedPlayTime formData int false "种子影片时长"
// @Success 200 {object} vidmod.ListResp "{"msg": "操作成功"}"
// @Failure 400 {string} string "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/list [get]
func GetVidList(ctx *gin.Context) {
req := vidmod.ListReq{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
m, sort, err := assembleConditions(req)
if err != stderr.Success {
common.ServeJSON(ctx, err, err)
return
}
code, data := vidser.GetVidList(m, sort, req.PageNumber, req.PageSize, req.IsPush)
common.ServeJSON(ctx, code, data)
}
// GetVidList doc
// @Summary 导出视频列表
// @Description 根据各种条件导出视频的列表
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param status formData integer true "是否通过审核,0 未审核 1通过 2审核失败 3视为免费 4所有 5非零"
// @Param key formData string true "查询的排序条件,createdAtplayCount"
// @Param value formData integer true "正序反序,-11"
// @Param isFree formData integer true "是否付费视频,0, 付费,1,免费, 2, 所有"
// @Param isUserUp formData integer true "是否用户上传,0, 所有,1,是, 2,否"
// @Param chosen formData integer true "是否精选 1精选 2未精选"
// @Param title formData string true "过滤标题"
// @Param uid formData string true "上传用户uid过滤"
// @Param start formData integer true "上传时间,开始范围,时间戳"
// @Param end formData integer true "上传时间,结束范围,时间戳"
// @Param sectionID formData string false "专题ID"
// @Param isSortedUnderModule formData string false "视频在专题下是否设置了排序"
// @Success 200 {string} string "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/export [post]
func ExportVidList(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.ListReq{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
err = export_task_mod.CreateTask(export_task_mod.ExportVidTask, manager, req)
if err != nil {
common.ServeJSON(ctx, stderr.ErrExportFileFail, err)
return
}
common.ServeJSON(ctx, stderr.Success, "success")
//m, sort, err := assembleConditions(req)
//if err != stderr.Success {
// common.ServeJSON(ctx, err, err)
// return
//}
//buff, err := vidser.ExportVidList(m, sort)
//if err != stderr.Success {
// common.ServeJSON(ctx, err, err)
// return
//}
//common.ServeFile(ctx, "video-list", common.FileExcel, &buff)
}
func assembleConditions(req vidmod.ListReq) (m map[string]interface{}, sort vidser.SortModeList, err stderr.Code) {
sort = vidser.SortModeList{{Field: "createdAt", Value: -1}}
m = make(map[string]interface{})
if req.ShowType != nil {
m["showType"] = *req.ShowType
}
if req.Status != 4 {
if req.Status == 7 {
m["status"] = map[string]int{"$gt": 0}
} else {
m["status"] = req.Status
}
}
if req.IsFree == 0 {
m["coins"] = map[string]int{"$gt": 0}
}
if req.IsFree == 1 {
m["coins"] = map[string]int{"$eq": 0}
}
if req.IsUserUp == 2 {
m["publisherID"] = map[string]int{"$lt": 115000}
}
if req.IsUserUp == 1 {
m["publisherID"] = map[string]int{"$gt": 115000}
}
if len(req.Title) != 0 {
m["title"] = map[string]string{"$regex": req.Title, "$options": "i"}
}
if req.UID > 0 {
m["publisherID"] = req.UID
}
if req.Chosen == 1 {
m["chosen"] = true
}
if req.Chosen == 2 {
m["chosen"] = false
}
if req.FreeArea == 1 {
m["freeArea"] = true
}
if req.FreeArea == 2 {
m["freeArea"] = false
}
if !req.End.IsZero() {
m["createdAt"] = map[string]time.Time{"$gte": req.Start, "$lt": req.End}
}
if req.ReviewAccount != "" {
m["reviewAccount"] = req.ReviewAccount
}
if len(req.Tag) != 0 {
id, err := tagmod.GetTagIDByName(req.Tag)
if err != nil {
return m, sort, stderr.ErrDbQueryError
}
m["tags"] = id
//sort = vidser.SortModeList{{Field: "tagSort." + id.Hex(), Value: -1}, {Field: "createdAt", Value: -1}}
}
if len(req.ID) != 0 {
oid, err := primitive.ObjectIDFromHex(req.ID)
if err != nil {
return m, sort, stderr.ErrParamError
}
m["_id"] = oid
}
//通过初始价格判断是否是马甲账号
if req.IsPretendAcc == 1 {
m["coins"] = vidmod.PretendAccInitCoins
}
if req.IsPretendAcc == 2 {
//i := make(map[string]int64)
//i["$ne"] = vidmod.PretendAccInitCoins
m["coins"] = map[string]int64{"$ne": vidmod.PretendAccInitCoins}
}
m["deleteAt"] = bson.M{"$exists": false}
if req.NewsType != "" {
m["newsType"] = req.NewsType
}
if req.LiaoBaTop != nil {
if *req.LiaoBaTop {
sort = vidser.LiaoBaTopSortModeList()
m["liaoBaTopSort"] = bson.M{"$gt": 0}
} else {
m["liaoBaTopSort"] = 0
}
}
if req.SectionID != "" {
m["sectionID"] = req.SectionID
}
m["isSortedUnderModule"] = req.IsSortedUnderModule
if req.IsSortedUnderModule {
sort = nil
}
if req.IsRecommended != nil {
if *req.IsRecommended {
m["recoWeight"] = bson.M{"$gte": 0}
} else {
m["recoWeight"] = bson.M{"$lt": 0}
}
}
if req.Key == "likeRate" || req.Key == "purchaseRate" {
m[req.Key] = req.Value
}
if req.IsHappinessPlazaTop != nil && *req.IsHappinessPlazaTop {
if *req.IsHappinessPlazaTop {
m["happinessPlazaTop"] = bson.M{"$gt": 0}
} else {
m["happinessPlazaTop"] = bson.M{"$lte": 0}
}
}
return m, sort, stderr.Success
}
// GetVidListByIds doc
// @Summary 根据Ids获取视频列表
// @Description 根据各种条件获取视频的列表
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData array true "id数组"
// @Param token formData string true "token"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/listDetail [POST]
func ListDetail(ctx *gin.Context) {
var args struct {
IDs []string `json:"ids" form:"ids" binding:"required"`
Token string `json:"token" form:"token" binding:"required"`
}
if err := ctx.ShouldBind(&args); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
if args.Token != "q7ydjHVIVBYiTqQ&" {
common.ServeJSON(ctx, stderr.ErrNoToken, nil)
return
}
m := make(map[string]interface{})
i := make(map[string][]primitive.ObjectID)
i["$in"] = common.String2ObjectID(args.IDs)
m["_id"] = i
code, data := vidser.GetVidList(m, vidser.SortModeList{{Field: "createdAt", Value: 1}}, 1, 100, false)
common.ServeJSON(ctx, code, data)
}
// UpdateVidInfo doc
// @Summary 编辑视频信息
// @Description 编辑视频信息
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param id formData integer true "id"
// @Param uid formData integer true "用户ID"
// @Param title formData string true "视频标题"
// @Param tags formData array true "视频标签数组"
// @Param playTime formData string false "视频时长"
// @Param cover formData string false "封面图"
// @Param coverThumb formData string false "小图"
// @Param via formData string false "视频来源"
// @Param coins formData integer false "观看金币"
// @Param size formData integer false "文件大小"
// @Param mimeType formData string false "影片类型"
// @Param sourceURL formData string true "资源url"
// @Param sourceID formData string true "上传视频成功后 返回的ID"
// @Param filename formData string true "文件名"
// @Param resolution formData string false "分辨率"
// @Param md5 formData string true "文件摘要"
// @Param freeTime formData integer false "免费观影时长"
// @Param seedLinkUrl formData string false "种子下载链接"
// @Param seedSize formData integer false "种子影片大小"
// @Param seedPlayTime formData integer false "种子影片时长"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/update [post]
func UpdateVidInfo(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.EditReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.UpdateVidInfo(req, manager)
if code == stderr.Success {
_, _ = webg.Redis.Del(fmt.Sprintf(redisconst.VideoInfoKey(), req.ID))
}
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, data)
}
// DeleteVids doc
// @Summary 删除视频资源
// @Description 删除视频资源
// @Tags follow
// @Accept mpfd,json
// @Produce json,html
// @Param vids formData []string true "视频id数组"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/del [delete]
func DeleteVids(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.DeleteReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
ids, err := common.IDArray(req.IDs)
if err != nil {
common.ServeJSON(ctx, stderr.Failure, "")
return
}
for _, id := range ids {
if err = operationlogmod.Insert(operationlogmod.OperationLog{
ID: primitive.NewObjectID(),
OperationType: constant.Media_Del,
AfterContent: fmt.Sprintf("%v", id),
CreatedUser: manager,
}); err != nil {
common.ServeJSON(ctx, stderr.Failure, "")
return
}
}
code, data := vidser.DeleteManyByTTL(ids...)
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Delete, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, data)
}
// UpdateVids doc
// @Summary 批量更新视频状态
// @Description 批量更新视频状态
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "批量更新的视频id"
// @Param reco formData bool true "是否推荐, true:推荐,false:不推荐"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/batch/reco [post]
func BatchUpdateReco(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.BatchUpdateRecoRequest{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, err)
return
}
if err = vidser.BatchUpdateReco(req); err != nil {
common.ServeJSON(ctx, stderr.ErrDbInsertManyError, err)
return
}
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, stderr.Success, nil)
}
// UpdateVids doc
// @Summary 批量更新视频状态
// @Description 批量更新视频状态
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "批量更新的视频id"
// @Param field formData string true "更新的字段名"
// @Param status formData bool true "状态变更"
// @Param publisherID formData integer true "发布者id"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/batch/update [post]
func UpdateVids(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.EditManyReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.UpdateVids(req)
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, data)
}
// PassAndEditVids doc
// @Summary 批量更新视频状态
// @Description 批量更新视频状态
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "批量更新的视频id"
// @Param field formData string true "更新的字段名"
// @Param status formData bool true "状态变更"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/batch/edit [post]
func PassAndEditVids(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.PassManyReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.PassAndEditVids(req, manager)
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, data)
}
// PassVid doc
// @Summary 视频通过审核
// @Description 视频通过审核
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "通过审核的视频id"
// @Param pass formData integer true "是否通过审核"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/batch/pass [post]
func PassVid(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.BatchReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.PassVid(req, manager)
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, data)
}
// ViewVid doc
// @Summary 查看视频状态
// @Description 查看视频状态
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param id formData string true "查看视频id"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/view/:id [get]
func ViewVid(ctx *gin.Context) {
id := ctx.Param("id")
if id == "" {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.ViewVideoFromFs(id)
common.ServeJSON(ctx, code, data)
}
// PushVid doc
// @Summary 视频推送
// @Description 视频推送
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "通过审核的视频id"
// @Param pass formData integer true "是否通过审核"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/push [post]
func PushVid(ctx *gin.Context) {
req := pushmod.AddReq{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
//判断视频是否审核通过
status, err := vidmod.GetVidStatus(req.VideoID)
if err != nil {
common.ServeJSON(ctx, stderr.ErrDbQueryError, "")
return
}
if status != vidmod.CheckPass {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.PushVid(req)
common.ServeJSON(ctx, code, data)
}
// PushVidList doc
// @Summary 视频推送列表
// @Description 视频推送列表
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "通过审核的视频id"
// @Param pass formData integer true "是否通过审核"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/push/list [get]
func PushVidList(ctx *gin.Context) {
req := pushmod.ListReq{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.PushVidList(req)
common.ServeJSON(ctx, code, data)
}
// DeletePushVid doc
// @Summary 视频推送列表
// @Description 视频推送列表
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "通过审核的视频id"
// @Param pass formData integer true "是否通过审核"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/push/delete [delete]
func DeletePushVid(ctx *gin.Context) {
req := pushmod.DeleteReq{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.DeletePushVid(req.IDs)
common.ServeJSON(ctx, code, data)
}
// ConfigPopularity doc
// @Summary 配置视频热度计算方式
// @Description 配置视频热度计算方式
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param request body vidpopmod.VideoPopularityConfig true "request"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/popularity/config [POST]
func ConfigPopularity(ctx *gin.Context) {
req := vidpopmod.VideoPopularityConfig{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
for i := range req.PlayTimePercentage {
req.PlayTimePercentage[i].Max *= 60
req.PlayTimePercentage[i].Min *= 60
}
if err := vidpopmod.InsertOne(req); err != nil {
common.ServeJSON(ctx, stderr.ErrDbInsertError, err)
return
}
common.ServeJSON(ctx, stderr.Success, nil)
}
// GetPopularityConfig doc
// @Summary 获取视频热度计算方式
// @Description 获取视频热度计算方式
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Success 200 {object} vidpopmod.VideoPopularityConfig "Success"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/popularity/config [get]
func GetPopularityConfig(ctx *gin.Context) {
resp, err := vidpopmod.FindOne()
if err != nil {
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
return
}
common.ServeJSON(ctx, stderr.Success, resp)
}
func Reindex(ctx *gin.Context) {
if err := statrecordmod.DeleteStatRecordByName(statrecordmod.ElasticSyncVideoJob); err != nil {
common.ServeJSON(ctx, stderr.ErrDbDeleteError, err)
return
}
common.ServeJSON(ctx, stderr.Success, nil)
}
// Search doc
// @Summary 按照app搜索逻辑搜索视频
// @Description 按照app搜索逻辑搜索视频
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param request body vidmod.WebElasticSearchRequest true "request"
// @Success 200 {object} vidmod.WebElasticSearchResponse "Success"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/search [post]
func Search(ctx *gin.Context) {
req := vidmod.WebElasticSearchRequest{}
if err := ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, err)
return
}
res, err := vidmod.SearchWithTotal(req.Keyword, int64((req.PageNumber-1)*(req.PageSize)), int64(req.PageSize+1))
if err != nil {
common.ServeJSON(ctx, stderr.ErrInterServerError, err)
return
}
hasNext := false
if uint64(len(res.Hits)) > req.PageSize {
res.Hits = res.Hits[:req.PageSize]
hasNext = true
}
list := make([]vidmod.ESVideo, len(res.Hits))
for i := range res.Hits {
list[i] = res.Hits[i].Source
}
resp := vidmod.WebElasticSearchResponse{List: list, HasNext: hasNext, Total: res.Total.Value}
common.ServeJSON(ctx, stderr.Success, resp)
}
// BatchAudit doc
// @Summary 批量自动上架
// @Description 批量自动上架
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param vids formData []string true "帖子id"
// @Param sectionID formData string false "专题id"
// @Param onlineTime formData string false "上架时间"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/timeOnline/batchAudit [post]
func BatchAudit(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidtimeonlinemod.BatchAuditReq{}
err = ctx.ShouldBind(&req)
if err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.BatchAuditVidTimeOnlineInfo(req, -1, manager)
if code != stderr.Success {
common.ServeJSON(ctx, code, nil)
return
}
common.ServeJSON(ctx, code, data)
}
// GetTimeOnlineVidList doc
// @Summary 获取定时上线视频列表
// @Description 根据各种条件获取定时上线视频列表
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param uid formData string true "上传用户uid过滤"
// @Param pageNumber formData integer true "查询页码"
// @Param pageSize formData integer true "页码大小"
// @Success 200 {object} vidmod.ListResp "{"msg": "操作成功"}"
// @Failure 400 {string} string "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/timeOnline/list [get]
func GetTimeOnlineVidList(ctx *gin.Context) {
var req = vidtimeonlinemod.ListReq{}
err := ctx.ShouldBind(&req)
if err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.GetTimeOnlineVidList(&req)
common.ServeJSON(ctx, code, data)
}
// DeleteVids doc
// @Summary 删除准备自动上架视频
// @Description 删除准备自动上架视频
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "记录的id数组"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/timeOnline/del [post]
func DelVidTimeOnlines(ctx *gin.Context) {
req := vidtimeonlinemod.DeleteReq{}
err := ctx.ShouldBind(&req)
if err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
ids, err := common.IDArray(req.IDs)
if err != nil {
common.ServeJSON(ctx, stderr.Failure, "")
return
}
code := vidser.DeleteTimeOnlineVid(ids)
common.ServeJSON(ctx, code, nil)
}
// EditVidTimeOnlineInfo doc
// @Summary 修改自动上架视频信息
// @Description 修改自动上架视频信息
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param vidId formData string true "帖子id"
// @Param price formData int true "价格"
// @Param sectionID formData string false "专题id"
// @Param onlineTime formData string false "上架时间"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/timeOnline/edit [post]
func EditVidTimeOnlineInfo(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidtimeonlinemod.EditReq{}
err1 := ctx.ShouldBind(&req)
if err1 != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code, data := vidser.BatchAuditVidTimeOnlineInfo(vidtimeonlinemod.BatchAuditReq{
Vids: []primitive.ObjectID{req.VidId},
SectionID: req.SectionID,
OnlineTime: req.OnlineTime,
}, req.Price, manager)
if code != stderr.Success {
common.ServeJSON(ctx, code, nil)
return
}
common.ServeJSON(ctx, code, data)
}
// BatchUpdateVidNewsType doc
// @Summary 批量修改帖子类型
// @Description 批量修改帖子类型
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param q body vidmod.BatchUpdateVidNewsTypeReq false "请求参数"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/admin/vid/batch/newsType/update [post]
func BatchUpdateVidNewsType(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.BatchUpdateVidNewsTypeReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code := vidser.UpdateVidNewsType(req)
if code != stderr.Success {
common.ServeJSON(ctx, code, nil)
return
}
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, code.Msg())
}
// UpdateVidTags doc
// @Summary 批量修改视频标签
// @Description 批量修改视频标签
// @Tags vid
// @Accept mpfd,json
// @Produce json,html
// @Param ids formData []string true "批量修改的帖子id"
// @Param tags formData []string true "标签名称"
// @Param tagSort formData []string true "标签排序"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /api/web/vid/batch/update/tags [post]
func UpdateVidTags(ctx *gin.Context) {
manager, err := common.GetAdminAct(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.AdminIDErr, err.Error())
return
}
req := vidmod.EditVideTagsReq{}
if err = ctx.ShouldBind(&req); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
code := vidser.UpdateVidTags(req)
if code != stderr.Success {
common.ServeJSON(ctx, code, nil)
return
}
log, _ := json.Marshal(req)
_ = operatorlgmod.RecordOperation(manager, constant.VideoManageList, constant.Modify, string(log), ctx.Request.URL.RequestURI())
common.ServeJSON(ctx, code, code.Msg())
}