2026-04-22 16:01:59 +08:00
|
|
|
|
package dto
|
2026-03-13 09:38:18 +08:00
|
|
|
|
|
|
|
|
|
|
import (
|
2026-04-22 16:01:59 +08:00
|
|
|
|
"with_you/internal/model"
|
2026-03-13 09:38:18 +08:00
|
|
|
|
"strconv"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// ==================== Notification 转换 ====================
|
|
|
|
|
|
|
|
|
|
|
|
// ConvertNotificationToResponse 将Notification转换为NotificationResponse
|
|
|
|
|
|
func ConvertNotificationToResponse(notification *model.Notification) *NotificationResponse {
|
|
|
|
|
|
if notification == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
return &NotificationResponse{
|
|
|
|
|
|
ID: notification.ID,
|
|
|
|
|
|
UserID: notification.UserID,
|
|
|
|
|
|
Type: string(notification.Type),
|
|
|
|
|
|
Title: notification.Title,
|
|
|
|
|
|
Content: notification.Content,
|
|
|
|
|
|
Data: notification.Data,
|
|
|
|
|
|
IsRead: notification.IsRead,
|
|
|
|
|
|
CreatedAt: FormatTime(notification.CreatedAt),
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ConvertNotificationsToResponse 将Notification列表转换为响应列表
|
|
|
|
|
|
func ConvertNotificationsToResponse(notifications []*model.Notification) []*NotificationResponse {
|
|
|
|
|
|
result := make([]*NotificationResponse, 0, len(notifications))
|
|
|
|
|
|
for _, n := range notifications {
|
|
|
|
|
|
result = append(result, ConvertNotificationToResponse(n))
|
|
|
|
|
|
}
|
|
|
|
|
|
return result
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ==================== SystemMessage 转换 ====================
|
|
|
|
|
|
|
|
|
|
|
|
// SystemMessageToResponse 将Message转换为SystemMessageResponse
|
|
|
|
|
|
func SystemMessageToResponse(msg *model.Message) *SystemMessageResponse {
|
|
|
|
|
|
if msg == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 从 segments 中提取文本内容
|
|
|
|
|
|
content := ExtractTextContentFromModel(msg.Segments)
|
|
|
|
|
|
|
|
|
|
|
|
resp := &SystemMessageResponse{
|
|
|
|
|
|
ID: msg.ID,
|
|
|
|
|
|
SenderID: msg.SenderID,
|
|
|
|
|
|
ReceiverID: "", // 系统消息的接收者需要从上下文获取
|
|
|
|
|
|
Content: content,
|
|
|
|
|
|
Category: string(msg.Category),
|
|
|
|
|
|
SystemType: string(msg.SystemType),
|
|
|
|
|
|
CreatedAt: msg.CreatedAt,
|
|
|
|
|
|
}
|
|
|
|
|
|
if msg.ExtraData != nil {
|
2026-03-30 04:49:35 +08:00
|
|
|
|
resp.ExtraData = map[string]any{
|
2026-03-13 09:38:18 +08:00
|
|
|
|
"actor_id": msg.ExtraData.ActorID,
|
|
|
|
|
|
"actor_name": msg.ExtraData.ActorName,
|
|
|
|
|
|
"avatar_url": msg.ExtraData.AvatarURL,
|
|
|
|
|
|
"target_id": msg.ExtraData.TargetID,
|
|
|
|
|
|
"target_type": msg.ExtraData.TargetType,
|
|
|
|
|
|
"action_url": msg.ExtraData.ActionURL,
|
|
|
|
|
|
"action_time": msg.ExtraData.ActionTime,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return resp
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// SystemMessagesToResponse 将Message列表转换为SystemMessageResponse列表
|
|
|
|
|
|
func SystemMessagesToResponse(messages []*model.Message) []*SystemMessageResponse {
|
|
|
|
|
|
result := make([]*SystemMessageResponse, 0, len(messages))
|
|
|
|
|
|
for _, msg := range messages {
|
|
|
|
|
|
result = append(result, SystemMessageToResponse(msg))
|
|
|
|
|
|
}
|
|
|
|
|
|
return result
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// SystemNotificationToResponse 将SystemNotification转换为SystemMessageResponse
|
|
|
|
|
|
func SystemNotificationToResponse(n *model.SystemNotification) *SystemMessageResponse {
|
|
|
|
|
|
if n == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
resp := &SystemMessageResponse{
|
|
|
|
|
|
ID: strconv.FormatInt(n.ID, 10),
|
|
|
|
|
|
SenderID: model.SystemSenderIDStr, // 系统发送者
|
|
|
|
|
|
ReceiverID: n.ReceiverID,
|
|
|
|
|
|
Content: n.Content,
|
|
|
|
|
|
Category: "notification",
|
|
|
|
|
|
SystemType: string(n.Type),
|
|
|
|
|
|
IsRead: n.IsRead,
|
|
|
|
|
|
CreatedAt: n.CreatedAt,
|
|
|
|
|
|
}
|
|
|
|
|
|
if n.ExtraData != nil {
|
2026-03-30 04:49:35 +08:00
|
|
|
|
resp.ExtraData = map[string]any{
|
2026-03-13 09:38:18 +08:00
|
|
|
|
"actor_id": n.ExtraData.ActorID,
|
|
|
|
|
|
"actor_id_str": n.ExtraData.ActorIDStr,
|
|
|
|
|
|
"actor_name": n.ExtraData.ActorName,
|
|
|
|
|
|
"avatar_url": n.ExtraData.AvatarURL,
|
|
|
|
|
|
"target_id": n.ExtraData.TargetID,
|
|
|
|
|
|
"target_title": n.ExtraData.TargetTitle,
|
|
|
|
|
|
"target_type": n.ExtraData.TargetType,
|
|
|
|
|
|
"action_url": n.ExtraData.ActionURL,
|
|
|
|
|
|
"action_time": n.ExtraData.ActionTime,
|
|
|
|
|
|
"group_id": n.ExtraData.GroupID,
|
|
|
|
|
|
"group_name": n.ExtraData.GroupName,
|
|
|
|
|
|
"group_avatar": n.ExtraData.GroupAvatar,
|
|
|
|
|
|
"group_description": n.ExtraData.GroupDescription,
|
|
|
|
|
|
"flag": n.ExtraData.Flag,
|
|
|
|
|
|
"request_type": n.ExtraData.RequestType,
|
|
|
|
|
|
"request_status": n.ExtraData.RequestStatus,
|
|
|
|
|
|
"reason": n.ExtraData.Reason,
|
|
|
|
|
|
"target_user_id": n.ExtraData.TargetUserID,
|
|
|
|
|
|
"target_user_name": n.ExtraData.TargetUserName,
|
|
|
|
|
|
"target_user_avatar": n.ExtraData.TargetUserAvatar,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return resp
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// SystemNotificationsToResponse 将SystemNotification列表转换为SystemMessageResponse列表
|
|
|
|
|
|
func SystemNotificationsToResponse(notifications []*model.SystemNotification) []*SystemMessageResponse {
|
|
|
|
|
|
result := make([]*SystemMessageResponse, 0, len(notifications))
|
|
|
|
|
|
for _, n := range notifications {
|
|
|
|
|
|
result = append(result, SystemNotificationToResponse(n))
|
|
|
|
|
|
}
|
|
|
|
|
|
return result
|
|
|
|
|
|
}
|