From 92e94df61a379252bb13df6bf204457c6221afbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Thu, 9 Oct 2025 15:47:45 +0200 Subject: [PATCH] basic service implementation and call it in handlers --- internal/domains/sensors/handlers.go | 53 ++++++++++++++++++---------- internal/domains/sensors/service.go | 24 ++++++++++++- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/internal/domains/sensors/handlers.go b/internal/domains/sensors/handlers.go index f160525..27c2c6f 100644 --- a/internal/domains/sensors/handlers.go +++ b/internal/domains/sensors/handlers.go @@ -2,7 +2,9 @@ package sensors import ( "encoding/json" + "log/slog" "nats-app/internal/iot" + "time" "github.com/nats-io/nats.go" ) @@ -56,7 +58,14 @@ func (h *Handlers) SetupEndpoints() *Handlers { func (h *Handlers) register() { h.NATS.Subscribe(subjectSensorsRegister, func(msg *nats.Msg) { handleRequest(msg, func(req Sensor) (Sensor, error) { - // service layer + if err := req.Validate(); err != nil { + slog.Error("error validating sensor", "error", err) + return Sensor{}, err + } + + if err := h.service.RegisterSensor(req); err != nil { + return Sensor{}, err + } return req, nil }) @@ -66,7 +75,13 @@ func (h *Handlers) register() { func (h *Handlers) update() { h.NATS.Subscribe(subjectSensorsUpdate, func(msg *nats.Msg) { handleRequest(msg, func(req Sensor) (Sensor, error) { - // service layer + if err := req.Validate(); err != nil { + return Sensor{}, err + } + + if err := h.service.UpdateSensor(req); err != nil { + return Sensor{}, err + } return req, nil }) @@ -75,26 +90,30 @@ func (h *Handlers) update() { func (h *Handlers) get() { h.NATS.Subscribe(subjectSensorsGet, func(msg *nats.Msg) { - handleRequest(msg, func(req struct { - SensorID string `json:"sensor_id"` - }) (Sensor, error) { - // service layer - - return Sensor{}, nil + handleRequest(msg, func(req SensorRequest) (Sensor, error) { + return h.service.GetSensor(req.SensorID) }) }) } func (h *Handlers) getValues() { h.NATS.Subscribe(subjectSensorsValuesGet, func(msg *nats.Msg) { - handleRequest(msg, func(req struct { - SensorID string `json:"sensor_id"` - From string `json:"from"` - To string `json:"to"` - }) ([]SensorData, error) { - // service layer + handleRequest(msg, func(req SensorDataRequest) (Sensor, error) { + if err := req.Validate(); err != nil { + return Sensor{}, err + } - return []SensorData{}, nil + from, err := time.Parse(time.RFC3339, *req.From) + if err != nil { + return Sensor{}, err + } + + to, err := time.Parse(time.RFC3339, *req.To) + if err != nil { + return Sensor{}, err + } + + return h.service.GetValues(req.SensorID, from, to) }) }) } @@ -102,9 +121,7 @@ func (h *Handlers) getValues() { func (h *Handlers) list() { h.NATS.Subscribe(subjectSensorsList, func(msg *nats.Msg) { handleRequest(msg, func(req struct{}) ([]Sensor, error) { - // service layer - - return []Sensor{}, nil + return h.service.ListSensors() }) }) } diff --git a/internal/domains/sensors/service.go b/internal/domains/sensors/service.go index 3f29d2a..0044712 100644 --- a/internal/domains/sensors/service.go +++ b/internal/domains/sensors/service.go @@ -1,6 +1,9 @@ package sensors -import "time" +import ( + "log/slog" + "time" +) type Service struct { repo Repository @@ -13,21 +16,40 @@ func NewService(repo Repository) *Service { } func (s *Service) RegisterSensor(sensor Sensor) error { + + err := s.repo.CreateSensor(sensor) + if err != nil { + slog.Error("error registering sensor", "error", err) + return err + } + return nil } func (s *Service) UpdateSensor(sensor Sensor) error { + + s.repo.UpdateSensor(sensor) + return nil } func (s *Service) GetSensor(sensorID string) (Sensor, error) { + + s.repo.ReadSensor(sensorID) + return Sensor{}, nil } func (s *Service) GetValues(sensorID string, from, to time.Time) (Sensor, error) { + + s.repo.ReadSensorValues(sensorID, from, to) + return Sensor{}, nil } func (s *Service) ListSensors() ([]Sensor, error) { + + s.repo.ReadAllSensors() + return []Sensor{}, nil }