feat(crm): align shared attachment payloads
This commit is contained in:
@@ -304,17 +304,17 @@ func serializeMessage(ctx context.Context, db *gorm.DB, message *model.Message,
|
||||
if err := db.WithContext(ctx).Where("message_id = ?", message.ID).Order("id ASC").Find(&attachments).Error; err == nil && len(attachments) > 0 {
|
||||
payload.Attachments = make([]any, 0, len(attachments))
|
||||
for i := range attachments {
|
||||
payload.Attachments = append(payload.Attachments, serializeAttachment(&attachments[i]))
|
||||
payload.Attachments = append(payload.Attachments, serializeAttachment(ctx, db, &attachments[i]))
|
||||
}
|
||||
}
|
||||
}
|
||||
return payload
|
||||
}
|
||||
|
||||
func serializeAttachment(attachment *model.Attachment) map[string]any {
|
||||
func serializeAttachment(ctx context.Context, db *gorm.DB, attachment *model.Attachment) map[string]any {
|
||||
extension := strings.TrimPrefix(filepath.Ext(attachment.FileName), ".")
|
||||
dataURL := nonEmpty(attachment.FileURL, attachment.ExternalURL)
|
||||
return map[string]any{
|
||||
payload := map[string]any{
|
||||
"id": attachment.ID,
|
||||
"message_id": attachment.MessageID,
|
||||
"file_type": attachment.FileType,
|
||||
@@ -326,6 +326,52 @@ func serializeAttachment(attachment *model.Attachment) map[string]any {
|
||||
"width": attachment.Width,
|
||||
"height": attachment.Height,
|
||||
}
|
||||
|
||||
message := attachment.Message
|
||||
if message.ID == 0 && db != nil && attachment.MessageID != 0 {
|
||||
_ = db.WithContext(ctx).First(&message, attachment.MessageID).Error
|
||||
}
|
||||
if !message.CreatedAt.IsZero() {
|
||||
payload["created_at"] = message.CreatedAt.Unix()
|
||||
}
|
||||
if sender := serializeMessageSender(ctx, db, &message); sender != nil {
|
||||
payload["sender"] = sender
|
||||
}
|
||||
return payload
|
||||
}
|
||||
|
||||
func serializeAttachmentWithConversation(ctx context.Context, db *gorm.DB, attachment *model.Attachment) map[string]any {
|
||||
payload := serializeAttachment(ctx, db, attachment)
|
||||
message := attachment.Message
|
||||
if message.ID == 0 && db != nil && attachment.MessageID != 0 {
|
||||
_ = db.WithContext(ctx).First(&message, attachment.MessageID).Error
|
||||
}
|
||||
if db != nil && message.ConversationID != 0 {
|
||||
var conversation model.Conversation
|
||||
if err := db.WithContext(ctx).First(&conversation, message.ConversationID).Error; err == nil {
|
||||
payload["conversation_id"] = conversationDisplayID(&conversation)
|
||||
}
|
||||
}
|
||||
return payload
|
||||
}
|
||||
|
||||
func serializeMessageSender(ctx context.Context, db *gorm.DB, message *model.Message) map[string]any {
|
||||
if db == nil || message == nil || message.SenderID == nil || *message.SenderID == 0 {
|
||||
return nil
|
||||
}
|
||||
senderType := strings.ToLower(message.SenderType)
|
||||
if senderType == "contact" {
|
||||
var contact model.Contact
|
||||
if err := db.WithContext(ctx).First(&contact, *message.SenderID).Error; err == nil {
|
||||
return serializeContact(&contact)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
var user model.User
|
||||
if err := db.WithContext(ctx).First(&user, *message.SenderID).Error; err == nil {
|
||||
return serializeUser(&user, message.AccountID)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func serializeContact(contact *model.Contact) map[string]any {
|
||||
|
||||
Reference in New Issue
Block a user