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:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user