moved all validation and parsing from handler to service layer
This commit is contained in:
@@ -2,6 +2,7 @@ package sensors
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -16,20 +17,32 @@ func NewService(repo Repository) *Service {
|
||||
}
|
||||
|
||||
func (s *Service) RegisterSensor(sensor Sensor) error {
|
||||
if err := sensor.Validate(); err != nil {
|
||||
slog.Error("error validating sensor", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
err := s.repo.CreateSensor(sensor)
|
||||
if err != nil {
|
||||
slog.Error("error registering sensor", "error", err)
|
||||
return err
|
||||
if strings.Contains(err.Error(), "duplicate key value") {
|
||||
return ErrSensorAlreadyExists
|
||||
}
|
||||
return ErrRegisteringSensor
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) RegisterSensorData(data SensorData) error {
|
||||
if err := data.Validate(); err != nil {
|
||||
slog.Error("error validating sensor data", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
err := s.repo.CreateSensorData(data)
|
||||
if err != nil {
|
||||
slog.Error("error registering sensor data")
|
||||
slog.Error("error registering sensor data", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -37,15 +50,51 @@ func (s *Service) RegisterSensorData(data SensorData) error {
|
||||
}
|
||||
|
||||
func (s *Service) UpdateSensor(sensor Sensor) error {
|
||||
return s.repo.UpdateSensor(sensor)
|
||||
if err := sensor.Validate(); err != nil {
|
||||
slog.Error("error validating sensor data", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
err := s.repo.UpdateSensor(sensor)
|
||||
if err != nil {
|
||||
slog.Error("error updating sensor", "error", err)
|
||||
if strings.Contains(err.Error(), "duplicate key value") {
|
||||
return ErrSensorAlreadyExists
|
||||
}
|
||||
return ErrUpdatingSensor
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) GetSensor(sensorID string) (Sensor, error) {
|
||||
return s.repo.ReadSensor(sensorID)
|
||||
func (s *Service) GetSensor(sensor SensorRequest) (Sensor, error) {
|
||||
if err := sensor.Validate(); err != nil {
|
||||
slog.Error("error getting sensor", "error", err)
|
||||
return Sensor{}, err
|
||||
}
|
||||
|
||||
return s.repo.ReadSensor(sensor.SensorID)
|
||||
}
|
||||
|
||||
func (s *Service) GetValues(sensorID string, from, to time.Time) ([]SensorData, error) {
|
||||
return s.repo.ReadSensorValues(sensorID, from, to)
|
||||
func (s *Service) GetValues(sensor SensorDataRequest) ([]SensorData, error) {
|
||||
if err := sensor.Validate(); err != nil {
|
||||
slog.Error("error validating sensor data request", "error", err)
|
||||
return []SensorData{}, err
|
||||
}
|
||||
|
||||
from, err := time.Parse(time.RFC3339, *sensor.From)
|
||||
if err != nil {
|
||||
slog.Error("error parsing from date", "error", err)
|
||||
return []SensorData{}, err
|
||||
}
|
||||
|
||||
to, err := time.Parse(time.RFC3339, *sensor.To)
|
||||
if err != nil {
|
||||
slog.Error("error parsing to date", "error", err)
|
||||
return []SensorData{}, err
|
||||
}
|
||||
|
||||
return s.repo.ReadSensorValues(sensor.SensorID, from, to)
|
||||
}
|
||||
|
||||
func (s *Service) ListSensors() ([]Sensor, error) {
|
||||
|
||||
Reference in New Issue
Block a user