// Package handler provides HTTP handlers for various endpoints. package handler import ( "net/http" "modelRT/constants" "modelRT/database" "modelRT/logger" "modelRT/network" "github.com/gin-gonic/gin" ) // MeasurementLinkCreateHandler defines the measurement link creation api func MeasurementLinkCreateHandler(c *gin.Context) { var request network.MeasurementCreateRequest 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 create request", "error", err) c.JSON(http.StatusOK, network.FailureResponse{ Code: http.StatusBadRequest, Msg: "Invalid request body format: " + err.Error(), }) return } pgClient := database.GetPostgresDBClient() var createInfo network.MeasurementCreateInfo newMeasurementID, err := database.CreateMeasurement(c, pgClient, createInfo) if err != nil { logger.Error(c, "failed to insert new measurement into postgres", "data", request.MeasurementData, "error", err) c.JSON(http.StatusOK, network.FailureResponse{ Code: http.StatusInternalServerError, Msg: "Failed to create measurement record: " + err.Error(), Payload: map[string]any{ "data_attempted": request.MeasurementData, }, }) return } logger.Info(c, "successfully created new measurement record", "measurement_id", newMeasurementID) c.JSON(http.StatusOK, network.SuccessResponse{ Code: http.StatusOK, Msg: "Measurement created successfully", Payload: map[string]any{ "measurement_id": newMeasurementID, }, }) }