@@ -0,0 +1,94 @@
|
||||
package aichangefacemod
|
||||
|
||||
import (
|
||||
"91porn-server/common/aiService"
|
||||
"91porn-server/common/db"
|
||||
"91porn-server/models"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"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"
|
||||
)
|
||||
|
||||
var mdb *db.MongoDB
|
||||
|
||||
const table = models.AiChangeFace
|
||||
|
||||
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() {
|
||||
many := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{{Key: "uid", Value: 1}},
|
||||
},
|
||||
}
|
||||
if _, err := coll(nil).CreateIndex(many); err != nil {
|
||||
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
|
||||
}
|
||||
}
|
||||
|
||||
func AddAiChangeFace(t *db.MongoTool, orderId primitive.ObjectID, orderCreatedAt time.Time, uid uint64, pic []string, vidMod aiService.Template, coin, incomeCoin int64, discount []primitive.ObjectID, shareTitle string, shareStatus int) error {
|
||||
_, err := coll(t).InsertOne(AiChangeFace{
|
||||
ID: orderId,
|
||||
Uid: uid,
|
||||
Pic: pic,
|
||||
VidID: vidMod.ID,
|
||||
ModTitle: vidMod.Title,
|
||||
ModCover: vidMod.Cover,
|
||||
ModVideo: vidMod.M3u8Url,
|
||||
Coin: coin,
|
||||
IncomeCoin: incomeCoin,
|
||||
Discount: discount,
|
||||
Status: StatusGenning,
|
||||
IsHide: false,
|
||||
Cover: "",
|
||||
Url: "",
|
||||
ShareTitle: shareTitle,
|
||||
ShareStatus: shareStatus,
|
||||
CreatedAt: orderCreatedAt,
|
||||
UpdatedAt: orderCreatedAt,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func ListByUid(uid uint64, status *AiChangeFaceStatus, skip, limit int) ([]AiChangeFace, error) {
|
||||
var acfs []AiChangeFace
|
||||
opts := options.Find().SetSort(bson.D{{Key: "createdAt", Value: -1}})
|
||||
if skip > 0 {
|
||||
opts.SetSkip(int64(skip))
|
||||
}
|
||||
if limit > 0 {
|
||||
opts.SetLimit(int64(limit))
|
||||
}
|
||||
cond := bson.M{"uid": uid, "isHide": bson.M{"$in": []any{nil, false}}}
|
||||
if status != nil {
|
||||
cond["status"] = *status
|
||||
if *status == StatusGenning {
|
||||
cond["status"] = bson.M{"$in": []int{0, 2}}
|
||||
}
|
||||
}
|
||||
return acfs, coll(nil).Find(&acfs, cond, opts)
|
||||
}
|
||||
|
||||
func Hide(uid uint64, id primitive.ObjectID) error {
|
||||
_, err := coll(nil).UpdateOne(bson.M{"uid": uid, "_id": id}, bson.M{"$set": bson.M{"isHide": true}})
|
||||
return err
|
||||
}
|
||||
|
||||
func FindByID(t *db.MongoTool, id primitive.ObjectID) (*AiChangeFace, error) {
|
||||
var acf AiChangeFace
|
||||
return &acf, coll(t).FindOne(&acf, bson.M{"_id": id})
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package aichangefacemod
|
||||
|
||||
import "go.mongodb.org/mongo-driver/bson/primitive"
|
||||
|
||||
type GenerateRequest struct {
|
||||
Pic []string `json:"picture"` // 换脸照片
|
||||
VidModID primitive.ObjectID `json:"vidModId"` // 视频模版id
|
||||
Discount []primitive.ObjectID `json:"discount"` // 使用折扣券
|
||||
ShareTitle string `json:"shareTitle" bson:"shareTitle"` // 分享标题
|
||||
ShareStatus int `json:"shareStatus" bson:"shareStatus"` // 是否分享 0-不分享 1-分享
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package aichangefacemod
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type AiChangeFaceStatus int
|
||||
|
||||
const (
|
||||
StatusGenning AiChangeFaceStatus = 0 // 未完成
|
||||
StatusComplete AiChangeFaceStatus = 1 // 已完成
|
||||
StatusRefund AiChangeFaceStatus = -1 // 已退款
|
||||
StatusSubmit AiChangeFaceStatus = 2 // 已提交
|
||||
)
|
||||
|
||||
type AiChangeFace struct {
|
||||
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
|
||||
Uid uint64 `json:"uid" bson:"uid"` // 用户
|
||||
Pic []string `json:"picture" bson:"picture"` // 换脸照片
|
||||
VidID primitive.ObjectID `json:"vidId" bson:"vidId"` // 视频模版id
|
||||
ModTitle string `json:"modTitle" bson:"modTitle"` //模版标题
|
||||
ModCover string `json:"modCover" bson:"modCover"` //模版封面
|
||||
ModVideo string `json:"modVideo" bson:"modVideo"` //模版视频
|
||||
Coin int64 `json:"coin" bson:"coin"` // 普通金币数
|
||||
IncomeCoin int64 `json:"incomeCoin" bson:"imcomeCoin"` // 可提现金币数
|
||||
Status AiChangeFaceStatus `json:"status" bson:"status"` // 0 未完成; 1 已完成; -1 已退款
|
||||
Discount []primitive.ObjectID `json:"discount" bson:"discount"` // 抵扣券id
|
||||
IsHide bool `json:"-" bson:"isHide"` // 是否被用户隐藏(用户订单列表是否不显示)
|
||||
Cover string `json:"cover" bson:"cover"` // 换脸后封面大图
|
||||
Url string `json:"url" bson:"url"` // 换脸后视频地址
|
||||
Remark string `json:"remark" bson:"remark"` // 拒绝理由
|
||||
ShareTitle string `json:"shareTitle" bson:"shareTitle"` // 分享标题
|
||||
ShareStatus int `json:"shareStatus" bson:"shareStatus"` // 是否分享 0-不分享 1-分享
|
||||
Operator string `json:"operator" bson:"operator"` // 操作员
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"` // 刷新时间
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
package aichangefacemod
|
||||
|
||||
import (
|
||||
"91porn-server/common/db"
|
||||
"91porn-server/models/commod"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
type AiChangeFaceWebResp struct {
|
||||
ID primitive.ObjectID `json:"id"`
|
||||
Uid uint64 `json:"uid"` // 用户
|
||||
Pic []string `json:"picture"` // 换脸照片
|
||||
ModId primitive.ObjectID `json:"modId"` // 视频模版id
|
||||
ModUrl string `json:"modUrl"` // 视频模版播放地址url
|
||||
ModTitle string `json:"modTitle"` // 模版标题
|
||||
Coin int64 `json:"coin"` // 普通金币数
|
||||
IncomeCoin int64 `json:"incomeCoin"` // 可提现金币数
|
||||
Status AiChangeFaceStatus `json:"status"` // 0 未完成; 1 已完成; -1 已退款
|
||||
Cover string `json:"cover"` // 换脸后封面大图
|
||||
Url string `json:"url"` // 换脸后视频地址
|
||||
Remark string `json:"remark"` // 拒绝理由
|
||||
Operator string `json:"operator"` // 操作员
|
||||
CreatedAt time.Time `json:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `json:"updatedAt"` // 刷新时间
|
||||
}
|
||||
|
||||
type ListRequest struct {
|
||||
ID *string `form:"id" json:"id"`
|
||||
Uid *uint64 `form:"uid" json:"uid"`
|
||||
Status *AiChangeFaceStatus `form:"status" json:"status"`
|
||||
VidID *string `form:"vidId" json:"vidId"`
|
||||
commod.Page
|
||||
}
|
||||
|
||||
type EditAiChangeFace struct {
|
||||
ID primitive.ObjectID `json:"id" binding:"required"` // 被编辑的ai换脸id
|
||||
Status *AiChangeFaceStatus `json:"status"` // 0 未完成; 1 已完成; -1 已退款 2 已经提交
|
||||
Cover *string `json:"cover"` // 换脸后封面大图
|
||||
Url *string `json:"url"` // 换脸后视频地址
|
||||
Remark *string `json:"remark"` // 拒绝理由
|
||||
Title *string `json:"title"` // 标题
|
||||
}
|
||||
|
||||
func (receiver *EditAiChangeFace) Update(updateAct string) bson.M {
|
||||
var update = bson.M{}
|
||||
if receiver.Url != nil {
|
||||
update["url"] = receiver.Url
|
||||
}
|
||||
if receiver.Cover != nil {
|
||||
update["cover"] = receiver.Cover
|
||||
}
|
||||
if receiver.Status != nil {
|
||||
update["status"] = receiver.Status
|
||||
}
|
||||
if receiver.Remark != nil {
|
||||
update["remark"] = receiver.Remark
|
||||
}
|
||||
update["operator"] = updateAct
|
||||
update["updatedAt"] = time.Now()
|
||||
return bson.M{"$set": update}
|
||||
}
|
||||
|
||||
func WebList(id *primitive.ObjectID, uid *uint64, status *AiChangeFaceStatus, vidId *string, skip, limit int) ([]AiChangeFace, int64, error) {
|
||||
cond := bson.M{}
|
||||
if id != nil {
|
||||
cond["_id"] = *id
|
||||
}
|
||||
if uid != nil {
|
||||
cond["uid"] = *uid
|
||||
}
|
||||
if status != nil {
|
||||
cond["status"] = *status
|
||||
}
|
||||
if vidId != nil {
|
||||
vidObjId, _ := primitive.ObjectIDFromHex(*vidId)
|
||||
cond["vidId"] = vidObjId
|
||||
}
|
||||
count, err := coll(nil).Count(cond)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
var acfs []AiChangeFace
|
||||
opts := options.Find().SetSort(bson.D{{Key: "createdAt", Value: -1}})
|
||||
if skip > 0 {
|
||||
opts.SetSkip(int64(skip))
|
||||
}
|
||||
if limit > 0 {
|
||||
opts.SetLimit(int64(limit))
|
||||
}
|
||||
return acfs, count, coll(nil).Find(&acfs, cond, opts)
|
||||
}
|
||||
|
||||
func Update(t *db.MongoTool, id primitive.ObjectID, set bson.M) error {
|
||||
_, err := coll(t).UpdateOne(bson.M{"_id": id}, set)
|
||||
return err
|
||||
}
|
||||
|
||||
// TransitionStatus atomically changes an order from the expected status. The
|
||||
// returned boolean is false when another worker or callback handled it first.
|
||||
func TransitionStatus(t *db.MongoTool, id primitive.ObjectID, from, to AiChangeFaceStatus, set bson.M) (bool, error) {
|
||||
if set == nil {
|
||||
set = bson.M{}
|
||||
}
|
||||
set["status"] = to
|
||||
set["updatedAt"] = time.Now()
|
||||
result, err := coll(t).UpdateOne(bson.M{"_id": id, "status": from}, bson.M{"$set": set})
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return result.ModifiedCount == 1, nil
|
||||
}
|
||||
Reference in New Issue
Block a user