Files
ai-agent/internal/services/conversation_participant_service.go
T
t 18c9354095 refactor: 将客服后端重构为宿主可嵌入模块
- 注入数据库、运行时配置、统一响应、文件存储和平台 AI 能力,补充业务读写工具与客户快捷操作契约。

- 移除模块内重复的组织、客户、工单、标签、技能、旧工作流、MCP 和迁移实现,将身份权限与业务主体交由宿主管理。

- 使用 libSQL 重构向量存储,并完善图片消息、访客身份、排队调度、企业微信和支持聊天页面。

- 统一 HTTP、DTO 与 WebSocket 的 snake_case 协议,补齐模块初始化、业务动作和公共载荷等回归测试。
2026-08-28 22:23:13 +08:00

84 lines
3.4 KiB
Go

package services
import (
"code.tczkiot.com/wlw/ai-agent/internal/models"
"code.tczkiot.com/wlw/ai-agent/internal/pkg/enums"
"code.tczkiot.com/wlw/ai-agent/internal/pkg/openidentity"
"code.tczkiot.com/wlw/ai-agent/internal/pkg/utils"
"code.tczkiot.com/wlw/ai-agent/internal/repositories"
"time"
"code.tczkiot.com/wlw/ai-agent/internal/pkg/httpx/params"
"github.com/mlogclub/simple/sqls"
)
var ConversationParticipantService = newConversationParticipantService()
func newConversationParticipantService() *conversationParticipantService {
return &conversationParticipantService{}
}
type conversationParticipantService struct {
}
func (s *conversationParticipantService) Get(id int64) *models.ConversationParticipant {
return repositories.ConversationParticipantRepository.Get(sqls.DB(), id)
}
func (s *conversationParticipantService) Take(where ...interface{}) *models.ConversationParticipant {
return repositories.ConversationParticipantRepository.Take(sqls.DB(), where...)
}
func (s *conversationParticipantService) Find(cnd *sqls.Cnd) []models.ConversationParticipant {
return repositories.ConversationParticipantRepository.Find(sqls.DB(), cnd)
}
func (s *conversationParticipantService) FindOne(cnd *sqls.Cnd) *models.ConversationParticipant {
return repositories.ConversationParticipantRepository.FindOne(sqls.DB(), cnd)
}
func (s *conversationParticipantService) FindPageByParams(params *params.QueryParams) (list []models.ConversationParticipant, paging *sqls.Paging) {
return repositories.ConversationParticipantRepository.FindPageByParams(sqls.DB(), params)
}
func (s *conversationParticipantService) FindPageByCnd(cnd *sqls.Cnd) (list []models.ConversationParticipant, paging *sqls.Paging) {
return repositories.ConversationParticipantRepository.FindPageByCnd(sqls.DB(), cnd)
}
func (s *conversationParticipantService) Count(cnd *sqls.Cnd) int64 {
return repositories.ConversationParticipantRepository.Count(sqls.DB(), cnd)
}
func (s *conversationParticipantService) Create(t *models.ConversationParticipant) error {
return repositories.ConversationParticipantRepository.Create(sqls.DB(), t)
}
func (s *conversationParticipantService) Update(t *models.ConversationParticipant) error {
return repositories.ConversationParticipantRepository.Update(sqls.DB(), t)
}
func (s *conversationParticipantService) Updates(id int64, columns map[string]interface{}) error {
return repositories.ConversationParticipantRepository.Updates(sqls.DB(), id, columns)
}
func (s *conversationParticipantService) UpdateColumn(id int64, name string, value interface{}) error {
return repositories.ConversationParticipantRepository.UpdateColumn(sqls.DB(), id, name, value)
}
func (s *conversationParticipantService) Delete(id int64) {
repositories.ConversationParticipantRepository.Delete(sqls.DB(), id)
}
func (s *conversationParticipantService) CreateCustomerParticipant(ctx *sqls.TxContext, conversationID int64, externalUser openidentity.ExternalUser) error {
return repositories.ConversationParticipantRepository.Create(ctx.Tx, &models.ConversationParticipant{
ConversationID: conversationID,
ParticipantType: string(enums.IMParticipantTypeCustomer),
ParticipantID: externalUser.SubjectID,
ExternalParticipantID: externalUser.ExternalID,
JoinedAt: new(time.Now()),
Status: enums.StatusOk,
AuditFields: utils.BuildAuditFields(nil),
})
}