fix(session): v4下,会话新增senderName字段

(cherry picked from commit 76073d651a02e61e43ff7f4240241b30158909aa)
This commit is contained in:
gim_z66 2025-08-25 17:26:47 +08:00
parent 9c221e6e0d
commit fc16fefc88
3 changed files with 73 additions and 16 deletions

View File

@ -6,11 +6,12 @@ import (
)
type Session struct {
UserName string `json:"userName"`
NOrder int `json:"nOrder"`
NickName string `json:"nickName"`
Content string `json:"content"`
NTime time.Time `json:"nTime"`
UserName string `json:"userName"`
NOrder int `json:"nOrder"`
NickName string `json:"nickName"`
Content string `json:"content"`
NTime time.Time `json:"nTime"`
SenderName string `json:"senderName"` // 群聊最后一条消息的发送者名称, 非群聊时此值为空或nil
}
// CREATE TABLE Session(
@ -63,11 +64,12 @@ type SessionV3 struct {
func (s *SessionV3) Wrap() *Session {
return &Session{
UserName: s.StrUsrName,
NOrder: s.NOrder,
NickName: s.StrNickName,
Content: s.StrContent,
NTime: time.Unix(int64(s.NTime), 0),
UserName: s.StrUsrName,
NOrder: s.NOrder,
NickName: s.StrNickName,
Content: s.StrContent,
NTime: time.Unix(int64(s.NTime), 0),
SenderName: s.StrNickName,
}
}

View File

@ -28,6 +28,7 @@ type SessionV4 struct {
LastTimestamp int `json:"last_timestamp"`
LastMsgSender string `json:"last_msg_sender"`
LastSenderDisplayName string `json:"last_sender_display_name"`
NickName string `json:"nickname"`
// Type int `json:"type"`
// UnreadCount int `json:"unread_count"`
@ -45,10 +46,11 @@ type SessionV4 struct {
func (s *SessionV4) Wrap() *Session {
return &Session{
UserName: s.Username,
NOrder: s.LastTimestamp,
NickName: s.LastSenderDisplayName,
Content: s.Summary,
NTime: time.Unix(int64(s.LastTimestamp), 0),
UserName: s.Username,
NOrder: s.LastTimestamp,
NickName: s.LastSenderDisplayName,
Content: s.Summary,
NTime: time.Unix(int64(s.LastTimestamp), 0),
SenderName: s.LastSenderDisplayName,
}
}

View File

@ -363,6 +363,39 @@ func (ds *DataSource) GetMessages(ctx context.Context, startTime, endTime time.T
return filteredMessages, nil
}
func (ds *DataSource) findContactsByUserNames(ctx context.Context, usernames []string) (map[string]*model.Contact, error) {
query := fmt.Sprintf(
"SELECT username, local_type, alias, remark, nick_name FROM contact WHERE username in ('%s')",
strings.Join(usernames, "', '"),
)
db, err := ds.dbm.GetDB(Contact)
if err != nil {
return nil, err
}
rows, err := db.QueryContext(ctx, query)
if err != nil {
return nil, errors.QueryFailed(query, err)
}
defer rows.Close()
ret := make(map[string]*model.Contact)
for rows.Next() {
var contactV4 model.ContactV4
err := rows.Scan(
&contactV4.UserName,
&contactV4.LocalType,
&contactV4.Alias,
&contactV4.Remark,
&contactV4.NickName,
)
if err != nil {
return nil, errors.ScanRowFailed(err)
}
ret[contactV4.UserName] = contactV4.Wrap()
}
return ret, nil
}
// 联系人
func (ds *DataSource) GetContacts(ctx context.Context, key string, limit, offset int) ([]*model.Contact, error) {
var query string
@ -578,6 +611,8 @@ func (ds *DataSource) GetSessions(ctx context.Context, key string, limit, offset
defer rows.Close()
sessions := []*model.Session{}
usernames := make([]string, 0)
for rows.Next() {
var sessionV4 model.SessionV4
err := rows.Scan(
@ -591,8 +626,26 @@ func (ds *DataSource) GetSessions(ctx context.Context, key string, limit, offset
if err != nil {
return nil, errors.ScanRowFailed(err)
}
session := sessionV4.Wrap()
sessions = append(sessions, session)
usernames = append(usernames, session.UserName)
}
// 发现一些v4下last_sender_display_name可能为空
if len(usernames) > 0 && len(sessions) > 0 {
contact_map, _ := ds.findContactsByUserNames(ctx, usernames)
for _, session := range sessions {
contact := contact_map[session.UserName]
if contact == nil {
continue
}
if contact.Remark != "" {
session.NickName = contact.Remark
} else {
session.NickName = contact.NickName
}
}
sessions = append(sessions, sessionV4.Wrap())
}
return sessions, nil