From 24553e9875f952680d471102e5b5b39abd557370 Mon Sep 17 00:00:00 2001 From: Rogee Date: Thu, 19 Dec 2024 22:56:54 +0800 Subject: [PATCH] feat: update by query --- backend/database/services/provider.gen.go | 1 - .../commands/discover/discover_medias.go | 4 +- .../modules/commands/discover/provider.gen.go | 1 - .../modules/commands/store/provider.gen.go | 1 - .../modules/commands/tenant/provider.gen.go | 3 -- backend/modules/medias/controller.go | 2 +- backend/modules/medias/provider.gen.go | 5 +- backend/modules/medias/service.go | 48 ++++++++++++++----- backend/modules/middlewares/provider.gen.go | 1 - backend/modules/users/controller.go | 2 +- backend/modules/users/provider.gen.go | 5 +- backend/modules/wechat/provider.gen.go | 1 - backend/modules/workers/provider.gen.go | 1 - 13 files changed, 43 insertions(+), 32 deletions(-) diff --git a/backend/database/services/provider.gen.go b/backend/database/services/provider.gen.go index fb05733..1c9c2bc 100755 --- a/backend/database/services/provider.gen.go +++ b/backend/database/services/provider.gen.go @@ -12,6 +12,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/commands/discover/discover_medias.go b/backend/modules/commands/discover/discover_medias.go index fd92f00..6f08891 100644 --- a/backend/modules/commands/discover/discover_medias.go +++ b/backend/modules/commands/discover/discover_medias.go @@ -153,7 +153,7 @@ func (d *DiscoverMedias) getFileMD5(filePath string) (string, error) { } // extractAudio extract audio from video -func (d *DiscoverMedias) extractAudio(video string, output string) error { +func (d *DiscoverMedias) extractAudio(video, output string) error { args := []string{ "-i", video, "-vn", @@ -303,7 +303,7 @@ func (d *DiscoverMedias) runCleanup(to string) { } // getSnapshot get the snapshot of target seconds of a video -func (d *DiscoverMedias) ffmpegVideoToPoster(video string, output string) error { +func (d *DiscoverMedias) ffmpegVideoToPoster(video, output string) error { args := []string{ "-y", // 添加 -y 参数强制覆盖 "-i", video, diff --git a/backend/modules/commands/discover/provider.gen.go b/backend/modules/commands/discover/provider.gen.go index fe921f6..8342493 100755 --- a/backend/modules/commands/discover/provider.gen.go +++ b/backend/modules/commands/discover/provider.gen.go @@ -21,6 +21,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/commands/store/provider.gen.go b/backend/modules/commands/store/provider.gen.go index 33bca93..4910313 100755 --- a/backend/modules/commands/store/provider.gen.go +++ b/backend/modules/commands/store/provider.gen.go @@ -21,6 +21,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/commands/tenant/provider.gen.go b/backend/modules/commands/tenant/provider.gen.go index 058bf96..91b3f0e 100755 --- a/backend/modules/commands/tenant/provider.gen.go +++ b/backend/modules/commands/tenant/provider.gen.go @@ -21,7 +21,6 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - if err := container.Container.Provide(func( userSvc *users.Service, ) (*Create, error) { @@ -35,7 +34,6 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - if err := container.Container.Provide(func( userSvc *users.Service, ) (*Expire, error) { @@ -49,6 +47,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/medias/controller.go b/backend/modules/medias/controller.go index 03cb563..f752df3 100644 --- a/backend/modules/medias/controller.go +++ b/backend/modules/medias/controller.go @@ -8,7 +8,7 @@ import ( "github.com/gofiber/fiber/v3" log "github.com/sirupsen/logrus" - hashids "github.com/speps/go-hashids/v2" + "github.com/speps/go-hashids/v2" ) // @provider diff --git a/backend/modules/medias/provider.gen.go b/backend/modules/medias/provider.gen.go index 2030e74..f583c2a 100755 --- a/backend/modules/medias/provider.gen.go +++ b/backend/modules/medias/provider.gen.go @@ -8,7 +8,7 @@ import ( "git.ipao.vip/rogeecn/atom/container" "git.ipao.vip/rogeecn/atom/contracts" "git.ipao.vip/rogeecn/atom/utils/opt" - hashids "github.com/speps/go-hashids/v2" + "github.com/speps/go-hashids/v2" ) func Provide(opts ...opt.Option) error { @@ -24,7 +24,6 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - if err := container.Container.Provide(func( controller *Controller, ) (contracts.HttpRoute, error) { @@ -38,7 +37,6 @@ func Provide(opts ...opt.Option) error { }, atom.GroupRoutes); err != nil { return err } - if err := container.Container.Provide(func( db *sql.DB, hashIds *hashids.HashID, @@ -56,6 +54,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/medias/service.go b/backend/modules/medias/service.go index df60ed2..da14b66 100644 --- a/backend/modules/medias/service.go +++ b/backend/modules/medias/service.go @@ -18,6 +18,7 @@ import ( "backend/providers/storage" . "github.com/go-jet/jet/v2/postgres" + "github.com/go-jet/jet/v2/qrm" "github.com/grafov/m3u8" "github.com/pkg/errors" "github.com/samber/lo" @@ -163,7 +164,7 @@ func (svc *Service) List(ctx context.Context, tenantId, userId int64, filter *Li } // GetUserBoughtMedias -func (svc *Service) GetUserBoughtMedias(ctx context.Context, tenant int64, userID int64) ([]int64, error) { +func (svc *Service) GetUserBoughtMedias(ctx context.Context, tenant, userID int64) ([]int64, error) { log := svc.log.WithField("method", "GetUserBoughtMedias") tbl := table.UserMedias @@ -229,11 +230,21 @@ func (svc *Service) Upsert(ctx context.Context, tenantId int64, item media_store } tbl := table.Medias - stmt := tbl. - INSERT(tbl.TenantID, tbl.Hash, tbl.Title, tbl.Price, tbl.Duration, tbl.Resources, tbl.Publish). - VALUES(Int(tenantId), String(item.Hash), String(item.Name), Int(item.Price()), Int(item.Duration), Json(resources.MustValue()), Bool(true)). - ON_CONFLICT(tbl.Hash). - DO_UPDATE( + // if hash exists then update + stmt := tbl.SELECT(tbl.ID.AS("id")).WHERE(tbl.Hash.EQ(String(item.Hash))) + log.Debug(stmt.DebugSql()) + + var m struct { + ID int64 + } + if err := stmt.QueryContext(ctx, svc.db, &m); err != nil && !errors.Is(err, qrm.ErrNoRows) { + return errors.Wrapf(err, "query media by hash %s", item.Hash) + } + + if m.ID > 0 { + // update media + stmt2 := tbl. + UPDATE(). SET( tbl.Title.SET(String(item.Name)), tbl.Price.SET(Int(item.Price())), @@ -241,14 +252,29 @@ func (svc *Service) Upsert(ctx context.Context, tenantId int64, item media_store tbl.Duration.SET(Int(item.Duration)), tbl.Publish.SET(Bool(true)), tbl.UpdatedAt.SET(TimestampT(time.Now())), - ), - ) - log.Debug(stmt.DebugSql()) + ). + WHERE(tbl.ID.EQ(Int(m.ID))) + log.Debug(stmt2.DebugSql()) - if _, err := stmt.ExecContext(ctx, svc.db); err != nil { - return errors.Wrapf(err, "upsert media: %s %s", item.Hash, item.Name) + if _, err := stmt2.ExecContext(ctx, svc.db); err != nil { + return errors.Wrapf(err, "update media: %s %s", item.Hash, item.Name) + } + svc.log.Infof("update media: %d %s %s", m.ID, item.Hash, item.Name) + return nil } + stmt3 := tbl. + INSERT(tbl.TenantID, tbl.Hash, tbl.Title, tbl.Price, tbl.Duration, tbl.Resources, tbl.Publish). + VALUES(Int(tenantId), String(item.Hash), String(item.Name), Int(item.Price()), Int(item.Duration), Json(resources.MustValue()), Bool(true)). + ON_CONFLICT(tbl.Hash). + DO_NOTHING() + log.Debug(stmt3.DebugSql()) + + if _, err := stmt3.ExecContext(ctx, svc.db); err != nil { + return errors.Wrapf(err, "insert into media: %s %s", item.Hash, item.Name) + } + + svc.log.Infof("insert media: %s %s", item.Hash, item.Name) return nil } diff --git a/backend/modules/middlewares/provider.gen.go b/backend/modules/middlewares/provider.gen.go index b1f58f6..4a8718d 100755 --- a/backend/modules/middlewares/provider.gen.go +++ b/backend/modules/middlewares/provider.gen.go @@ -33,6 +33,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/users/controller.go b/backend/modules/users/controller.go index f22f302..cdc50fb 100644 --- a/backend/modules/users/controller.go +++ b/backend/modules/users/controller.go @@ -8,7 +8,7 @@ import ( "github.com/gofiber/fiber/v3" "github.com/pkg/errors" log "github.com/sirupsen/logrus" - hashids "github.com/speps/go-hashids/v2" + "github.com/speps/go-hashids/v2" ) // @provider diff --git a/backend/modules/users/provider.gen.go b/backend/modules/users/provider.gen.go index 23b8505..2536a58 100755 --- a/backend/modules/users/provider.gen.go +++ b/backend/modules/users/provider.gen.go @@ -7,7 +7,7 @@ import ( "git.ipao.vip/rogeecn/atom/container" "git.ipao.vip/rogeecn/atom/contracts" "git.ipao.vip/rogeecn/atom/utils/opt" - hashids "github.com/speps/go-hashids/v2" + "github.com/speps/go-hashids/v2" ) func Provide(opts ...opt.Option) error { @@ -23,7 +23,6 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - if err := container.Container.Provide(func( controller *Controller, ) (contracts.HttpRoute, error) { @@ -37,7 +36,6 @@ func Provide(opts ...opt.Option) error { }, atom.GroupRoutes); err != nil { return err } - if err := container.Container.Provide(func( db *sql.DB, hashIds *hashids.HashID, @@ -53,6 +51,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/wechat/provider.gen.go b/backend/modules/wechat/provider.gen.go index 2506977..9a1cfe9 100755 --- a/backend/modules/wechat/provider.gen.go +++ b/backend/modules/wechat/provider.gen.go @@ -27,6 +27,5 @@ func Provide(opts ...opt.Option) error { }); err != nil { return err } - return nil } diff --git a/backend/modules/workers/provider.gen.go b/backend/modules/workers/provider.gen.go index ddc63ca..a6d945e 100755 --- a/backend/modules/workers/provider.gen.go +++ b/backend/modules/workers/provider.gen.go @@ -26,6 +26,5 @@ func Provide(opts ...opt.Option) error { }, atom.GroupInitial); err != nil { return err } - return nil }