package medias import ( "context" "database/sql" "backend/database/models/qvyun_v2/public/model" "backend/database/models/qvyun_v2/public/table" "backend/providers/otel" . "github.com/go-jet/jet/v2/postgres" "github.com/samber/lo" log "github.com/sirupsen/logrus" semconv "go.opentelemetry.io/otel/semconv/v1.4.0" ) // @provider:except type Service struct { db *sql.DB log *log.Entry `inject:"false"` } func (svc *Service) Prepare() error { svc.log = log.WithField("module", "medias.service") _ = Int(1) return nil } // Create func (svc *Service) Create(ctx context.Context, m *model.Medias) (*model.Medias, error) { _, span := otel.Start(ctx, "medias.service.Create") defer span.End() tbl := table.Medias stmt := tbl.INSERT(tbl.MutableColumns).MODEL(m).RETURNING(tbl.AllColumns) span.SetAttributes(semconv.DBStatementKey.String(stmt.DebugSql())) var ret model.Medias if err := stmt.QueryContext(ctx, svc.db, &ret); err != nil { return nil, err } return &ret, nil } // GetMediasByHash func (svc *Service) GetMediasByHash(ctx context.Context, tenantID, userID int64, hashes []string) ([]*model.Medias, error) { _, span := otel.Start(ctx, "medias.service.GetMediasByHash") defer span.End() hashExpr := lo.Map(hashes, func(item string, index int) Expression { return String(item) }) tbl := table.Medias stmt := tbl. SELECT(tbl.AllColumns). WHERE( tbl.TenantID. EQ(Int64(tenantID)). AND( tbl.UserID.EQ(Int64(userID)), ). AND( tbl.Hash.IN(hashExpr...), ), ) span.SetAttributes(semconv.DBStatementKey.String(stmt.DebugSql())) var ret []model.Medias if err := stmt.QueryContext(ctx, svc.db, &ret); err != nil { return nil, err } return lo.Map(ret, func(item model.Medias, _ int) *model.Medias { return &item }), nil }