package chat import ( "context" "hfb_sys/backend/internal/model" ) 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 } func (r *Repository) ListQuickReplies(ctx context.Context, adminID uint64) ([]QuickReplyDTO, error) { var replies []model.ChatQuickReply err := r.db.WithContext(ctx).Where("admin_user_id = ? OR admin_user_id = 0", adminID). Order("admin_user_id DESC, sort_order ASC, id ASC"). Find(&replies).Error if err != nil { return nil, err } result := make([]QuickReplyDTO, len(replies)) for i, reply := range replies { result[i] = QuickReplyDTO{ ID: reply.ID, AdminUserID: reply.AdminUserID, Title: reply.Title, Content: reply.Content, SortOrder: reply.SortOrder, IsGlobal: reply.AdminUserID == 0, } } return result, nil } func (r *Repository) CreateQuickReply(ctx context.Context, adminID uint64, req CreateQuickReplyRequest) (*QuickReplyDTO, error) { ownerID := adminID if req.IsGlobal { ownerID = 0 } reply := model.ChatQuickReply{ AdminUserID: ownerID, Title: req.Title, Content: req.Content, SortOrder: req.SortOrder, } if err := r.db.WithContext(ctx).Create(&reply).Error; err != nil { return nil, err } return &QuickReplyDTO{ ID: reply.ID, AdminUserID: reply.AdminUserID, Title: reply.Title, Content: reply.Content, SortOrder: reply.SortOrder, IsGlobal: reply.AdminUserID == 0, }, nil } func (r *Repository) UpdateQuickReply(ctx context.Context, adminID uint64, replyID uint64, req UpdateQuickReplyRequest) error { query := r.db.WithContext(ctx).Model(&model.ChatQuickReply{}).Where("id = ? AND (admin_user_id = ? OR admin_user_id = 0)", replyID, adminID) updates := map[string]interface{}{} if req.Title != "" { updates["title"] = req.Title } if req.Content != "" { updates["content"] = req.Content } if req.SortOrder != nil { updates["sort_order"] = *req.SortOrder } if len(updates) == 0 { return nil } return query.Updates(updates).Error } func (r *Repository) DeleteQuickReply(ctx context.Context, adminID uint64, replyID uint64) error { return r.db.WithContext(ctx).Where("id = ? AND admin_user_id = ?", replyID, adminID). Delete(&model.ChatQuickReply{}).Error } func (r *Repository) GetAutoWelcomeMessage(ctx context.Context) string { var cfg model.SystemConfig if err := r.db.WithContext(ctx).Where("`key` = ?", "chat.auto_welcome_message").First(&cfg).Error; err != nil { return "欢迎加入订单群聊!如有任何问题,请随时沟通。" } return cfg.Value } func (r *Repository) UpdateAutoWelcomeMessage(ctx context.Context, message string) error { return r.db.WithContext(ctx).Model(&model.SystemConfig{}). Where("`key` = ?", "chat.auto_welcome_message"). Update("value", message).Error }