Skip to content

Commit

Permalink
feat: 获取会话列表
Browse files Browse the repository at this point in the history
  • Loading branch information
danmuking committed Apr 10, 2024
1 parent 88c15d7 commit c218b15
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 14 deletions.
18 changes: 18 additions & 0 deletions domain/dto/contact_dto.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dto

import (
"gorm.io/gen/field"
"time"
)

type ContactDto struct {
ID int64 `json:"ID"`
// 头像
Avatar field.String `json:"avatar"`
// 会话名称
Name string `json:"name"`
// 最后一条消息内容
LastMsg string `json:"last_msg"`
// 最后一条消息时间
LastTime time.Time `json:"last_time"`
}
26 changes: 16 additions & 10 deletions routes/init_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,31 @@ func initGin() {
apiPublic.POST("/login", service.Login)
}

apiContact := router.Group("/api/contact")
apiContact.Use(jwt.JWT())
apiUser := router.Group("/api/user")
apiUser.Use(jwt.JWT())
{
//添加好友
apiContact.POST("/add", service.ApplyFriend)
apiUser.POST("/add", service.ApplyFriend)
//删除好友
apiContact.DELETE("/delete", service.DeleteFriend)
apiUser.DELETE("/delete", service.DeleteFriend)
//获取好友申请列表
apiContact.GET("/getApplyList", service.GetApplyList)
apiUser.GET("/getApplyList", service.GetApplyList)
//同意好友申请
apiContact.PUT("/agree", service.Agree)
apiUser.PUT("/agree", service.Agree)
//获取好友列表
apiContact.GET("/getContactList", service.GetContactList)
apiUser.GET("/getFriendList", service.GetFriendList)
//判断是否是好友
apiContact.GET("/isFriend/:friendUid", service.IsFriend)
apiUser.GET("/isFriend/:friendUid", service.IsFriend)
//好友申请未读数量
apiContact.GET("/unreadApplyNum", service.UnreadApplyNum)
apiUser.GET("/unreadApplyNum", service.UnreadApplyNum)
// TODO:测试使用
apiContact.GET("/test", test)
apiUser.GET("/test", test)
}

apiContact := router.Group("/api/contact")
apiContact.Use(jwt.JWT())
{
apiContact.GET("getContactList", service.GetContactListService)
}

apiMsg := router.Group("/api/msg")
Expand Down
114 changes: 114 additions & 0 deletions service/contact_service.go
Original file line number Diff line number Diff line change
@@ -1 +1,115 @@
package service

import (
"DiTing-Go/dal"
"DiTing-Go/dal/model"
"DiTing-Go/domain/dto"
"DiTing-Go/domain/enum"
"DiTing-Go/global"
cursorUtils "DiTing-Go/pkg/cursor"
"DiTing-Go/pkg/resp"
"context"
"github.com/gin-gonic/gin"
"log"
"strconv"
)

func GetContactListService(c *gin.Context) {
uid := c.GetInt64("uid")
// 游标翻页
// 默认值
var cursor *string = nil
var pageSize int = 20
pageRequest := cursorUtils.PageReq{
Cursor: cursor,
PageSize: pageSize,
}
if err := c.ShouldBindQuery(&pageRequest); err != nil { //ShouldBind()会自动推导
resp.ErrorResponse(c, "参数错误")
c.Abort()
return
}
pageResp, err := GetContactList(uid, pageRequest)
if err != nil {
resp.ErrorResponse(c, "查询会话列表失败")
c.Abort()
return
}
resp.SuccessResponse(c, pageResp)
c.Abort()
return
}

func GetContactList(uid int64, pageRequest cursorUtils.PageReq) (*cursorUtils.PageResp, error) {
db := dal.DB
contact := make([]model.Contact, 0)
condition := []string{"uid=?", strconv.FormatInt(uid, 10)}
pageResp, err := cursorUtils.Paginate(db, pageRequest, &contact, "active_time", false, condition...)
if err != nil {
log.Printf("查询会话列表失败: %s", err.Error())
return nil, err
}
contactList := pageResp.Data.(*[]model.Contact)
contactDtoList := make([]dto.ContactDto, 0)
for _, contact := range *contactList {
contactDto, err := getContactDto(contact)
if err != nil {
log.Printf("查询会话列表失败: %s", err.Error())
return nil, err
}
contactDtoList = append(contactDtoList, *contactDto)
}
pageResp.Data = contactDtoList
return pageResp, nil
}

// 获取会话dto
func getContactDto(contact model.Contact) (*dto.ContactDto, error) {
ctx := context.Background()
room := global.Query.Room
roomQ := room.WithContext(ctx)
contactDto := new(dto.ContactDto)
contactDto.ID = contact.ID
// 查询房间类型
roomR, err := roomQ.Where(room.ID.Eq(contact.RoomID)).First()
if err != nil {
return nil, err
}
// 如果是个人会话,名称是对方的昵称
if roomR.Type == enum.PERSONAL {
// 查询好友房间信息
roomFriend := global.Query.RoomFriend
roomFriendQ := roomFriend.WithContext(ctx)
roomFriendR, err := roomFriendQ.Where(roomFriend.RoomID.Eq(roomR.ID)).First()
if err != nil {
return nil, err
}
var friendUid int64
if roomFriendR.Uid1 == contact.UID {
friendUid = roomFriendR.Uid2
} else {
friendUid = roomFriendR.Uid1
}
user := global.Query.User
userQ := user.WithContext(ctx)
userR, err := userQ.Where(user.ID.Eq(friendUid)).First()
if err != nil {
return nil, err
}
contactDto.Name = userR.Name
contactDto.Avatar = user.Avatar
contactDto.LastTime = contact.ActiveTime

// TODO: 支持多种消息
msg := global.Query.Message
msgQ := msg.WithContext(ctx)
msgR, err := msgQ.Where(msg.ID.Eq(contact.LastMsgID)).First()
if err != nil {
return nil, err
}
contactDto.LastMsg = msgR.Content
}
// TODO: 返回消息未读数
// TODO: 群聊
return contactDto, nil
}
8 changes: 4 additions & 4 deletions service/user_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (
"strconv"
)

var q *query.Query = global.Query

// Register 用户注册
//
// @Summary 用户注册
Expand Down Expand Up @@ -83,8 +85,6 @@ func Login(c *gin.Context) {
resp.SuccessResponse(c, token)
}

var q *query.Query = global.Query

// ApplyFriend 添加好友
//
// @Summary 添加好友
Expand Down Expand Up @@ -424,14 +424,14 @@ func UnreadApplyNum(c *gin.Context) {
resp.SuccessResponse(c, num)
}

// GetContactList 获取好友列表
// GetFriendList 获取好友列表
//
// @Summary 获取好友列表
// @Produce json
// @Success 200 {object} resp.ResponseData "成功"
// @Failure 500 {object} resp.ResponseData "内部错误"
// @Router /api/contact/getContactList [get]
func GetContactList(c *gin.Context) {
func GetFriendList(c *gin.Context) {
ctx := context.Background()
uid := c.GetInt64("uid")
// 获取好友列表
Expand Down

0 comments on commit c218b15

Please sign in to comment.