Files
backend/internal/service/knowledge_base_service/get_by_external.go
T
2026-07-15 22:42:31 +08:00

73 lines
2.5 KiB
Go

package knowledge_base_service
import (
"github.com/XingfenD/yoresee_doc/internal/dto"
"github.com/XingfenD/yoresee_doc/internal/status"
"github.com/sirupsen/logrus"
)
type KnowledgeBaseGetByExternalIDOperation struct {
withUserExtend bool
withDocumentExtend bool
req *dto.KnowledgeBaseGetByExternalIDRequest
srvc *KnowledgeBaseService
}
func (s *KnowledgeBaseService) GetByExternalID(req *dto.KnowledgeBaseGetByExternalIDRequest) *KnowledgeBaseGetByExternalIDOperation {
return &KnowledgeBaseGetByExternalIDOperation{
req: req,
srvc: s,
}
}
func (op *KnowledgeBaseGetByExternalIDOperation) WithExtend() *KnowledgeBaseGetByExternalIDOperation {
op.withUserExtend = true
op.withDocumentExtend = true
return op
}
func (op *KnowledgeBaseGetByExternalIDOperation) WithUserExtend() *KnowledgeBaseGetByExternalIDOperation {
op.withUserExtend = true
return op
}
func (op *KnowledgeBaseGetByExternalIDOperation) WithDocumentExtend() *KnowledgeBaseGetByExternalIDOperation {
op.withDocumentExtend = true
return op
}
func (op *KnowledgeBaseGetByExternalIDOperation) Exec() (*dto.KnowledgeBaseResponse, error) {
kbModel, err := op.srvc.knowledgeBaseRepo.GetByExternalID(op.req.KnowledgeBaseExternalID).Exec()
if err != nil {
logrus.Errorf("[Service layer: KnowledgeBaseService] GetByExternalID failed, external_id=%s, err=%+v", op.req.KnowledgeBaseExternalID, err)
return nil, status.GenErrWithCustomMsg(status.StatusKnowledgeBaseNotFound, "knowledge base not found")
}
extendDTO := &dto.KnowledgeBaseExtend{}
if op.withUserExtend {
userModel, err := op.srvc.userRepo.GetByID(kbModel.CreatorUserID).Exec()
if err != nil {
logrus.Errorf("[Service layer: KnowledgeBaseService] Get creator user failed, user_id=%d, err=%+v", kbModel.CreatorUserID, err)
return nil, status.GenErrWithCustomMsg(status.StatusReadDBError, "query creator failed")
}
extendDTO.CreatorUserExternalID = userModel.ExternalID
extendDTO.CreatorName = userModel.Username
}
if op.withDocumentExtend {
ids := []int64{
kbModel.ID,
}
count, err := op.srvc.knowledgeBaseRepo.MGetKnowledgeBaseDocumentsCount(ids).Exec()
if err != nil {
logrus.Errorf("[Service layer: KnowledgeBaseService] MGetKnowledgeBaseDocumentsCount failed, kb_id=%d, err=%+v", kbModel.ID, err)
return nil, status.GenErrWithCustomMsg(status.StatusReadDBError, "query document count failed")
}
extendDTO.DocumentsCount = count[kbModel.ID]
}
return dto.NewKnowledgeBaseResponseFromModel(
kbModel, extendDTO,
), nil
}