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") }