package handlers import ( "git.mchus.pro/mchus/priceforge/internal/repository" "git.mchus.pro/mchus/priceforge/internal/services" "github.com/gin-gonic/gin" "net/http" "strconv" ) type ComponentHandler struct { componentService *services.ComponentService } func NewComponentHandler(componentService *services.ComponentService) *ComponentHandler { return &ComponentHandler{ componentService: componentService, } } func (h *ComponentHandler) List(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) perPage, _ := strconv.Atoi(c.DefaultQuery("per_page", "20")) if page < 1 { page = 1 } if perPage < 1 { perPage = 20 } filter := repository.ComponentFilter{ Category: c.Query("category"), Search: c.Query("search"), HasPrice: c.Query("has_price") == "true", ExcludeHidden: c.Query("include_hidden") != "true", // По умолчанию скрытые не показываются } result, err := h.componentService.List(filter, page, perPage) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, result) } func (h *ComponentHandler) Get(c *gin.Context) { lotName := c.Param("lot_name") component, err := h.componentService.GetByLotName(lotName) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "component not found"}) return } c.JSON(http.StatusOK, component) } func (h *ComponentHandler) GetCategories(c *gin.Context) { categories, err := h.componentService.GetCategories() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, categories) }