78 lines
2.6 KiB
Go
78 lines
2.6 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.imall.cloud/openim/chat/pkg/common/db/model/bot"
|
|
tablebot "git.imall.cloud/openim/chat/pkg/common/db/table/bot"
|
|
"github.com/openimsdk/tools/db/mongoutil"
|
|
"github.com/openimsdk/tools/db/pagination"
|
|
"github.com/openimsdk/tools/db/tx"
|
|
)
|
|
|
|
type BotDatabase interface {
|
|
CreateAgent(ctx context.Context, jobs ...*tablebot.Agent) error
|
|
TakeAgent(ctx context.Context, userID string) (*tablebot.Agent, error)
|
|
FindAgents(ctx context.Context, userIDs []string) ([]*tablebot.Agent, error)
|
|
UpdateAgent(ctx context.Context, userID string, data map[string]any) error
|
|
DeleteAgents(ctx context.Context, userIDs []string) error
|
|
PageAgents(ctx context.Context, userIDs []string, pagination pagination.Pagination) (int64, []*tablebot.Agent, error)
|
|
|
|
TakeConversationRespID(ctx context.Context, convID, agentID string) (*tablebot.ConversationRespID, error)
|
|
UpdateConversationRespID(ctx context.Context, convID, agentID string, data map[string]any) error
|
|
}
|
|
|
|
type botDatabase struct {
|
|
tx tx.Tx
|
|
agent tablebot.AgentInterface
|
|
convRespID tablebot.ConversationRespIDInterface
|
|
}
|
|
|
|
func NewBotDatabase(cli *mongoutil.Client) (BotDatabase, error) {
|
|
agent, err := bot.NewAgent(cli.GetDB())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
convRespID, err := bot.NewConversationRespID(cli.GetDB())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &botDatabase{
|
|
tx: cli.GetTx(),
|
|
agent: agent,
|
|
convRespID: convRespID,
|
|
}, nil
|
|
}
|
|
|
|
func (a *botDatabase) CreateAgent(ctx context.Context, agents ...*tablebot.Agent) error {
|
|
return a.agent.Create(ctx, agents...)
|
|
}
|
|
|
|
func (a *botDatabase) TakeAgent(ctx context.Context, userID string) (*tablebot.Agent, error) {
|
|
return a.agent.Take(ctx, userID)
|
|
}
|
|
|
|
func (a *botDatabase) FindAgents(ctx context.Context, userIDs []string) ([]*tablebot.Agent, error) {
|
|
return a.agent.Find(ctx, userIDs)
|
|
}
|
|
|
|
func (a *botDatabase) UpdateAgent(ctx context.Context, userID string, data map[string]any) error {
|
|
return a.agent.Update(ctx, userID, data)
|
|
}
|
|
|
|
func (a *botDatabase) DeleteAgents(ctx context.Context, userIDs []string) error {
|
|
return a.agent.Delete(ctx, userIDs)
|
|
}
|
|
|
|
func (a *botDatabase) PageAgents(ctx context.Context, userIDs []string, pagination pagination.Pagination) (int64, []*tablebot.Agent, error) {
|
|
return a.agent.Page(ctx, userIDs, pagination)
|
|
}
|
|
|
|
func (a *botDatabase) UpdateConversationRespID(ctx context.Context, convID, agentID string, data map[string]any) error {
|
|
return a.convRespID.Update(ctx, convID, agentID, data)
|
|
}
|
|
|
|
func (a *botDatabase) TakeConversationRespID(ctx context.Context, convID, agentID string) (*tablebot.ConversationRespID, error) {
|
|
return a.convRespID.Take(ctx, convID, agentID)
|
|
}
|