Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
fb839ae6
Commit
fb839ae6
authored
Jan 18, 2026
by
yangjianbo
Browse files
fix(软删除): 修复删除钩子调用链并跳过无Docker测试
软删除钩子改用 next.Mutate 处理更新,避免 mutation 类型不匹配 集成测试检测 Docker 可用性,无 Docker 自动跳过
parent
bdc426a7
Changes
2
Hide whitespace changes
Inline
Side-by-side
backend/ent/schema/mixins/soft_delete.go
View file @
fb839ae6
...
...
@@ -112,9 +112,6 @@ func (d SoftDeleteMixin) Hooks() []ent.Hook {
SetOp
(
ent
.
Op
)
SetDeletedAt
(
time
.
Time
)
WhereP
(
...
func
(
*
sql
.
Selector
))
Client
()
interface
{
Mutate
(
context
.
Context
,
ent
.
Mutation
)
(
ent
.
Value
,
error
)
}
})
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"unexpected mutation type %T"
,
m
)
...
...
@@ -125,7 +122,7 @@ func (d SoftDeleteMixin) Hooks() []ent.Hook {
mx
.
SetOp
(
ent
.
OpUpdate
)
// 设置删除时间为当前时间
mx
.
SetDeletedAt
(
time
.
Now
())
return
mx
.
Client
()
.
Mutate
(
ctx
,
m
)
return
next
.
Mutate
(
ctx
,
m
)
})
},
}
...
...
backend/internal/middleware/rate_limiter_integration_test.go
View file @
fb839ae6
...
...
@@ -7,6 +7,9 @@ import (
"fmt"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strconv"
"testing"
"time"
...
...
@@ -88,6 +91,7 @@ func performRequest(router *gin.Engine) *httptest.ResponseRecorder {
func
startRedis
(
t
*
testing
.
T
,
ctx
context
.
Context
)
*
redis
.
Client
{
t
.
Helper
()
ensureDockerAvailable
(
t
)
redisContainer
,
err
:=
tcredis
.
Run
(
ctx
,
redisImageTag
)
require
.
NoError
(
t
,
err
)
...
...
@@ -112,3 +116,43 @@ func startRedis(t *testing.T, ctx context.Context) *redis.Client {
return
rdb
}
func
ensureDockerAvailable
(
t
*
testing
.
T
)
{
t
.
Helper
()
if
dockerAvailable
()
{
return
}
t
.
Skip
(
"Docker 未启用,跳过依赖 testcontainers 的集成测试"
)
}
func
dockerAvailable
()
bool
{
if
os
.
Getenv
(
"DOCKER_HOST"
)
!=
""
{
return
true
}
socketCandidates
:=
[]
string
{
"/var/run/docker.sock"
,
filepath
.
Join
(
os
.
Getenv
(
"XDG_RUNTIME_DIR"
),
"docker.sock"
),
filepath
.
Join
(
userHomeDir
(),
".docker"
,
"run"
,
"docker.sock"
),
filepath
.
Join
(
userHomeDir
(),
".docker"
,
"desktop"
,
"docker.sock"
),
filepath
.
Join
(
"/run/user"
,
strconv
.
Itoa
(
os
.
Getuid
()),
"docker.sock"
),
}
for
_
,
socket
:=
range
socketCandidates
{
if
socket
==
""
{
continue
}
if
_
,
err
:=
os
.
Stat
(
socket
);
err
==
nil
{
return
true
}
}
return
false
}
func
userHomeDir
()
string
{
home
,
err
:=
os
.
UserHomeDir
()
if
err
!=
nil
{
return
""
}
return
home
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment