73 lines
2.4 KiB
Go
73 lines
2.4 KiB
Go
package scraper
|
|
|
|
import (
|
|
"tm/pkg/response"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
// Handler handles HTTP requests for scraper operations
|
|
type Handler struct {
|
|
service Service
|
|
}
|
|
|
|
// NewHandler creates a new scraper handler
|
|
func NewHandler(service Service) *Handler {
|
|
return &Handler{
|
|
service: service,
|
|
}
|
|
}
|
|
|
|
// ScrapeDocuments handles document scraping requests
|
|
// @Summary Scrape documents from external source
|
|
// @Description Scrapes documents from TendSign and uploads them to MinIO storage
|
|
// @Tags Admin-Scraper
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param request body ScrapeRequestForm true "Scraping request information"
|
|
// @Success 200 {object} response.Response{data=ScrapeResponse}
|
|
// @Failure 400 {object} response.Response
|
|
// @Failure 500 {object} response.Response
|
|
// @Router /admin/v1/scraper/download [post]
|
|
func (h *Handler) ScrapeDocuments(c echo.Context) error {
|
|
form, err := response.Parse[ScrapeRequestForm](c)
|
|
if err != nil {
|
|
return response.ValidationError(c, "Invalid request data", err.Error())
|
|
}
|
|
|
|
result, err := h.service.ScrapeDocuments(c.Request().Context(), form)
|
|
if err != nil {
|
|
return response.InternalServerError(c, "Failed to scrape documents")
|
|
}
|
|
|
|
return response.Success(c, result, "Documents scraped and uploaded successfully")
|
|
}
|
|
|
|
// TriggerTEDOneTimeScraping handles TED one-time scraping requests
|
|
// @Summary Trigger TED one-time scraping
|
|
// @Description Starts TED one-time scraping for the specified date range. The operation runs asynchronously; check logs for progress.
|
|
// @Tags Admin-Scraper
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param request body TEDOneTimeScrapeForm true "Date range for scraping (DD/MM/YYYY)"
|
|
// @Success 202 {object} response.APIResponse "TED scraping started"
|
|
// @Failure 400 {object} response.APIResponse "Invalid date format or range"
|
|
// @Failure 500 {object} response.APIResponse "TED scraping not configured"
|
|
// @Security BearerAuth
|
|
// @Router /admin/v1/scraper/ted/one-time [post]
|
|
func (h *Handler) TriggerTEDOneTimeScraping(c echo.Context) error {
|
|
form, err := response.Parse[TEDOneTimeScrapeForm](c)
|
|
if err != nil {
|
|
return response.ValidationError(c, "Invalid request data", err.Error())
|
|
}
|
|
|
|
err = h.service.TriggerTEDOneTimeScraping(c.Request().Context(), form)
|
|
if err != nil {
|
|
return response.BadRequest(c, err.Error(), "")
|
|
}
|
|
|
|
return response.Accepted(c, map[string]string{
|
|
"message": "TED one-time scraping started. Check logs for progress.",
|
|
}, "TED one-time scraping started")
|
|
}
|