init push

This commit is contained in:
2026-05-21 19:52:45 +08:00
commit e3f75311ab
1280 changed files with 179173 additions and 0 deletions

100
backend/usecase/nav.go Normal file
View File

@@ -0,0 +1,100 @@
package usecase
import (
"context"
"errors"
"github.com/google/uuid"
v1 "github.com/chaitin/panda-wiki/api/nav/v1"
"github.com/chaitin/panda-wiki/domain"
"github.com/chaitin/panda-wiki/log"
"github.com/chaitin/panda-wiki/repo/mq"
"github.com/chaitin/panda-wiki/repo/pg"
)
type NavUsecase struct {
navRepo *pg.NavRepository
nodeRepo *pg.NodeRepository
ragRepo *mq.RAGRepository
logger *log.Logger
}
func NewNavUsecase(
navRepo *pg.NavRepository,
nodeRepo *pg.NodeRepository,
ragRepo *mq.RAGRepository,
logger *log.Logger,
) *NavUsecase {
return &NavUsecase{
navRepo: navRepo,
nodeRepo: nodeRepo,
ragRepo: ragRepo,
logger: logger.WithModule("usecase.nav"),
}
}
func (u *NavUsecase) GetList(ctx context.Context, kbID string) ([]v1.NavListResp, error) {
navs, err := u.navRepo.GetList(ctx, kbID)
if err != nil {
return nil, err
}
return navs, nil
}
func (u *NavUsecase) GetReleaseList(ctx context.Context, kbID string) ([]v1.NavListResp, error) {
navs, err := u.navRepo.GetReleaseList(ctx, kbID)
if err != nil {
return nil, err
}
return navs, nil
}
func (u *NavUsecase) Add(ctx context.Context, req *v1.NavAddReq) error {
if req.Position != nil && (*req.Position > domain.MaxPosition || *req.Position < 0) {
return errors.New("specified position is out of range")
}
nav := &domain.Nav{
ID: uuid.New().String(),
KbID: req.KbId,
Name: req.Name,
}
return u.navRepo.Create(ctx, nav, req.Position)
}
func (u *NavUsecase) Move(ctx context.Context, req *v1.NavMoveReq) error {
return u.navRepo.Move(ctx, req.KbId, req.ID, req.PrevID, req.NextID)
}
func (u *NavUsecase) Delete(ctx context.Context, req *v1.NavDeleteReq) error {
nodeIDs, err := u.nodeRepo.GetNodeIDsByNavId(ctx, req.KbId, req.ID)
if err != nil {
return err
}
if len(nodeIDs) > 0 {
docIDs, err := u.nodeRepo.Delete(ctx, req.KbId, nodeIDs)
if err != nil {
return err
}
nodeVectorContentRequests := make([]*domain.NodeReleaseVectorRequest, 0)
for _, docID := range docIDs {
nodeVectorContentRequests = append(nodeVectorContentRequests, &domain.NodeReleaseVectorRequest{
KBID: req.KbId,
DocID: docID,
Action: "delete",
})
}
if err := u.ragRepo.AsyncUpdateNodeReleaseVector(ctx, nodeVectorContentRequests); err != nil {
return err
}
}
return u.navRepo.Delete(ctx, req.KbId, req.ID)
}
func (u *NavUsecase) Update(ctx context.Context, req *v1.NavUpdateReq) error {
return u.navRepo.Update(ctx, req.KbId, req.ID, req.Name)
}