6
0

Compare commits

...

2 Commits

3 changed files with 159 additions and 0 deletions

View File

@ -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
}
}

33
services/chat/client.go Normal file
View File

@ -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.comsdk 自动补 .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
}

View File

@ -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)
}
}