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
+840
View File
@@ -0,0 +1,840 @@
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())
}