Skip to content

Commit

Permalink
添加发送消息和接受消息
Browse files Browse the repository at this point in the history
  • Loading branch information
carlo committed Jul 2, 2020
1 parent 2ae0c71 commit 2eb5be2
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 4 deletions.
1 change: 1 addition & 0 deletions common/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ var (

DB_NOT_FOUND_ERR = errors.New("db item not found")
DB_INSERT_ERR = errors.New("db insert faild")
DB_PARAM_ERROR = errors.New("db param is error")
//PARAM_ERROR = engine.NewResponseError(ERROR_PARAM_ERROR, "param is error")
//MYSQL_PARAM_ERROR = engine.NewResponseError(ERROR_PARAM_ERROR, "sql param is error")
)
Expand Down
19 changes: 19 additions & 0 deletions dao/im_msg_content.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package dao
import (
"time"

"github.com/wudaoluo/golog"

"github.com/wudaoluo/sonic/common"

"github.com/go-xorm/xorm"
Expand Down Expand Up @@ -36,3 +38,20 @@ func (t *ImMsgContentService) Insert(data *model.ImMsgContent) (int64, error) {

return data.Mid, nil
}

func (t *ImMsgContentService) FindByMids(mids []int64) ([]*model.ImMsg, error) {
var list []*model.ImMsg
if len(mids) == 0 {
return list, nil
}

err := t.table().In("mid", mids).
Cols("mid", "msg_type", "content", "create_time").Find(&list)
if err != nil {
golog.Error("FindByMids", "mid", mids, "err", err)
return nil, err
}

return list, nil

}
28 changes: 28 additions & 0 deletions dao/im_msg_relation.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package dao
import (
"time"

"github.com/wudaoluo/golog"

"github.com/go-xorm/xorm"
"github.com/wudaoluo/sonic/common"
"github.com/wudaoluo/sonic/model"
Expand Down Expand Up @@ -34,3 +36,29 @@ func (t *ImMsgRelationService) Insert(data *model.ImMsgRelation) (int64, error)

return data.Mid, nil
}

func (t *ImMsgRelationService) FindByMid(param *model.ImMsgRelation) ([]*model.ImMsgRelation, error) {
if param.OwnerUid == 0 || param.OtherUid == 0 {
golog.Error("FindByMid", "OwnerUid", param.OwnerUid,
"OtherUid", param.OtherUid, "mid", param.Mid, "err", common.DB_PARAM_ERROR)
return nil, common.DB_PARAM_ERROR
}

var data []*model.ImMsgRelation

if param.Mid == 0 {
return data, nil
}

err := t.table().Where("owner_uid = ?", param.OwnerUid).
And("other_uid = ?", param.OtherUid).
And("mid > ?", param.Mid).Cols("mid", "type").Limit(10).OrderBy("-mid").
Find(&data)

if err != nil {
golog.Error("FindByMid", "err", err)
return nil, err
}

return data, nil
}
21 changes: 21 additions & 0 deletions endpoint/v1/logic.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ import (
"github.com/gin-gonic/gin"
"github.com/wudaoluo/sonic/common"
"github.com/wudaoluo/sonic/middleware"
"github.com/wudaoluo/sonic/model"
"github.com/wudaoluo/sonic/queue"
"github.com/wudaoluo/sonic/service"
)

func LogicV1Router(parentRoute gin.IRouter) {
router := parentRoute.Group("/logic")
router.Use(middleware.Jwt())
end := NewLogic()
router.POST("/command", end.Command)
router.POST("/msg/receive", end.MsgReceive)
}

type logic struct {
Expand All @@ -36,3 +39,21 @@ func (l logic) Command(c *gin.Context) {

common.GinJsonResp(c, true)
}

//接受消息
func (l logic) MsgReceive(c *gin.Context) {
var param model.LogicCommand
if err := c.Bind(&param); err != nil {
common.GinJsonRespErr(c, common.PARAM_ERROR)
return
}

msg := service.MsgReceive{}
ret, err := msg.Do(param.Data)
if err != nil {
common.GinJsonRespErr(c, common.SERVICE_ERROR)
return
}

common.GinJsonResp(c, ret)
}
8 changes: 8 additions & 0 deletions model/db_model.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,11 @@ type ImUser struct {
Uid int64 `json:"uid" xorm:"not null pk INT"`
Username string `json:"username" xorm:"not null VARCHAR(500)"`
}

type ImMsg struct {
Content string `json:"content" xorm:"not null VARCHAR(1000)"`
CreateTime time.Time `json:"create_time" xorm:"not null TIMESTAMP"`
Mid int64 `json:"mid" xorm:"not null pk autoincr INT"`
MsgType int `json:"msg_type" xorm:"not null INT"`
Type int `json:"type" xorm:"not null INT"`
}
38 changes: 34 additions & 4 deletions service/logic_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ func init() {

//easygen:
type MsgReceive struct {
SenderId int64 `json:"sender_id"`
RecipientId int64 `json:"recipient_id"`
Mid int64 `json:"mid"`
OwnerUid int64 `json:"owner_uid"`
OtherUid int64 `json:"other_uid"`
Mid int64 `json:"mid"`
}

func (m MsgReceive) Do(args json.RawMessage) (interface{}, error) {
Expand All @@ -29,7 +29,37 @@ func (m MsgReceive) Do(args json.RawMessage) (interface{}, error) {
golog.Error("MsgReceive.Do", "args", string(args), "err", err)
return nil, err
}
return true, nil

param := model.ImMsgRelation{
Mid: m.Mid,
OwnerUid: m.OwnerUid,
OtherUid: m.OtherUid,
}
data, err := dao.DBImMsgRelation.FindByMid(&param)
if err != nil {
golog.Error("MsgReceive.Do", "func", "dao.DBImMsgRelation.FindByMid", "err", err)
return nil, err
}

check := make(map[int64]int)
var mids []int64
for _, r := range data {
check[r.Mid] = r.Type
mids = append(mids, r.Mid)
}

contents, err := dao.DBImMsgContent.FindByMids(mids)
if err != nil {
return nil, err
}

for i, c := range contents {
if v, ok := check[c.Mid]; ok {
contents[i].Type = v
}
}

return contents, nil
}

//easygen: json
Expand Down

0 comments on commit 2eb5be2

Please sign in to comment.