package usecase import ( "context" "fmt" "strings" "time" "github.com/chaitin/panda-wiki/domain" "github.com/chaitin/panda-wiki/log" "github.com/chaitin/panda-wiki/repo/pg" ) type SitemapUsecase struct { nodeUsecase *pg.NodeRepository appUsecase *pg.KnowledgeBaseRepository logger *log.Logger } func NewSitemapUsecase(nodeUsecase *pg.NodeRepository, appUsecase *pg.KnowledgeBaseRepository, logger *log.Logger) *SitemapUsecase { return &SitemapUsecase{nodeUsecase: nodeUsecase, appUsecase: appUsecase, logger: logger.WithModule("usecase.sitemap")} } func (u *SitemapUsecase) GetSitemap(ctx context.Context, kbID string) (string, error) { nodes, err := u.nodeUsecase.GetNodeReleaseListByKBID(ctx, kbID) if err != nil { return "", fmt.Errorf("failed to get node release list: %w", err) } kb, err := u.appUsecase.GetKnowledgeBaseByID(ctx, kbID) if err != nil { return "", fmt.Errorf("failed to get knowledge base: %w", err) } sb := strings.Builder{} sb.WriteString(``) sb.WriteString(``) // add welcome sb.WriteString(fmt.Sprintf(`%s/welcome%s`, kb.AccessSettings.BaseURL, time.Now().Format(time.DateOnly))) // add nodes for _, node := range nodes { if node.Type == domain.NodeTypeDocument { sb.WriteString(fmt.Sprintf(`%s%s`, node.GetURL(kb.AccessSettings.BaseURL), node.UpdatedAt.Format(time.DateOnly))) } } sb.WriteString(``) return sb.String(), nil }