package handlers import ( "net/http" "github.com/gin-gonic/gin" "github.com/google/uuid" "go.uber.org/zap" ocrService "rmser/internal/services/ocr" "rmser/pkg/logger" ) type OCRHandler struct { service *ocrService.Service } func NewOCRHandler(service *ocrService.Service) *OCRHandler { return &OCRHandler{service: service} } // GetCatalog возвращает список товаров для OCR сервиса func (h *OCRHandler) GetCatalog(c *gin.Context) { items, err := h.service.GetCatalogForIndexing() if err != nil { logger.Log.Error("Ошибка получения каталога для OCR", zap.Error(err)) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, items) } type MatchRequest struct { RawName string `json:"raw_name" binding:"required"` ProductID string `json:"product_id" binding:"required"` } // SaveMatch сохраняет привязку (обучение) func (h *OCRHandler) SaveMatch(c *gin.Context) { var req MatchRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } pID, err := uuid.Parse(req.ProductID) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid product_id format"}) return } if err := h.service.SaveMapping(req.RawName, pID); err != nil { logger.Log.Error("Ошибка сохранения матчинга", zap.Error(err)) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"status": "saved"}) }