migrate from github

This commit is contained in:
2026-07-15 22:42:31 +08:00
commit 3ad559f05e
262 changed files with 21637 additions and 0 deletions
@@ -0,0 +1,142 @@
package knowledge_base_service
import (
"github.com/XingfenD/yoresee_doc/internal/dto"
"github.com/XingfenD/yoresee_doc/internal/model"
internal_dto "github.com/XingfenD/yoresee_doc/internal/service/dto"
"github.com/XingfenD/yoresee_doc/internal/status"
"github.com/bytedance/gg/gslice"
"github.com/sirupsen/logrus"
)
type knowledgeBaseListOperation struct {
req *internal_dto.KnowledgeBaseListReq
srvc *KnowledgeBaseService
withDocumentExtend bool
withUserExtend bool
}
func (s *KnowledgeBaseService) list(req *internal_dto.KnowledgeBaseListReq) *knowledgeBaseListOperation {
return &knowledgeBaseListOperation{
req: req,
srvc: s,
}
}
func (op *knowledgeBaseListOperation) WithDocumentExtend() *knowledgeBaseListOperation {
op.withDocumentExtend = true
return op
}
func (op *knowledgeBaseListOperation) WithUserExtend() *knowledgeBaseListOperation {
op.withUserExtend = true
return op
}
func (op *knowledgeBaseListOperation) documentExtend(kbModels []*model.KnowledgeBase, kbExtendMapByID map[int64]*dto.KnowledgeBaseExtend) error {
if op.withDocumentExtend {
kbIDs := gslice.Map(kbModels, func(kbModel *model.KnowledgeBase) int64 {
return kbModel.ID
})
countMapByKbID, err := op.srvc.knowledgeBaseRepo.MGetKnowledgeBaseDocumentsCount(kbIDs).Exec()
if err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: MGetKnowledgeBaseDocumentsCount failed, err: %+v", err)
return status.GenErrWithCustomMsg(status.StatusReadDBError, "query knowledge base document count failed")
}
for id, count := range countMapByKbID {
if _, ok := kbExtendMapByID[id]; !ok {
kbExtendMapByID[id] = &dto.KnowledgeBaseExtend{}
}
kbExtendMapByID[id].DocumentsCount = count
}
}
return nil
}
func (op *knowledgeBaseListOperation) userExtend(kbModels []*model.KnowledgeBase, kbExtendMapByID map[int64]*dto.KnowledgeBaseExtend) error {
if op.withUserExtend {
// collect all user_id
allUserID := gslice.Map(kbModels, func(kb *model.KnowledgeBase) int64 {
return kb.CreatorUserID
})
uniqUserID := gslice.Uniq(allUserID)
usersMapByUserID, err := op.srvc.userRepo.MGetUserByID(uniqUserID).Exec()
if err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: MGetUserByID failed, err: %+v", err)
return status.GenErrWithCustomMsg(status.StatusReadDBError, "query creator users failed")
}
for _, kbModel := range kbModels {
if _, ok := kbExtendMapByID[kbModel.ID]; !ok {
kbExtendMapByID[kbModel.ID] = &dto.KnowledgeBaseExtend{}
}
if user, ok := usersMapByUserID[kbModel.CreatorUserID]; ok {
kbExtendMapByID[kbModel.ID].CreatorUserExternalID = user.ExternalID
kbExtendMapByID[kbModel.ID].CreatorName = user.Username
}
}
}
return nil
}
func (op *knowledgeBaseListOperation) Exec() ([]*dto.KnowledgeBaseResponse, error) {
listOp, err := op.srvc.buildListKnowledgeBaseOperation(op.req)
if err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: buildListKnowledgeBaseOperation failed, err: %+v", err)
return nil, status.GenErrWithCustomMsg(err, "build knowledge base list operation failed")
}
kbModels, err := listOp.Exec()
if err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: list operation exec failed, err: %+v", err)
return nil, status.GenErrWithCustomMsg(err, "list knowledge bases failed")
}
kbExtendMapByID := make(map[int64]*dto.KnowledgeBaseExtend)
if err := op.documentExtend(kbModels, kbExtendMapByID); err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: documentExtend failed, err: %+v", err)
return nil, status.GenErrWithCustomMsg(err, "build knowledge base document extension failed")
}
if err := op.userExtend(kbModels, kbExtendMapByID); err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: userExtend failed, err: %+v", err)
return nil, status.GenErrWithCustomMsg(err, "build knowledge base user extension failed")
}
knowledgeBases := make([]*dto.KnowledgeBaseResponse, 0, len(kbModels))
for _, kb := range kbModels {
knowledgeBases = append(knowledgeBases, dto.NewKnowledgeBaseResponseFromModel(kb, kbExtendMapByID[kb.ID]))
}
return knowledgeBases, nil
}
func (op *knowledgeBaseListOperation) ExecWithTotal() ([]*dto.KnowledgeBaseResponse, int64, error) {
listOp, err := op.srvc.buildListKnowledgeBaseOperation(op.req)
if err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: buildListKnowledgeBaseOperation failed, err: %+v", err)
return nil, 0, status.GenErrWithCustomMsg(err, "build knowledge base list operation failed")
}
kbModels, total, err := listOp.ExecWithTotal()
if err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: list operation exec with total failed, err: %+v", err)
return nil, 0, status.GenErrWithCustomMsg(err, "list knowledge bases failed")
}
kbExtendMapByID := make(map[int64]*dto.KnowledgeBaseExtend)
if err := op.documentExtend(kbModels, kbExtendMapByID); err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: documentExtend failed, err: %+v", err)
return nil, 0, status.GenErrWithCustomMsg(err, "build knowledge base document extension failed")
}
if err := op.userExtend(kbModels, kbExtendMapByID); err != nil {
logrus.Errorf("[Service layer: knowledgeBaseList]: userExtend failed, err: %+v", err)
return nil, 0, status.GenErrWithCustomMsg(err, "build knowledge base user extension failed")
}
knowledgeBases := make([]*dto.KnowledgeBaseResponse, 0, len(kbModels))
for _, kb := range kbModels {
knowledgeBases = append(knowledgeBases, dto.NewKnowledgeBaseResponseFromModel(kb, kbExtendMapByID[kb.ID]))
}
return knowledgeBases, total, nil
}