package controllers import ( "log" "net/http" "strconv" "time" "github.com/gin-gonic/gin" "gitlab.com/pactual1/backend/database/contract" "gitlab.com/pactual1/backend/models" ) func GetLatestContracts(c *gin.Context) { // Get limit, offset, and status from query parameters with defaults limitStr := c.DefaultQuery("limit", "99999999999999999999999999999999") offsetStr := c.DefaultQuery("offset", "0") status := c.DefaultQuery("status", models.ContractStatusActive) // Optional search parameters companyName := c.Query("company_name") startTimeStr := c.Query("start_time") deviceIDsStr := c.QueryArray("deviceIDs[]") // Assuming deviceIDs are passed as an array query parameter // Convert limit and offset to int limit, err := strconv.Atoi(limitStr) if err != nil { log.Printf("GetLatestContracts Error: Invalid limit value: %v", err) c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid limit value"}) return } offset, err := strconv.Atoi(offsetStr) if err != nil { log.Printf("GetLatestContracts Error: Invalid offset value: %v", err) c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid offset value"}) return } // Convert startTime to time.Time from Unix time in seconds var startTime time.Time if startTimeStr != "" { startTimeUnix, err := strconv.ParseInt(startTimeStr, 10, 64) if err != nil { log.Printf("GetLatestContracts Error: Invalid startTime value: %v", err) c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid startTime value"}) return } startTime = time.Unix(startTimeUnix, 0) } // Convert deviceIDs to []int64 var deviceIDs []int64 for _, idStr := range deviceIDsStr { id, err := strconv.ParseInt(idStr, 10, 64) if err != nil { log.Printf("GetLatestContracts Error: Invalid deviceID value: %v", err) c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid deviceID value"}) return } deviceIDs = append(deviceIDs, id) } // Fetch contracts contracts, total, st, err := contract.GetContracts(status, companyName, startTime, deviceIDs,limit, offset) if err != nil { c.JSON(st, gin.H{"error": err.Error()}) return } // Respond with the contracts and the total count c.JSON(http.StatusOK, gin.H{"total": total, "contracts": contracts}) }