| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package tools
-
- import (
- "encoding/json"
-
- "git.x2erp.com/qdy/go-svc-mcp/internal/mcp"
- )
-
- func init() {
- mcp.Register("get_user_count", "获取用户数量,演示数据库工厂和上下文注入",
- map[string]interface{}{
- "type": "object",
- "properties": map[string]interface{}{
- "active_only": map[string]interface{}{
- "type": "boolean",
- "description": "是否只统计活跃用户",
- "default": false,
- },
- },
- "required": []string{},
- },
- func(input json.RawMessage, deps *mcp.ToolDependencies) (interface{}, error) {
- var params struct {
- ActiveOnly bool `json:"active_only"`
- }
- if len(input) > 0 {
- if err := json.Unmarshal(input, ¶ms); err != nil {
- return nil, err
- }
- }
-
- // 使用数据库工厂执行查询(示例)
- var count int64
-
- if deps.DBFactory != nil {
- // 实际项目中,这里会执行数据库查询
- // 示例:假设我们有一个用户表
- // db := deps.DBFactory.GetDB()
- // query := "SELECT COUNT(*) FROM users WHERE tenant_id = ?"
- // if params.ActiveOnly {
- // query += " AND status = 'active'"
- // }
- // err := db.QueryRow(query, deps.ReqCtx.TenantID).Scan(&count)
-
- // 模拟查询结果
-
- count = 42
- if params.ActiveOnly {
- count = 25
- }
- } else {
- // 无数据库工厂,返回模拟数据
- count = 100
- if params.ActiveOnly {
- count = 60
- }
- }
-
- return map[string]interface{}{
- "tenant_id": deps.ReqCtx.TenantID,
- "user_count": count,
- "active_only": params.ActiveOnly,
- "has_db": deps.DBFactory != nil,
- "timestamp": "2024-01-01T00:00:00Z", // 实际应使用 time.Now()
- }, nil
- },
- )
- }
|