From d77d0544d0bd646781f94abef18152affac2c035 Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Wed, 31 Dec 2025 15:20:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BB=93=E5=82=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E7=BC=93=E5=AD=98=E5=89=8D=E7=BC=80=E4=B8=8E?= =?UTF-8?q?=E8=BD=AF=E5=88=A0=E9=99=A4=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补齐 Redis ZSET 前缀处理,确保并发释放计数正确 删除时改用 Client().Mutate 走更新逻辑,保留软删除记录 测试: make test-integration --- backend/ent/schema/mixins/soft_delete.go | 4 +++- backend/internal/repository/integration_harness_test.go | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/ent/schema/mixins/soft_delete.go b/backend/ent/schema/mixins/soft_delete.go index 00ef77a6..9571bc9c 100644 --- a/backend/ent/schema/mixins/soft_delete.go +++ b/backend/ent/schema/mixins/soft_delete.go @@ -12,6 +12,7 @@ import ( "entgo.io/ent/dialect/sql" "entgo.io/ent/schema/field" "entgo.io/ent/schema/mixin" + dbent "github.com/Wei-Shaw/sub2api/ent" "github.com/Wei-Shaw/sub2api/ent/intercept" ) @@ -112,6 +113,7 @@ func (d SoftDeleteMixin) Hooks() []ent.Hook { SetOp(ent.Op) SetDeletedAt(time.Time) WhereP(...func(*sql.Selector)) + Client() *dbent.Client }) if !ok { return nil, fmt.Errorf("unexpected mutation type %T", m) @@ -122,7 +124,7 @@ func (d SoftDeleteMixin) Hooks() []ent.Hook { mx.SetOp(ent.OpUpdate) // 设置删除时间为当前时间 mx.SetDeletedAt(time.Now()) - return next.Mutate(ctx, m) + return mx.Client().Mutate(ctx, m) }) }, } diff --git a/backend/internal/repository/integration_harness_test.go b/backend/internal/repository/integration_harness_test.go index 553a581a..6ef447e1 100644 --- a/backend/internal/repository/integration_harness_test.go +++ b/backend/internal/repository/integration_harness_test.go @@ -330,7 +330,8 @@ func (h prefixHook) prefixCmd(cmd redisclient.Cmder) { switch strings.ToLower(cmd.Name()) { case "get", "set", "setnx", "setex", "psetex", "incr", "decr", "incrby", "expire", "pexpire", "ttl", "pttl", - "hgetall", "hget", "hset", "hdel", "hincrbyfloat", "exists": + "hgetall", "hget", "hset", "hdel", "hincrbyfloat", "exists", + "zadd", "zcard", "zrange", "zrangebyscore", "zrem", "zremrangebyscore", "zrevrange", "zrevrangebyscore", "zscore": prefixOne(1) case "del", "unlink": for i := 1; i < len(args); i++ {