Skip to content

Commit 9f785a7

Browse files
authored
Merge pull request #528 from chaitin/feat/mcp-upstreams-softdelete
feat: 为 mcp_upstreams 补充软删除
2 parents 22bca6c + aff0a32 commit 9f785a7

File tree

12 files changed

+434
-20
lines changed

12 files changed

+434
-20
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package repo
2+
3+
import (
4+
"context"
5+
"database/sql"
6+
"testing"
7+
8+
_ "github.com/mattn/go-sqlite3"
9+
10+
"github.com/chaitin/MonkeyCode/backend/consts"
11+
"github.com/chaitin/MonkeyCode/backend/db/enttest"
12+
"github.com/google/uuid"
13+
)
14+
15+
func TestDeleteUserUpstreamMarksDeletedAt(t *testing.T) {
16+
t.Parallel()
17+
18+
ctx := context.Background()
19+
dsn := "file:user-mcp-upstream-delete?mode=memory&cache=shared&_fk=1"
20+
client := enttest.Open(t, "sqlite3", dsn)
21+
defer client.Close()
22+
23+
sqlDB, err := sql.Open("sqlite3", dsn)
24+
if err != nil {
25+
t.Fatalf("open sql db: %v", err)
26+
}
27+
defer sqlDB.Close()
28+
29+
uid := uuid.New()
30+
if _, err := client.User.Create().
31+
SetID(uid).
32+
SetName("tester").
33+
SetRole(consts.UserRoleIndividual).
34+
SetStatus(consts.UserStatusActive).
35+
Save(ctx); err != nil {
36+
t.Fatalf("create user: %v", err)
37+
}
38+
39+
upstreamID := uuid.New()
40+
if _, err := client.MCPUpstream.Create().
41+
SetID(upstreamID).
42+
SetName("Docs").
43+
SetSlug("docs").
44+
SetScope("user").
45+
SetUserID(uid).
46+
SetType("server").
47+
SetURL("https://example.com/mcp").
48+
SetHeaders(map[string]string{}).
49+
Save(ctx); err != nil {
50+
t.Fatalf("create upstream: %v", err)
51+
}
52+
53+
toolID := uuid.New()
54+
if _, err := client.MCPTool.Create().
55+
SetID(toolID).
56+
SetUpstreamID(upstreamID).
57+
SetName("search_docs").
58+
SetNamespacedName("docs__search_docs").
59+
SetScope("user").
60+
SetUserID(uid).
61+
SetInputSchema(map[string]any{}).
62+
Save(ctx); err != nil {
63+
t.Fatalf("create tool: %v", err)
64+
}
65+
66+
if _, err := client.MCPUserToolSetting.Create().
67+
SetID(uuid.New()).
68+
SetUserID(uid).
69+
SetToolID(toolID).
70+
SetEnabled(true).
71+
Save(ctx); err != nil {
72+
t.Fatalf("create tool setting: %v", err)
73+
}
74+
75+
repo := &mcpRepo{db: client}
76+
if err := repo.DeleteUserUpstream(ctx, uid, upstreamID); err != nil {
77+
t.Fatalf("DeleteUserUpstream() error = %v", err)
78+
}
79+
80+
var deletedAt sql.NullTime
81+
if err := sqlDB.QueryRowContext(ctx, "SELECT deleted_at FROM mcp_upstreams WHERE id = ?", upstreamID.String()).Scan(&deletedAt); err != nil {
82+
t.Fatalf("query deleted_at: %v", err)
83+
}
84+
if !deletedAt.Valid {
85+
t.Fatal("deleted_at is NULL, want soft-deleted upstream")
86+
}
87+
}

backend/db/client.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/db/mcpupstream.go

Lines changed: 12 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/db/mcpupstream/mcpupstream.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/db/mcpupstream/where.go

Lines changed: 55 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)