This commit is contained in:
@@ -5,6 +5,10 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/services"
|
||||
"quyun/v2/database/models"
|
||||
"quyun/v2/pkg/fields"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
. "github.com/riverqueue/river"
|
||||
log "github.com/sirupsen/logrus"
|
||||
@@ -41,7 +45,7 @@ func (w *BalancePayNotifyWorker) Work(ctx context.Context, job *Job[BalancePayNo
|
||||
log.Infof("[Start] Working on job with strings: %+v", job.Args)
|
||||
defer log.Infof("[End] Finished %s", job.Args.Kind())
|
||||
|
||||
order, err := model.OrdersModel().GetByOrderNo(context.Background(), job.Args.OrderNo)
|
||||
order, err := services.Orders.GetByOrderNO(ctx, job.Args.OrderNo)
|
||||
if err != nil {
|
||||
log.Errorf("GetByOrderNo error:%v", err)
|
||||
return err
|
||||
@@ -52,7 +56,7 @@ func (w *BalancePayNotifyWorker) Work(ctx context.Context, job *Job[BalancePayNo
|
||||
return JobCancel(fmt.Errorf("Order already paid, currently status: %d", order.Status))
|
||||
}
|
||||
|
||||
user, err := model.UsersModel().GetByID(context.Background(), order.UserID)
|
||||
user, err := services.Users.FindByID(ctx, order.UserID)
|
||||
if err != nil {
|
||||
log.Errorf("GetByID error:%v", err)
|
||||
return errors.Wrap(err, "get user error")
|
||||
@@ -63,7 +67,7 @@ func (w *BalancePayNotifyWorker) Work(ctx context.Context, job *Job[BalancePayNo
|
||||
order.PaymentMethod = "balance"
|
||||
order.Status = fields.OrderStatusCompleted
|
||||
|
||||
meta := order.Meta.Data
|
||||
meta := order.Meta.Data()
|
||||
|
||||
if user.Balance-meta.CostBalance < 0 {
|
||||
log.Errorf("User %d balance is not enough, current balance: %d, cost: %d", user.ID, user.Balance, payPrice)
|
||||
@@ -73,28 +77,29 @@ func (w *BalancePayNotifyWorker) Work(ctx context.Context, job *Job[BalancePayNo
|
||||
}
|
||||
|
||||
log.Infof("Updated order details: %+v", order)
|
||||
tx, err := model.Transaction(ctx)
|
||||
tx := models.Q.Begin()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Transaction error")
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
// update user balance
|
||||
err = user.SetBalance(ctx, user.Balance-payPrice)
|
||||
err = services.Users.DescBalance(ctx, user.ID, payPrice)
|
||||
if err != nil {
|
||||
log.WithError(err).Error("SetBalance error")
|
||||
return JobCancel(errors.Wrap(err, "set user balance failed"))
|
||||
}
|
||||
|
||||
if err := user.BuyPosts(context.Background(), order.PostID, order.Price); err != nil {
|
||||
if err := services.Users.BuyPosts(context.Background(), user.ID, order.PostID, order.Price); err != nil {
|
||||
log.Errorf("BuyPosts error:%v", err)
|
||||
return errors.Wrap(err, "BuyPosts error")
|
||||
}
|
||||
|
||||
if err := order.Update(context.Background()); err != nil {
|
||||
if _, err := order.Update(ctx); err != nil {
|
||||
log.Errorf("Update order error:%v", err)
|
||||
return errors.Wrap(err, "Update order error")
|
||||
}
|
||||
|
||||
if err := tx.Commit(); err != nil {
|
||||
log.Errorf("Commit error:%v", err)
|
||||
return errors.Wrap(err, "Commit error")
|
||||
|
||||
@@ -6,16 +6,14 @@ import (
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/model"
|
||||
"quyun/v2/app/services"
|
||||
"quyun/v2/providers/ali"
|
||||
"quyun/v2/providers/app"
|
||||
"quyun/v2/providers/job"
|
||||
|
||||
. "github.com/riverqueue/river"
|
||||
log "github.com/sirupsen/logrus"
|
||||
_ "go.ipao.vip/atom"
|
||||
"go.ipao.vip/atom/contracts"
|
||||
_ "go.ipao.vip/atom/contracts"
|
||||
)
|
||||
|
||||
var _ contracts.JobArgs = (*DownloadFromAliOSS)(nil)
|
||||
@@ -55,7 +53,7 @@ func (w *DownloadFromAliOSSWorker) Work(ctx context.Context, job *Job[DownloadFr
|
||||
log.Infof("[Start] Working on job with strings: %+v", job.Args)
|
||||
defer log.Infof("[End] Finished %s", job.Args.Kind())
|
||||
|
||||
media, err := model.MediasModel().GetByHash(ctx, job.Args.MediaHash)
|
||||
media, err := services.Medias.GetByHash(ctx, job.Args.MediaHash)
|
||||
if err != nil {
|
||||
log.Errorf("Error getting media by ID: %v", err)
|
||||
return JobCancel(err)
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"testing"
|
||||
|
||||
"quyun/v2/app/commands/testx"
|
||||
"quyun/v2/app/model"
|
||||
"quyun/v2/providers/ali"
|
||||
"quyun/v2/providers/app"
|
||||
"quyun/v2/providers/job"
|
||||
@@ -34,7 +33,7 @@ type DownloadFromAliOSSSuite struct {
|
||||
}
|
||||
|
||||
func Test_DownloadFromAliOSS(t *testing.T) {
|
||||
providers := testx.Default().With(Provide, model.Provide)
|
||||
providers := testx.Default().With(Provide)
|
||||
|
||||
testx.Serve(providers, t, func(p DownloadFromAliOSSSuiteInjectParams) {
|
||||
suite.Run(t, &DownloadFromAliOSSSuite{DownloadFromAliOSSSuiteInjectParams: p})
|
||||
|
||||
@@ -4,6 +4,9 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/services"
|
||||
"quyun/v2/database/models"
|
||||
"quyun/v2/pkg/fields"
|
||||
"quyun/v2/pkg/utils"
|
||||
"quyun/v2/providers/ali"
|
||||
"quyun/v2/providers/app"
|
||||
@@ -15,6 +18,7 @@ import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
_ "go.ipao.vip/atom"
|
||||
"go.ipao.vip/atom/contracts"
|
||||
"go.ipao.vip/gen/types"
|
||||
)
|
||||
|
||||
var _ contracts.JobArgs = (*PublishDraftPosts)(nil)
|
||||
@@ -54,33 +58,33 @@ func (w *PublishDraftPostsWorker) Work(ctx context.Context, job *Job[PublishDraf
|
||||
log.Infof("[Start] Working on job with strings: %+v", job.Args)
|
||||
defer log.Infof("[End] Finished %s", job.Args.Kind())
|
||||
|
||||
media, err := model.MediasModel().GetByHash(ctx, job.Args.MediaHash)
|
||||
media, err := services.Medias.GetByHash(ctx, job.Args.MediaHash)
|
||||
if err != nil {
|
||||
log.Errorf("Error getting media by ID: %v", err)
|
||||
return JobCancel(err)
|
||||
}
|
||||
|
||||
relationMedias, err := model.MediasModel().GetRelations(ctx, media.Hash)
|
||||
relationMedias, err := services.Medias.GetRelations(ctx, media.Hash)
|
||||
if err != nil {
|
||||
log.Errorf("Error getting relation medias: %v", err)
|
||||
return JobCancel(err)
|
||||
}
|
||||
|
||||
assets := lo.FilterMap(relationMedias, func(media *model.Medias, _ int) (fields.MediaAsset, bool) {
|
||||
assets := lo.FilterMap(relationMedias, func(media *models.Media, _ int) (fields.MediaAsset, bool) {
|
||||
return fields.MediaAsset{
|
||||
Type: media.MimeType,
|
||||
Media: media.ID,
|
||||
Metas: &media.Metas.Data,
|
||||
Metas: lo.ToPtr(media.Metas.Data()),
|
||||
}, media.MimeType != "image/jpeg"
|
||||
})
|
||||
assets = append(assets, fields.MediaAsset{
|
||||
Type: media.MimeType,
|
||||
Media: media.ID,
|
||||
Metas: &media.Metas.Data,
|
||||
Metas: lo.ToPtr(media.Metas.Data()),
|
||||
})
|
||||
|
||||
// publish a draft posts
|
||||
post := &model.Posts{
|
||||
post := &models.Post{
|
||||
Status: fields.PostStatusDraft,
|
||||
Title: utils.FormatTitle(media.Name),
|
||||
Description: "",
|
||||
@@ -89,9 +93,9 @@ func (w *PublishDraftPostsWorker) Work(ctx context.Context, job *Job[PublishDraf
|
||||
Discount: 100,
|
||||
Views: 0,
|
||||
Likes: 0,
|
||||
Tags: fields.Json[[]string]{},
|
||||
Assets: fields.ToJson(assets),
|
||||
HeadImages: fields.ToJson(lo.FilterMap(relationMedias, func(media *model.Medias, _ int) (int64, bool) {
|
||||
Tags: types.NewJSONType([]string{}),
|
||||
Assets: types.NewJSONType(assets),
|
||||
HeadImages: types.NewJSONType(lo.FilterMap(relationMedias, func(media *models.Media, _ int) (int64, bool) {
|
||||
return media.ID, media.MimeType == "image/jpeg"
|
||||
})),
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/model"
|
||||
"quyun/v2/database/fields"
|
||||
"quyun/v2/app/services"
|
||||
"quyun/v2/pkg/fields"
|
||||
"quyun/v2/pkg/utils"
|
||||
"quyun/v2/providers/app"
|
||||
"quyun/v2/providers/job"
|
||||
@@ -54,7 +54,7 @@ func (w *VideoCutWorker) Work(ctx context.Context, job *Job[VideoCut]) error {
|
||||
log.Infof("[Start] Working on job with strings: %+v", job.Args)
|
||||
defer log.Infof("[End] Finished %s", job.Args.Kind())
|
||||
|
||||
media, err := model.MediasModel().GetByHash(ctx, job.Args.MediaHash)
|
||||
media, err := services.Medias.GetByHash(ctx, job.Args.MediaHash)
|
||||
if err != nil {
|
||||
log.Errorf("Error getting media by ID: %v", err)
|
||||
return JobCancel(err)
|
||||
@@ -81,7 +81,7 @@ func (w *VideoCutWorker) Work(ctx context.Context, job *Job[VideoCut]) error {
|
||||
Short: false,
|
||||
Duration: duration,
|
||||
}
|
||||
if err := model.MediasModel().UpdateMetas(ctx, media.ID, metas); err != nil {
|
||||
if err := services.Medias.UpdateMetas(ctx, media.ID, metas); err != nil {
|
||||
log.Errorf("Error updating media metas: %v", err)
|
||||
return errors.Wrap(err, "update media metas")
|
||||
}
|
||||
|
||||
@@ -6,8 +6,9 @@ import (
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/model"
|
||||
"quyun/v2/database/fields"
|
||||
"quyun/v2/app/services"
|
||||
"quyun/v2/database/models"
|
||||
"quyun/v2/pkg/fields"
|
||||
"quyun/v2/pkg/utils"
|
||||
"quyun/v2/providers/ali"
|
||||
"quyun/v2/providers/app"
|
||||
@@ -18,6 +19,7 @@ import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
_ "go.ipao.vip/atom"
|
||||
"go.ipao.vip/atom/contracts"
|
||||
"go.ipao.vip/gen/types"
|
||||
)
|
||||
|
||||
var _ contracts.JobArgs = (*VideoExtractHeadImage)(nil)
|
||||
@@ -57,7 +59,7 @@ func (w *VideoExtractHeadImageWorker) Work(ctx context.Context, job *Job[VideoEx
|
||||
log.Infof("[Start] Working on job with strings: %+v", job.Args)
|
||||
defer log.Infof("[End] Finished %s", job.Args.Kind())
|
||||
|
||||
media, err := model.MediasModel().GetByHash(ctx, job.Args.MediaHash)
|
||||
media, err := services.Medias.GetByHash(ctx, job.Args.MediaHash)
|
||||
if err != nil {
|
||||
log.Errorf("Error getting media by ID: %v", err)
|
||||
return JobCancel(err)
|
||||
@@ -88,13 +90,13 @@ func (w *VideoExtractHeadImageWorker) Work(ctx context.Context, job *Job[VideoEx
|
||||
name := "[展示图]" + media.Name + ".jpg"
|
||||
|
||||
// create a new media record for the image
|
||||
imageMedia := &model.Medias{
|
||||
imageMedia := &models.Media{
|
||||
Name: name,
|
||||
MimeType: "image/jpeg",
|
||||
Size: fileSize,
|
||||
Path: w.oss.GetSavePath(filename),
|
||||
Hash: fileMd5,
|
||||
Metas: fields.ToJson(fields.MediaMetas{
|
||||
Metas: types.NewJSONType(fields.MediaMetas{
|
||||
ParentHash: media.Hash,
|
||||
}),
|
||||
}
|
||||
|
||||
@@ -5,8 +5,9 @@ import (
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/model"
|
||||
"quyun/v2/database/fields"
|
||||
"quyun/v2/app/services"
|
||||
"quyun/v2/database/models"
|
||||
"quyun/v2/pkg/fields"
|
||||
"quyun/v2/pkg/utils"
|
||||
"quyun/v2/providers/ali"
|
||||
"quyun/v2/providers/app"
|
||||
@@ -17,6 +18,7 @@ import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
_ "go.ipao.vip/atom"
|
||||
"go.ipao.vip/atom/contracts"
|
||||
"go.ipao.vip/gen/types"
|
||||
)
|
||||
|
||||
var _ contracts.JobArgs = (*VideoStoreShort)(nil)
|
||||
@@ -57,7 +59,7 @@ func (w *VideoStoreShortWorker) Work(ctx context.Context, job *Job[VideoStoreSho
|
||||
log.Infof("[Start] Working on job with strings: %+v", job.Args)
|
||||
defer log.Infof("[End] Finished %s", job.Args.Kind())
|
||||
|
||||
media, err := model.MediasModel().GetByHash(ctx, job.Args.MediaHash)
|
||||
media, err := services.Medias.GetByHash(ctx, job.Args.MediaHash)
|
||||
if err != nil {
|
||||
log.Errorf("Error getting media by ID: %v", err)
|
||||
return JobCancel(err)
|
||||
@@ -90,13 +92,13 @@ func (w *VideoStoreShortWorker) Work(ctx context.Context, job *Job[VideoStoreSho
|
||||
log.Infof("got file size %s %d", job.Args.FilePath, fileSize)
|
||||
|
||||
// save to db and relate to master
|
||||
mediaModel := &model.Medias{
|
||||
mediaModel := &models.Media{
|
||||
Name: "[试听] " + media.Name,
|
||||
MimeType: media.MimeType,
|
||||
Size: fileSize,
|
||||
Path: filePath,
|
||||
Hash: fileMd5,
|
||||
Metas: fields.ToJson(fields.MediaMetas{
|
||||
Metas: types.NewJSONType(fields.MediaMetas{
|
||||
ParentHash: media.Hash,
|
||||
Short: true,
|
||||
Duration: duration,
|
||||
|
||||
Reference in New Issue
Block a user