From 15b1e9c82f14c1bc3ed9430f7f8466a983ec2a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Thu, 9 Oct 2025 15:46:43 +0200 Subject: [PATCH] better models and improve validation --- internal/domains/sensors/domain.go | 46 ++++++++++++++++++------------ internal/domains/sensors/models.go | 20 ++++++------- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/internal/domains/sensors/domain.go b/internal/domains/sensors/domain.go index 29e885c..240c663 100644 --- a/internal/domains/sensors/domain.go +++ b/internal/domains/sensors/domain.go @@ -12,28 +12,31 @@ func (s *Sensor) Validate() error { if s.SensorType == "" { return ErrInvalidSensorType } - return nil -} -func (d *SensorData) Validate() error { - if d.SensorID == "" { - return ErrInvalidSensorIdentifier + if s.SamplingInterval == nil { + defaultInterval := time.Second * 3600 + s.SamplingInterval = &defaultInterval } - if d.Value == nil { - return ErrMissingValue + + if s.ThresholdAbove == nil { + defaultAbove := 100.0 + s.ThresholdAbove = &defaultAbove } - if d.Timestamp.IsZero() { - d.Timestamp = time.Now() + + if s.ThresholdBelow == nil { + defaultBelow := 0.0 + s.ThresholdBelow = &defaultBelow } + return nil } func (d *SensorData) IsOutOfRangeAbove(sensor Sensor) bool { - return *d.Value > sensor.ThresholdAbove + return d.Value > *sensor.ThresholdAbove } func (d *SensorData) IsOutOfRangeBelow(sensor Sensor) bool { - return *d.Value < sensor.ThresholdBelow + return d.Value < *sensor.ThresholdBelow } func (r *SensorRequest) Validate() error { @@ -48,19 +51,23 @@ func (r *SensorDataRequest) Validate() error { return ErrInvalidSensorIdentifier } - if r.To == "" { - r.To = time.Now().Format(time.RFC3339) + if r.To == nil || *r.To == "" { + defaultTo := time.Now().Format(time.RFC3339) + r.To = &defaultTo } else { - if _, err := time.Parse(time.RFC3339, r.To); err != nil { - r.To = time.Now().Format(time.RFC3339) + if _, err := time.Parse(time.RFC3339, *r.To); err != nil { + defaultTo := time.Now().Format(time.RFC3339) + r.To = &defaultTo } } - if r.From == "" { - r.From = time.Now().AddDate(0, 0, -7).Format(time.RFC3339) + if r.From == nil || *r.From == "" { + defaultFrom := time.Now().AddDate(0, 0, -7).Format(time.RFC3339) + r.From = &defaultFrom } else { - if _, err := time.Parse(time.RFC3339, r.From); err != nil { - r.From = time.Now().AddDate(0, 0, -7).Format(time.RFC3339) + if _, err := time.Parse(time.RFC3339, *r.From); err != nil { + defaultFrom := time.Now().AddDate(0, 0, -7).Format(time.RFC3339) + r.From = &defaultFrom } } @@ -72,4 +79,5 @@ var ( ErrInvalidSensorType = errors.New("sensor type is required") ErrSensorNotFound = errors.New("sensor not found") ErrMissingValue = errors.New("sensor value no provided") + ErrSensorAlreadyExists = errors.New("sensor already exists") ) diff --git a/internal/domains/sensors/models.go b/internal/domains/sensors/models.go index f36d908..0c7f58a 100644 --- a/internal/domains/sensors/models.go +++ b/internal/domains/sensors/models.go @@ -15,17 +15,17 @@ const ( ) type Sensor struct { - SensorID string `json:"sensor_id"` - SensorType SType `json:"sensor_type"` - SamplingInterval time.Duration `json:"sampling"` - ThresholdAbove float64 `json:"thresoldabove"` - ThresholdBelow float64 `json:"thresoldbelow"` - SensorData *[]SensorData `json:"sensor_data,omitempty"` + SensorID string `json:"sensor_id"` + SensorType SType `json:"sensor_type"` + SamplingInterval *time.Duration `json:"sampling"` + ThresholdAbove *float64 `json:"thresoldabove"` + ThresholdBelow *float64 `json:"thresoldbelow"` + SensorData *[]SensorData `json:"sensor_data,omitempty"` } type SensorData struct { SensorID string `json:"sensor_id"` - Value *float64 `json:"value"` + Value float64 `json:"value"` Timestamp time.Time `json:"timestamp"` } @@ -34,7 +34,7 @@ type SensorRequest struct { } type SensorDataRequest struct { - SensorID string `json:"sensor_id"` - From string `json:"from"` - To string `json:"to"` + SensorID string `json:"sensor_id"` + From *string `json:"from"` + To *string `json:"to"` }