feat(message): add message encryption with batch decryption optimization

- Add encryption configuration with environment variable support
- Implement batch parallel decryption for improved query performance
- Integrate message encryptor via wire dependency injection
- Add explicit Decrypt() method for single message decryption
- Optimize AfterFind hook to defer decryption for batch processing
This commit is contained in:
lafay
2026-03-17 10:10:49 +08:00
parent 5d6c982c9c
commit 8a2b0e0a5e
7 changed files with 445 additions and 2 deletions

View File

@@ -131,6 +131,10 @@ func (r *MessageRepository) GetMessages(conversationID string, page, pageSize in
Order("seq DESC").
Find(&messages).Error
if err == nil && len(messages) > 0 {
model.BatchDecryptMessagesParallel(messages)
}
return messages, total, err
}
@@ -141,6 +145,11 @@ func (r *MessageRepository) GetMessagesAfterSeq(conversationID string, afterSeq
Order("seq ASC").
Limit(limit).
Find(&messages).Error
if err == nil && len(messages) > 0 {
model.BatchDecryptMessagesParallel(messages)
}
return messages, err
}
@@ -155,6 +164,11 @@ func (r *MessageRepository) GetMessagesBeforeSeq(conversationID string, beforeSe
for i, j := 0, len(messages)-1; i < j; i, j = i+1, j-1 {
messages[i], messages[j] = messages[j], messages[i]
}
if err == nil && len(messages) > 0 {
model.BatchDecryptMessagesParallel(messages)
}
return messages, err
}
@@ -350,6 +364,8 @@ func (r *MessageRepository) GetMessageByID(messageID string) (*model.Message, er
if err != nil {
return nil, err
}
// 单条消息直接解密
_ = message.Decrypt()
return &message, nil
}