fix(db): return time in RFC3339 to avoid breakchange
Assisted-by: Junie:claude-opus-4.8 Signed-off-by: Klagarge <remi@heredero.ch>
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/apache/arrow-go/v18/arrow"
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
swaggerFiles "github.com/swaggo/files"
|
||||
@@ -298,6 +299,20 @@ func formatField(v any) string {
|
||||
}
|
||||
}
|
||||
|
||||
// formatTime normalizes a time value (possibly a nanosecond int64) into an RFC3339 UTC string.
|
||||
func formatTime(v any) any {
|
||||
switch t := v.(type) {
|
||||
case time.Time:
|
||||
return t.UTC().Format(time.RFC3339)
|
||||
case arrow.Timestamp:
|
||||
return time.Unix(0, int64(t)).UTC().Format(time.RFC3339)
|
||||
case int64:
|
||||
return time.Unix(0, t).UTC().Format(time.RFC3339)
|
||||
default:
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
func (g *RestGateway) Run(addr string) error {
|
||||
return g.engine.Run(addr)
|
||||
}
|
||||
@@ -343,7 +358,7 @@ func (g *RestGateway) getRoomCurrent(c *gin.Context) {
|
||||
// Get the last record for the specific room by matching node IDs, aggregated by 5m intervals
|
||||
query := fmt.Sprintf(`
|
||||
SELECT
|
||||
date_bin(INTERVAL '5 minutes', time) AS time,
|
||||
date_bin(INTERVAL '5 minutes', time)::TIMESTAMP AS time,
|
||||
ROUND(AVG(co2_ppm)) AS co2_ppm,
|
||||
ROUND(AVG(temp), 2) AS temp,
|
||||
ROUND(AVG(humidity), 2) AS humidity,
|
||||
@@ -367,6 +382,9 @@ func (g *RestGateway) getRoomCurrent(c *gin.Context) {
|
||||
if it.Next() {
|
||||
val := it.Value()
|
||||
val["room"] = roomID
|
||||
if t, ok := val["time"]; ok {
|
||||
val["time"] = formatTime(t)
|
||||
}
|
||||
c.JSON(http.StatusOK, val)
|
||||
return
|
||||
}
|
||||
@@ -404,7 +422,7 @@ func (g *RestGateway) getRoomHistory(c *gin.Context) {
|
||||
|
||||
query := fmt.Sprintf(`
|
||||
SELECT
|
||||
date_bin(INTERVAL '5 minutes', time) AS time,
|
||||
date_bin(INTERVAL '5 minutes', time)::TIMESTAMP AS time,
|
||||
ROUND(AVG(co2_ppm)) AS co2_ppm,
|
||||
ROUND(AVG(temp), 2) AS temp,
|
||||
ROUND(AVG(humidity), 2) AS humidity,
|
||||
@@ -428,6 +446,9 @@ func (g *RestGateway) getRoomHistory(c *gin.Context) {
|
||||
for it.Next() {
|
||||
val := it.Value()
|
||||
val["room"] = roomID
|
||||
if t, ok := val["time"]; ok {
|
||||
val["time"] = formatTime(t)
|
||||
}
|
||||
history = append(history, val)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user