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
+116
View File
@@ -0,0 +1,116 @@
package hevctaskmod
import (
"fmt"
"strings"
"time"
"unicode/utf8"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/models"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
const (
table = models.HevcTask
maxErrorMsgLen = 2048
)
var mdb *db.MongoDB
func coll(t *db.MongoTool) *db.MongoTool {
if t == nil {
return mdb.Coll(table)
}
return t.Coll(table)
}
func Init() {
mdb = db.Init(table)
initIndex()
}
func initIndex() {
indexes := []mongo.IndexModel{
{
Keys: bson.D{{Key: "videoId", Value: 1}},
Options: options.Index().SetUnique(true),
},
{
Keys: bson.D{{Key: "status", Value: 1}, {Key: "updatedAt", Value: -1}},
},
}
if _, err := coll(nil).CreateIndex(indexes); err != nil {
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
}
}
// Upsert 按视频 ID 写入或更新一条转码任务。
func Upsert(videoID primitive.ObjectID, videoName, submitURL, fileID, h265URL string, status H265TaskStatus) error {
return UpsertWithError(videoID, videoName, submitURL, fileID, h265URL, status, "")
}
// UpsertWithError 更新转码任务并记录最近一次错误。
func UpsertWithError(videoID primitive.ObjectID, videoName, submitURL, fileID, h265URL string, status H265TaskStatus, errorMsg string) error {
now := time.Now()
set := bson.M{
"videoName": videoName,
"submitUrl": submitURL,
"status": status,
"updatedAt": now,
}
unset := bson.M{}
if fileID != "" {
set["fileId"] = fileID
}
if h265URL != "" {
set["h265Url"] = h265URL
}
errorMsg = truncateErrorMsg(errorMsg)
if errorMsg != "" {
set["errorMsg"] = errorMsg
} else {
unset["errorMsg"] = ""
}
update := bson.M{
"$set": set,
"$setOnInsert": bson.M{"videoId": videoID, "createdAt": now},
}
if len(unset) > 0 {
update["$unset"] = unset
}
if _, err := coll(nil).UpsertOne(bson.M{"videoId": videoID}, update); err != nil {
log.Warn("H265 task upsert failed", log.Any("videoId", videoID), log.E(err))
return err
}
return nil
}
func truncateErrorMsg(errorMsg string) string {
errorMsg = strings.TrimSpace(errorMsg)
if len(errorMsg) <= maxErrorMsgLen {
return errorMsg
}
cut := maxErrorMsgLen
for cut > 0 && !utf8.ValidString(errorMsg[:cut]) {
cut--
}
return errorMsg[:cut]
}
// UpdateStatus 只更新已有任务的状态。
func UpdateStatus(videoID primitive.ObjectID, status H265TaskStatus) error {
if _, err := coll(nil).UpdateOne(bson.M{"videoId": videoID}, bson.M{"$set": bson.M{
"status": status,
"updatedAt": time.Now(),
}}); err != nil {
log.Warn("H265 task status update failed", log.Any("videoId", videoID), log.E(err))
return err
}
return nil
}
+33
View File
@@ -0,0 +1,33 @@
package hevctaskmod
import (
"time"
"91porn-server/models/v/vidmod"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// H265TaskStatus 与 video_info.h265Status 使用相同的状态值。
type H265TaskStatus = vidmod.H265Status
const (
H265TaskStatusFailed H265TaskStatus = vidmod.H265StatusFailed
H265TaskStatusQueued H265TaskStatus = vidmod.H265StatusQueued
H265TaskStatusProcessing H265TaskStatus = vidmod.H265StatusPending
H265TaskStatusSuccess H265TaskStatus = vidmod.H265StatusSuccess
)
// H265Task 记录视频最近一次 H.265 云转码处理状态。
type H265Task struct {
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
VideoID primitive.ObjectID `json:"videoId" bson:"videoId"`
VideoName string `json:"videoName" bson:"videoName"`
SubmitURL string `json:"submitUrl" bson:"submitUrl"`
FileID string `json:"fileId" bson:"fileId,omitempty"`
H265Url string `json:"h265Url" bson:"h265Url,omitempty"`
ErrorMsg string `json:"errorMsg" bson:"errorMsg,omitempty"`
Status H265TaskStatus `json:"status" bson:"status"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
}