Skip to content

Commit

Permalink
fix:add api test file
Browse files Browse the repository at this point in the history
  • Loading branch information
No8blackball committed Nov 5, 2024
1 parent 59b4998 commit ccb273c
Show file tree
Hide file tree
Showing 19 changed files with 331 additions and 62 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
## 扩展程序
## 业务扩展程序
36 changes: 20 additions & 16 deletions modules/group/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import (
"fmt"

"github.com/TangSengDaoDao/TangSengDaoDaoServer/modules/base"
"github.com/TangSengDaoDao/TangSengDaoDaoServer/pkg/network"
"github.com/TangSengDaoDao/TangSengDaoDaoServer/pkg/util"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/config"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/log"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/network"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/util"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/wkhttp"
"go.uber.org/zap"
)
Expand All @@ -34,22 +34,26 @@ func New(ctx *config.Context) *Group {
// Route 路由配置
func (g *Group) Route(r *wkhttp.WKHttp) {

group := r.Group("/v1/group")
v := r.Group("/v1")
{
group.POST("/create", g.create) // 创建群
}
groups := r.Group("/v1/groups")
{
groups.GET("/:group_no", g.groupGet) // 群详情
v.POST("/group/create", g.create) // 创建群
v.GET("/groups/:group_no", g.groupGet) // 群详情
}
}

// create 创建群
func (g *Group) create(c *wkhttp.Context) {
var req CreateReq
if err := c.Bind(&req); err != nil {
g.Error("参数错误", zap.Error(err))
c.ResponseError(errors.New("参数错误"))
var req createReq
if err := c.BindJSON(&req); err != nil {
c.ResponseError(errors.New("请求数据格式有误!"))
return
}
if req.GroupNo == "" {
c.ResponseError(errors.New("群号不能为空"))
return
}
if req.LoginUID == "" {
c.ResponseError(errors.New("登录用户ID不能为空"))
return
}
model, err := g.db.query(req.GroupNo)
Expand All @@ -60,7 +64,7 @@ func (g *Group) create(c *wkhttp.Context) {
}
if model == nil {
name := fmt.Sprintf("群%s", req.GroupNo)
if err := g.db.insert(&GroupModel{GroupNo: req.GroupNo, Name: name}); err != nil {
if err := g.db.insert(&GroupModel{GroupNo: req.GroupNo, Name: name, Creator: req.LoginUID}); err != nil {
g.Error("创建群失败", zap.Error(err))
c.ResponseError(errors.New("创建群失败"))
return
Expand Down Expand Up @@ -100,19 +104,19 @@ func (g *Group) groupGet(c *wkhttp.Context) {
return
}

c.Response(&GroupResp{
c.Response(&groupResp{
GroupNo: model.GroupNo,
Name: model.Name,
})
}

type GroupResp struct {
type groupResp struct {
GroupNo string `json:"group_no"`
Name string `json:"name"`
Avatar string `json:"avatar"`
}

type CreateReq struct {
type createReq struct {
GroupNo string `json:"group_no"`
LoginUID string `json:"login_uid"`
}
Expand Down
53 changes: 53 additions & 0 deletions modules/group/api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package group

import (
"bytes"
"fmt"
"net/http"
"net/http/httptest"
"strings"
"testing"

"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/util"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/testutil"
"github.com/stretchr/testify/assert"
)

func TestCreateGroup(t *testing.T) {
s, ctx := testutil.NewTestServer()
// u := New(ctx)
// u.Route(s.GetRoute())
//清除数据
err := testutil.CleanAllTables(ctx)
assert.NoError(t, err)
w := httptest.NewRecorder()
req, _ := http.NewRequest("POST", "/v1/group/create", bytes.NewReader([]byte(util.ToJson(map[string]interface{}{
"group_no": "g1",
"login_uid": "1",
}))))

s.GetRoute().ServeHTTP(w, req)
fmt.Println(w.Body.String())
assert.Equal(t, http.StatusOK, w.Code)
}

func TestGetGroup(t *testing.T) {
s, ctx := testutil.NewTestServer()
g := New(ctx)
// u.Route(s.GetRoute())
//清除数据
err := testutil.CleanAllTables(ctx)
assert.NoError(t, err)
err = g.db.insert(&GroupModel{
GroupNo: "g1",
Name: "group1",
Creator: "1",
})
assert.NoError(t, err)
w := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "/v1/groups/g1", nil)

s.GetRoute().ServeHTTP(w, req)
fmt.Println(w.Body.String())
assert.Equal(t, true, strings.Contains(w.Body.String(), `"group_no":`))
}
5 changes: 3 additions & 2 deletions modules/group/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@ func (db *DB) query(groupNo string) (*GroupModel, error) {
return group, err
}

func (db *DB) insert(group *GroupModel) error {
_, err := db.session.InsertInto("`group`").Columns(util.AttrToUnderscore(group)...).Record(group).Exec()
func (db *DB) insert(m *GroupModel) error {
_, err := db.session.InsertInto("group").Columns(util.AttrToUnderscore(m)...).Record(m).Exec()
return err
}

type GroupModel struct {
GroupNo string
Name string
Creator string
}
1 change: 1 addition & 0 deletions modules/group/sql/group_20241101-01.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ create table `group`
id integer not null primary key AUTO_INCREMENT,
group_no VARCHAR(40) not null default '', -- 群唯一编号
name VARCHAR(40) not null default '', -- 群名字
creator VARCHAR(40) not null default '', -- 创建者
created_at timeStamp not null DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at timeStamp not null DEFAULT CURRENT_TIMESTAMP -- 更新时间
);
Expand Down
24 changes: 7 additions & 17 deletions modules/message/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func (m *Message) syncMessageExtra(c *wkhttp.Context) {
c.ResponseError(errors.New("频道ID不能为空!"))
return
}
extraModels, err := m.messageExtraDB.sync(extraVersion, fakeChannelID, req.ChannelType, uint64(limit), req.LoginUID)
extraModels, err := m.messageExtraDB.sync(extraVersion, fakeChannelID, req.ChannelType, uint64(limit))
if err != nil {
c.ResponseErrorf("同步消息扩展数据失败!", err)
return
Expand Down Expand Up @@ -170,10 +170,6 @@ func (m *Message) delete(c *wkhttp.Context) {
c.ResponseOK()
}

func (m *Message) genMessageExtraSeq(channelID string) int64 {
return m.ctx.GenSeq(fmt.Sprintf("%s:%s", common.MessageExtraSeqKey, channelID))
}

// 撤回消息
func (m *Message) revoke(c *wkhttp.Context) {
var req *revokeReq
Expand Down Expand Up @@ -205,7 +201,7 @@ func (m *Message) revoke(c *wkhttp.Context) {
c.ResponseError(errors.New("查询消息扩展错误"))
return
}
version := m.genMessageExtraSeq(fakeChannelID)
version := time.Now().Unix()
if messageExtr == nil {
err = m.messageExtraDB.insert(&messageExtraModel{
MessageID: req.MessageID,
Expand Down Expand Up @@ -236,7 +232,7 @@ func (m *Message) revoke(c *wkhttp.Context) {
// 发给指定频道
err = m.ctx.SendRevoke(&config.MsgRevokeReq{
Operator: req.LoginUID,
OperatorName: c.GetLoginName(),
OperatorName: req.LoginUID,
FromUID: req.LoginUID,
ChannelID: req.ChannelID,
ChannelType: req.ChannelType,
Expand Down Expand Up @@ -291,11 +287,11 @@ func newSyncChannelMessageResp(resp *config.SyncChannelMessageResp, loginUID str
}

// 消息全局扩张
messageExtras, err := messageExtraDB.queryWithMessageIDsAndUID(messageIDs, loginUID)
messageExtras, err := messageExtraDB.queryWithMessageIDs(messageIDs)
if err != nil {
log.Error("查询消息扩展字段失败!", zap.Error(err))
}
messageExtraMap := map[string]*messageExtraDetailModel{}
messageExtraMap := map[string]*messageExtraModel{}
if len(messageExtras) > 0 {
for _, messageExtra := range messageExtras {
messageExtraMap[messageExtra.MessageID] = messageExtra
Expand Down Expand Up @@ -375,7 +371,7 @@ type MsgSyncResp struct {

}

func (m *MsgSyncResp) from(msgResp *config.MessageResp, loginUID string, messageExtraM *messageExtraDetailModel, messageUserExtraM *messageUserExtraModel) {
func (m *MsgSyncResp) from(msgResp *config.MessageResp, loginUID string, messageExtraM *messageExtraModel, messageUserExtraM *messageUserExtraModel) {
m.Header.NoPersist = msgResp.Header.NoPersist
m.Header.RedDot = msgResp.Header.RedDot
m.Header.SyncOnce = msgResp.Header.SyncOnce
Expand All @@ -397,7 +393,6 @@ func (m *MsgSyncResp) from(msgResp *config.MessageResp, loginUID string, message
m.Revoke = messageExtraM.Revoke
m.Revoker = messageExtraM.Revoker
m.ReadedCount = messageExtraM.ReadedCount
m.Readed = messageExtraM.Readed
m.ExtraVersion = messageExtraM.Version

m.MessageExtra = newMessageExtraResp(messageExtraM)
Expand Down Expand Up @@ -561,7 +556,7 @@ func (d *deleteReq) check() error {
return nil
}

func newMessageExtraResp(m *messageExtraDetailModel) *messageExtraResp {
func newMessageExtraResp(m *messageExtraModel) *messageExtraResp {

messageID, _ := strconv.ParseInt(m.MessageID, 10, 64)

Expand All @@ -574,22 +569,17 @@ func newMessageExtraResp(m *messageExtraDetailModel) *messageExtraResp {
}

var readedAt int64 = 0
if m.ReadedAt.Valid {
readedAt = m.ReadedAt.Time.Unix()
}

return &messageExtraResp{
MessageID: messageID,
MessageIDStr: m.MessageID,
Revoke: m.Revoke,
Revoker: m.Revoker,
Readed: m.Readed,
ReadedAt: readedAt,
ReadedCount: m.ReadedCount,
ContentEdit: contentEditMap,
EditedAt: m.EditedAt,
IsMutualDeleted: m.IsDeleted,
IsPinned: m.IsPinned,
ExtraVersion: m.Version,
}
}
36 changes: 31 additions & 5 deletions modules/message/api_conversation.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ import (
"strconv"
"sync"

"github.com/TangSengDaoDao/TangSengDaoDaoServer/modules/base"
"github.com/TangSengDaoDao/TangSengDaoDaoServer/pkg/network"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/config"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/log"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/util"
"github.com/TangSengDaoDao/TangSengDaoDaoServerLib/pkg/wkhttp"
"go.uber.org/zap"
)
Expand Down Expand Up @@ -99,12 +102,35 @@ func (co *Conversation) syncUserConversation(c *wkhttp.Context) {
}
}

conversations, err := co.ctx.IMSyncUserConversation(loginUID, version, req.MsgCount, lastMsgSeqs, nil)
resp, err := network.Post(base.APIURL+"/conversation/sync", []byte(util.ToJson(map[string]interface{}{
"uid": req.LoginUID,
"version": version,
"last_msg_seqs": lastMsgSeqs,
"msg_count": req.MsgCount,
"larges": nil,
})), nil)
if err != nil {
co.Error("同步离线后的最近会话失败!", zap.Error(err), zap.String("loginUID", loginUID))
c.ResponseError(errors.New("同步离线后的最近会话失败!"))
co.Error("获取IM离线最近会话失败!", zap.Error(err))
c.ResponseError(errors.New("获取IM离线最近会话失败!"))
return
}
err = base.HandlerIMError(resp)
if err != nil {
c.ResponseError(err)
}
var conversations []*config.SyncUserConversationResp
err = util.ReadJsonByByte([]byte(resp.Body), &conversations)
if err != nil {
c.ResponseError(errors.New("解析IM离线最近会话失败!"))
return
}

// conversations, err := co.ctx.IMSyncUserConversation(loginUID, version, req.MsgCount, lastMsgSeqs, nil)
// if err != nil {
// co.Error("同步离线后的最近会话失败!", zap.Error(err), zap.String("loginUID", loginUID))
// c.ResponseError(errors.New("同步离线后的最近会话失败!"))
// return
// }

syncUserConversationResps := make([]*SyncUserConversationResp, 0, len(conversations))
userKey := loginUID
Expand Down Expand Up @@ -277,11 +303,11 @@ func newSyncUserConversationResp(resp *config.SyncUserConversationResp, loginUID
}

// 消息扩充数据
messageExtras, err := messageExtraDB.queryWithMessageIDsAndUID(messageIDs, loginUID)
messageExtras, err := messageExtraDB.queryWithMessageIDs(messageIDs)
if err != nil {
log.Error("查询消息扩展字段失败!", zap.Error(err))
}
messageExtraMap := map[string]*messageExtraDetailModel{}
messageExtraMap := map[string]*messageExtraModel{}
if len(messageExtras) > 0 {
for _, messageExtra := range messageExtras {
messageExtraMap[messageExtra.MessageID] = messageExtra
Expand Down
Loading

0 comments on commit ccb273c

Please sign in to comment.