// Package handler provides HTTP handlers for various endpoints. package handler import ( "net/http" "modelRT/constants" "modelRT/database" "modelRT/diagram" "modelRT/logger" "modelRT/network" "github.com/gin-gonic/gin" ) // MeasurementGetHandler define measurement query API func MeasurementGetHandler(c *gin.Context) { var request network.MeasurementGetRequest clientToken := c.GetString("client_token") if clientToken == "" { err := constants.ErrGetClientToken logger.Error(c, "failed to get client token from context", "error", err) c.JSON(http.StatusOK, network.FailureResponse{ Code: http.StatusBadRequest, Msg: err.Error(), }) return } if err := c.ShouldBindJSON(&request); err != nil { logger.Error(c, "failed to unmarshal measurement get request", "error", err) c.JSON(http.StatusOK, network.FailureResponse{ Code: http.StatusBadRequest, Msg: err.Error(), }) return } zset := diagram.NewRedisZSet(c, request.MeasurementToken, clientToken, 0, false) points, err := zset.ZRANGE(request.MeasurementToken, 0, -1) if err != nil { logger.Error(c, "failed to get measurement data from redis", "measurement_token", request.MeasurementToken, "error", err) c.JSON(http.StatusOK, network.FailureResponse{ Code: http.StatusInternalServerError, Msg: err.Error(), PayLoad: map[string]interface{}{ "measurement_id": request.MeasurementID, "measurement_token": request.MeasurementToken, }, }) return } pgClient := database.GetPostgresDBClient() measurementInfo, err := database.QueryMeasurementByID(c, pgClient, request.MeasurementID) if err != nil { logger.Error(c, "failed to query measurement by id", "measurement_id", request.MeasurementID, "error", err) c.JSON(http.StatusOK, network.FailureResponse{ Code: http.StatusBadRequest, Msg: err.Error(), PayLoad: map[string]interface{}{ "measurement_id": request.MeasurementID, "measurement_token": request.MeasurementToken, "measurement_value": points, }, }) return } c.JSON(http.StatusOK, network.SuccessResponse{ Code: http.StatusOK, Msg: "success", PayLoad: map[string]interface{}{ "measurement_id": request.MeasurementID, "measurement_token": request.MeasurementToken, "measurement_info": measurementInfo, "measurement_value": points, }, }) }