Files
hfb_sys/backend/internal/modules/chat/quick_reply.go
T

111 lines
3.8 KiB
Go

package chat
import (
"context"
"hfb_sys/backend/internal/model"
)
const (
autoWelcomeConfigKey = "chat.auto_welcome_message"
defaultAutoWelcomeMessage = "欢迎加入订单群聊!如有任何问题,请随时沟通。"
listingGroupWelcomeConfigKey = "chat.listing_group_welcome"
defaultListingGroupWelcome = "欢迎加入账号群!请号主扫描下方二维码加入企业微信群,方便客服与您及时联系。"
)
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` = ?", autoWelcomeConfigKey).First(&cfg).Error; err != nil {
return defaultAutoWelcomeMessage
}
return cfg.Value
}
func (r *Repository) UpdateAutoWelcomeMessage(ctx context.Context, message string) error {
return r.db.WithContext(ctx).Model(&model.SystemConfig{}).
Where("`key` = ?", autoWelcomeConfigKey).
Update("value", message).Error
}
func (r *Repository) GetListingGroupWelcomeMessage(ctx context.Context) string {
var cfg model.SystemConfig
if err := r.db.WithContext(ctx).Where("`key` = ?", listingGroupWelcomeConfigKey).First(&cfg).Error; err != nil {
return defaultListingGroupWelcome
}
return cfg.Value
}
func (r *Repository) UpdateListingGroupWelcomeMessage(ctx context.Context, message string) error {
return r.db.WithContext(ctx).Model(&model.SystemConfig{}).
Where("`key` = ?", listingGroupWelcomeConfigKey).
Update("value", message).Error
}