package endpoints import ( "context" "fmt" "relynolli-server/models" "relynolli-server/status" "relynolli-server/storage" "time" cmap "github.com/orcaman/concurrent-map/v2" "github.com/gin-gonic/gin" // "relynolli-server/models" // "relynolli-server/services" // "strconv" ) type GetCatalogItemsRequest struct { Limit int `form:"limit" ` Page int `form:"page"` } func (h *handlers) GetCatalogItems(c *gin.Context) { queries := cmap.New[[]string]() for key, val := range c.Request.URL.Query() { queries.Set(key, val) } ctx := context.Background() meta := models.Meta{ RequestStarted: time.Now().Unix(), } LPQuery := new(GetCatalogItemsRequest) LPError := c.ShouldBindQuery(LPQuery) if LPError != nil { meta.RequestFinished = time.Now().Unix() c.JSON(400, models.Response{ Status: status.STATUS_BAD_REQUEST, Info: "Limit and page query params should be integer numbers", Meta: &meta, }) return } if LPQuery.Page == 0 { LPQuery.Page = 1 } if LPQuery.Limit == 0 { LPQuery.Limit = 10 } s := storage.NewStorageCatalog() count, items, err := s.GetCatalogItems(ctx, queries, LPQuery.Limit, (LPQuery.Page-1)*LPQuery.Limit) if err != nil { meta.RequestFinished = time.Now().Unix() c.JSON(500, models.Response{ Status: status.STATUS_SERVER_ERROR, Info: fmt.Sprintf("Cannot resolve request. Details: %s", err.Error()), Meta: &meta}) } meta.Limit = LPQuery.Limit meta.Page = LPQuery.Page meta.RequestFinished = time.Now().Unix() meta.Count = count c.JSON(200, models.Response{ Status: status.STATUS_OK, Data: items, Meta: &meta, }) } type catalogItemReq struct { Code string `uri:"code"` } func (h *handlers) GetCatalogItem(c *gin.Context) { ctx := context.Background() meta := models.Meta{ RequestStarted: time.Now().Unix(), } s := storage.NewStorageCatalog() path := new(catalogItemReq) var err error = nil var statusCode int = 200 var response models.Response = models.Response{ Status: status.STATUS_OK, Meta: &meta, } err = c.ShouldBindUri(path) if err != nil { response.Info = fmt.Sprintf("Error: %s", err.Error()) response.Status = status.STATUS_BAD_REQUEST meta.RequestFinished = time.Now().Unix() statusCode = 400 c.JSON(statusCode, response) return } data, err := s.GetCatalogItemByCode(ctx, path.Code) response.Data = data meta.RequestFinished = time.Now().Unix() if data == nil { statusCode = 404 response.Status = status.STATUS_NOT_FOUND } c.JSON(statusCode, response) }