basic service implementation and call it in handlers

This commit is contained in:
Pedro Pérez 2025-10-09 15:47:45 +02:00
parent 15b1e9c82f
commit 92e94df61a
2 changed files with 58 additions and 19 deletions

View File

@ -2,7 +2,9 @@ package sensors
import ( import (
"encoding/json" "encoding/json"
"log/slog"
"nats-app/internal/iot" "nats-app/internal/iot"
"time"
"github.com/nats-io/nats.go" "github.com/nats-io/nats.go"
) )
@ -56,7 +58,14 @@ func (h *Handlers) SetupEndpoints() *Handlers {
func (h *Handlers) register() { func (h *Handlers) register() {
h.NATS.Subscribe(subjectSensorsRegister, func(msg *nats.Msg) { h.NATS.Subscribe(subjectSensorsRegister, func(msg *nats.Msg) {
handleRequest(msg, func(req Sensor) (Sensor, error) { 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 return req, nil
}) })
@ -66,7 +75,13 @@ func (h *Handlers) register() {
func (h *Handlers) update() { func (h *Handlers) update() {
h.NATS.Subscribe(subjectSensorsUpdate, func(msg *nats.Msg) { h.NATS.Subscribe(subjectSensorsUpdate, func(msg *nats.Msg) {
handleRequest(msg, func(req Sensor) (Sensor, error) { 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 return req, nil
}) })
@ -75,26 +90,30 @@ func (h *Handlers) update() {
func (h *Handlers) get() { func (h *Handlers) get() {
h.NATS.Subscribe(subjectSensorsGet, func(msg *nats.Msg) { h.NATS.Subscribe(subjectSensorsGet, func(msg *nats.Msg) {
handleRequest(msg, func(req struct { handleRequest(msg, func(req SensorRequest) (Sensor, error) {
SensorID string `json:"sensor_id"` return h.service.GetSensor(req.SensorID)
}) (Sensor, error) {
// service layer
return Sensor{}, nil
}) })
}) })
} }
func (h *Handlers) getValues() { func (h *Handlers) getValues() {
h.NATS.Subscribe(subjectSensorsValuesGet, func(msg *nats.Msg) { h.NATS.Subscribe(subjectSensorsValuesGet, func(msg *nats.Msg) {
handleRequest(msg, func(req struct { handleRequest(msg, func(req SensorDataRequest) (Sensor, error) {
SensorID string `json:"sensor_id"` if err := req.Validate(); err != nil {
From string `json:"from"` return Sensor{}, err
To string `json:"to"` }
}) ([]SensorData, error) {
// service layer
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() { func (h *Handlers) list() {
h.NATS.Subscribe(subjectSensorsList, func(msg *nats.Msg) { h.NATS.Subscribe(subjectSensorsList, func(msg *nats.Msg) {
handleRequest(msg, func(req struct{}) ([]Sensor, error) { handleRequest(msg, func(req struct{}) ([]Sensor, error) {
// service layer return h.service.ListSensors()
return []Sensor{}, nil
}) })
}) })
} }

View File

@ -1,6 +1,9 @@
package sensors package sensors
import "time" import (
"log/slog"
"time"
)
type Service struct { type Service struct {
repo Repository repo Repository
@ -13,21 +16,40 @@ func NewService(repo Repository) *Service {
} }
func (s *Service) RegisterSensor(sensor Sensor) error { 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 return nil
} }
func (s *Service) UpdateSensor(sensor Sensor) error { func (s *Service) UpdateSensor(sensor Sensor) error {
s.repo.UpdateSensor(sensor)
return nil return nil
} }
func (s *Service) GetSensor(sensorID string) (Sensor, error) { func (s *Service) GetSensor(sensorID string) (Sensor, error) {
s.repo.ReadSensor(sensorID)
return Sensor{}, nil return Sensor{}, nil
} }
func (s *Service) GetValues(sensorID string, from, to time.Time) (Sensor, error) { func (s *Service) GetValues(sensorID string, from, to time.Time) (Sensor, error) {
s.repo.ReadSensorValues(sensorID, from, to)
return Sensor{}, nil return Sensor{}, nil
} }
func (s *Service) ListSensors() ([]Sensor, error) { func (s *Service) ListSensors() ([]Sensor, error) {
s.repo.ReadAllSensors()
return []Sensor{}, nil return []Sensor{}, nil
} }