From 78723d3fcd149114a7533601771fdface4ed9c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Thu, 9 Oct 2025 23:53:32 +0200 Subject: [PATCH] add read sensor --- internal/domains/sensors/handlers.go | 19 +++++++++++++++---- internal/domains/sensors/repository.go | 23 +++++++++++++++++++++-- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/internal/domains/sensors/handlers.go b/internal/domains/sensors/handlers.go index 77cea5c..32eb1e7 100644 --- a/internal/domains/sensors/handlers.go +++ b/internal/domains/sensors/handlers.go @@ -37,6 +37,9 @@ func NewHandlers(service *Service, iot *iot.IoTDevice) *Handlers { slog.Info("started simulator for sensor", "sensor_id", sensor.SensorID) } + sensors, _ := service.repo.ReadAllSensors() + slog.Info("sensors", "sens", sensors) + return &Handlers{ service: service, IoTDevice: iot, @@ -128,6 +131,8 @@ func (h *Handlers) registerData() { func (h *Handlers) update() { h.NATS.Subscribe(subjectSensorsUpdate, func(msg *nats.Msg) { handleRequest(msg, func(req Sensor) (Sensor, error) { + slog.Debug("calling sensor.update", "payload", req) + if err := req.Validate(); err != nil { return Sensor{}, err } @@ -144,6 +149,12 @@ func (h *Handlers) update() { func (h *Handlers) get() { h.NATS.Subscribe(subjectSensorsGet, func(msg *nats.Msg) { handleRequest(msg, func(req SensorRequest) (Sensor, error) { + slog.Debug("calling sensor.get", "payload", req) + + if err := req.Validate(); err != nil { + return Sensor{}, err + } + return h.service.GetSensor(req.SensorID) }) }) @@ -151,19 +162,19 @@ func (h *Handlers) get() { func (h *Handlers) getValues() { h.NATS.Subscribe(subjectSensorsValuesGet, func(msg *nats.Msg) { - handleRequest(msg, func(req SensorDataRequest) (Sensor, error) { + handleRequest(msg, func(req SensorDataRequest) ([]SensorData, error) { if err := req.Validate(); err != nil { - return Sensor{}, err + return []SensorData{}, err } from, err := time.Parse(time.RFC3339, *req.From) if err != nil { - return Sensor{}, err + return []SensorData{}, err } to, err := time.Parse(time.RFC3339, *req.To) if err != nil { - return Sensor{}, err + return []SensorData{}, err } return h.service.GetValues(req.SensorID, from, to) diff --git a/internal/domains/sensors/repository.go b/internal/domains/sensors/repository.go index 2d1b3d2..e4274f2 100644 --- a/internal/domains/sensors/repository.go +++ b/internal/domains/sensors/repository.go @@ -143,7 +143,15 @@ func (i *inMemory) UpdateSensor(s Sensor) error { } func (i *inMemory) ReadSensor(sensorID string) (Sensor, error) { - panic("unimplemented") + i.mu.Lock() + defer i.mu.Unlock() + + sensor, exists := i.sensors[sensorID] + if !exists { + return Sensor{}, ErrSensorNotFound + } + + return *sensor, nil } func (i *inMemory) ReadSensorValues(sensorID string, from time.Time, to time.Time) ([]SensorData, error) { @@ -234,10 +242,21 @@ func (d *DecoratorRepo) ReadSensorValues(sensorID string, from, to time.Time) ([ } func (d *DecoratorRepo) ReadAllSensors() ([]Sensor, error) { + var sensors []Sensor + sensors, err := d.memory.ReadAllSensors() if err == nil && len(sensors) > 0 { return sensors, nil } - return d.db.ReadAllSensors() + sensors, err = d.db.ReadAllSensors() + if err != nil { + return []Sensor{}, err + } + + for _, s := range sensors { + _ = d.memory.CreateSensor(s) + } + + return sensors, nil }