add register data mechanism
This commit is contained in:
@@ -15,6 +15,7 @@ const (
|
||||
subjectSensorsGet = "sensors.get"
|
||||
subjectSensorsValuesGet = "sensors.values.get"
|
||||
subjectSensorsList = "sensors.list"
|
||||
subjectSensorsData = "sensors.data."
|
||||
)
|
||||
|
||||
type Handlers struct {
|
||||
@@ -48,8 +49,23 @@ func handleRequest[Req any, Res any](msg *nats.Msg, handler func(Req) (Res, erro
|
||||
msg.Respond(response)
|
||||
}
|
||||
|
||||
func handlePublish[Req any](msg *nats.Msg, handler func(Req) error) {
|
||||
var req Req
|
||||
if len(msg.Data) > 0 {
|
||||
if err := json.Unmarshal(msg.Data, &req); err != nil {
|
||||
slog.Error("failed to unmarshal message", "error", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := handler(req); err != nil {
|
||||
slog.Error("handler error", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handlers) SetupEndpoints() *Handlers {
|
||||
h.register()
|
||||
h.registerData()
|
||||
h.update()
|
||||
h.get()
|
||||
h.getValues()
|
||||
@@ -74,6 +90,25 @@ func (h *Handlers) register() {
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Handlers) registerData() {
|
||||
h.NATS.Subscribe(subjectSensorsData+"*", func(msg *nats.Msg) {
|
||||
handlePublish(msg, func(data SensorData) error {
|
||||
if err := data.Validate(); err != nil {
|
||||
slog.Error("error validating sensor data", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err := h.service.RegisterSensorData(data); err != nil {
|
||||
slog.Error("failed to save sensor data", "error", err, "sensor_id", data.SensorID)
|
||||
return err
|
||||
}
|
||||
|
||||
slog.Debug("sensor data saved", "sensor_id", data.SensorID, "value", data.Value)
|
||||
return nil
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Handlers) update() {
|
||||
h.NATS.Subscribe(subjectSensorsUpdate, func(msg *nats.Msg) {
|
||||
handleRequest(msg, func(req Sensor) (Sensor, error) {
|
||||
|
||||
Reference in New Issue
Block a user