47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package share
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
|
|
"github.com/chaitin/panda-wiki/handler"
|
|
"github.com/chaitin/panda-wiki/log"
|
|
"github.com/chaitin/panda-wiki/usecase"
|
|
)
|
|
|
|
type ShareSitemapHandler struct {
|
|
*handler.BaseHandler
|
|
sitemapUsecase *usecase.SitemapUsecase
|
|
appUsecase *usecase.AppUsecase
|
|
logger *log.Logger
|
|
}
|
|
|
|
func NewShareSitemapHandler(echo *echo.Echo, baseHandler *handler.BaseHandler, sitemapUsecase *usecase.SitemapUsecase, appUsecase *usecase.AppUsecase, logger *log.Logger) *ShareSitemapHandler {
|
|
h := &ShareSitemapHandler{
|
|
BaseHandler: baseHandler,
|
|
sitemapUsecase: sitemapUsecase,
|
|
appUsecase: appUsecase,
|
|
logger: logger.WithModule("handler.share.sitemap"),
|
|
}
|
|
|
|
group := echo.Group("/sitemap.xml")
|
|
group.GET("", h.GetSitemap)
|
|
|
|
return h
|
|
}
|
|
|
|
func (h *ShareSitemapHandler) GetSitemap(c echo.Context) error {
|
|
kbID := c.Request().Header.Get("X-KB-ID")
|
|
if kbID == "" {
|
|
return h.NewResponseWithError(c, "kb_id is required", nil)
|
|
}
|
|
|
|
xml, err := h.sitemapUsecase.GetSitemap(c.Request().Context(), kbID)
|
|
if err != nil {
|
|
return h.NewResponseWithError(c, "failed to generate sitemap", err)
|
|
}
|
|
|
|
return c.Blob(http.StatusOK, echo.MIMEApplicationXMLCharsetUTF8, []byte(xml))
|
|
}
|