From a376e0168e3fe5240a80393d78f9f5649289e62f Mon Sep 17 00:00:00 2001 From: huangqz Date: Fri, 17 Jul 2026 15:22:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E6=96=B0=E5=A2=9E=20chat=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E8=81=8A=E5=A4=A9=E8=AE=B0=E5=BD=95=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=8E=A5=E5=8F=A3=20QueryChatRecords?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/chat/chat_records.go | 83 +++++++++++++++++++++++++++++++++++ services/chat/client.go | 33 ++++++++++++++ services/chat/client_test.go | 43 ++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 services/chat/chat_records.go create mode 100644 services/chat/client.go create mode 100644 services/chat/client_test.go diff --git a/services/chat/chat_records.go b/services/chat/chat_records.go new file mode 100644 index 0000000..e20d52b --- /dev/null +++ b/services/chat/chat_records.go @@ -0,0 +1,83 @@ +package chat + +import ( + "strconv" + + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" +) + +// QueryChatRecordsParams 查询聊天记录入参。均为可选,建议至少给一个身份或时间范围,避免全量扫描。 +type QueryChatRecordsParams struct { + GrUid string // 高热 uid(精确匹配,多个用英文逗号分隔) + Uid string // CP uid(精确匹配,多个用英文逗号分隔) + Gkey string // 游戏 key + Type string // 频道类型 1私聊 2喇叭 3邮件 4世界 5国家 6工会 7队伍 8附近 9其他 + Sid string // 区服 ID(多个用英文逗号分隔) + Keyword string // 内容关键词(分词匹配) + DateStart string // 起始时间 Y-m-d H:i:s(按 ctime 过滤) + DateEnd string // 截止时间 Y-m-d H:i:s + Page int // 页码,默认 1 + PageSize int // 每页条数,默认 100,上限 500 +} + +type QueryChatRecordsRequest struct { + *requests.RpcRequest +} + +// QueryChatRecordsResponse 聊天记录查询响应。 +// Items 为 ES child 文档原样字段(map),字段随 ES mapping 变化,调用方按需取用。 +type QueryChatRecordsResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data QueryChatRecordsData `json:"data"` +} + +type QueryChatRecordsData struct { + Total int `json:"total"` + Page int `json:"page"` + PageSize int `json:"page_size"` + Items []map[string]interface{} `json:"items"` +} + +// CreateQueryChatRecordsRequest 组装请求:仅写入非空参数为 FormParams。 +func CreateQueryChatRecordsRequest(params QueryChatRecordsParams) (req *QueryChatRecordsRequest) { + req = &QueryChatRecordsRequest{ + RpcRequest: &requests.RpcRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/api/internal/chatRecords") + + form := map[string]string{} + putNonEmpty(form, "gr_uid", params.GrUid) + putNonEmpty(form, "uid", params.Uid) + putNonEmpty(form, "gkey", params.Gkey) + putNonEmpty(form, "type", params.Type) + putNonEmpty(form, "sid", params.Sid) + putNonEmpty(form, "keyword", params.Keyword) + putNonEmpty(form, "date_start", params.DateStart) + putNonEmpty(form, "date_end", params.DateEnd) + if params.Page > 0 { + form["page"] = strconv.Itoa(params.Page) + } + if params.PageSize > 0 { + form["page_size"] = strconv.Itoa(params.PageSize) + } + + req.FormParams = form + req.Method = requests.POST + return +} + +func CreateQueryChatRecordsResponse() (resp *QueryChatRecordsResponse) { + resp = &QueryChatRecordsResponse{ + BaseResponse: &responses.BaseResponse{}, + } + return +} + +func putNonEmpty(m map[string]string, key, val string) { + if val != "" { + m[key] = val + } +} diff --git a/services/chat/client.go b/services/chat/client.go new file mode 100644 index 0000000..071929e --- /dev/null +++ b/services/chat/client.go @@ -0,0 +1,33 @@ +package chat + +import ( + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" +) + +const ( + VERSION = "2026-07-17" +) + +// HOST chat 服务主机键,解析为 chat.gaore.com(sdk 自动补 .gaore.com 后缀)。 +var HOST = requests.Host{ + Default: "chat", +} + +type Client struct { + sdk.Client +} + +func NewClient() (client *Client, err error) { + client = new(Client) + err = client.Init() + return +} + +// QueryChatRecords 查询聊天记录(ES 原样返回,不做二次装配)。 +// 对应 chat 服务 POST /api/internal/chatRecords。 +func (c *Client) QueryChatRecords(req *QueryChatRecordsRequest) (resp *QueryChatRecordsResponse, err error) { + resp = CreateQueryChatRecordsResponse() + err = c.DoAction(req, resp) + return +} diff --git a/services/chat/client_test.go b/services/chat/client_test.go new file mode 100644 index 0000000..7cc0643 --- /dev/null +++ b/services/chat/client_test.go @@ -0,0 +1,43 @@ +package chat + +import ( + "fmt" + "testing" +) + +// TestQueryChatRecords 集成测试:真实调用 chat.gaore.com 的 /api/internal/chatRecords。 +// +// 运行前请确认: +// - chat 服务已部署本接口(InternalController::chatRecords)且网络可达; +// - 按需替换下面的 gr_uid / 时间范围为有数据的样本。 +// +// 运行:go test ./services/chat/ -run TestQueryChatRecords -v +func TestQueryChatRecords(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatalf("NewClient: %v", err) + } + + req := CreateQueryChatRecordsRequest(QueryChatRecordsParams{ + GrUid: "188549603", // TODO: 换成有聊天记录的高热 uid + DateStart: "2026-07-01 00:00:00", // TODO: 换成实际时间范围 + DateEnd: "2026-07-17 23:59:59", + Page: 1, + PageSize: 5, + }) + + resp, err := client.QueryChatRecords(req) + if err != nil { + t.Fatalf("QueryChatRecords: %v", err) + } + + fmt.Printf("code=%d msg=%s total=%d 返回条数=%d\n", + resp.Code, resp.Msg, resp.Data.Total, len(resp.Data.Items)) + for i, item := range resp.Data.Items { + fmt.Printf(" [%d] %+v\n", i, item) + } + + if resp.Code != 1 { + t.Errorf("接口返回非成功:code=%d msg=%s", resp.Code, resp.Msg) + } +}