perf(chat): 优化后台客服会话查询与状态
This commit is contained in:
@@ -2,7 +2,12 @@ package chat
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"hfb_sys/backend/internal/model"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -13,9 +18,26 @@ const (
|
||||
)
|
||||
|
||||
func (r *Repository) UpdateRemark(ctx context.Context, principal Principal, conversationID uint64, remark string) error {
|
||||
return r.db.WithContext(ctx).Model(&model.ChatParticipant{}).
|
||||
Where("conversation_id = ? AND participant_type = ? AND participant_id = ?", conversationID, principal.Type, principal.ID).
|
||||
Update("remark", remark).Error
|
||||
if principal.Type != "admin" {
|
||||
return ErrPermissionDenied
|
||||
}
|
||||
db := r.db.WithContext(ctx)
|
||||
var conversation model.ChatConversation
|
||||
if err := db.Select("id").First(&conversation, conversationID).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return ErrConversationNotFound
|
||||
}
|
||||
return err
|
||||
}
|
||||
state := model.ChatAdminConversationState{
|
||||
ConversationID: conversationID,
|
||||
AdminUserID: principal.ID,
|
||||
Remark: strings.TrimSpace(remark),
|
||||
}
|
||||
return db.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "conversation_id"}, {Name: "admin_user_id"}},
|
||||
DoUpdates: clause.AssignmentColumns([]string{"remark", "updated_at"}),
|
||||
}).Create(&state).Error
|
||||
}
|
||||
func (r *Repository) ListQuickReplies(ctx context.Context, adminID uint64) ([]QuickReplyDTO, error) {
|
||||
var replies []model.ChatQuickReply
|
||||
|
||||
Reference in New Issue
Block a user