mirror of
https://github.com/sjzar/chatlog.git
synced 2026-06-11 21:01:01 +08:00
fix(session): v4下,会话新增senderName字段
(cherry picked from commit 76073d651a02e61e43ff7f4240241b30158909aa)
This commit is contained in:
parent
9c221e6e0d
commit
fc16fefc88
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user