boilerplate code
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package sensors
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"nats-app/internal/iot"
|
||||
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
const (
|
||||
subjectSensorsRegister = "sensors.register"
|
||||
subjectSensorsUpdate = "sensors.update"
|
||||
subjectSensorsGet = "sensors.get"
|
||||
subjectSensorsValuesGet = "sensors.values.get"
|
||||
subjectSensorsList = "sensors.list"
|
||||
)
|
||||
|
||||
type Handlers struct {
|
||||
service *Service
|
||||
*iot.IoTDevice
|
||||
}
|
||||
|
||||
func NewHandlers(service *Service, iot *iot.IoTDevice) *Handlers {
|
||||
return &Handlers{
|
||||
service: service,
|
||||
IoTDevice: iot,
|
||||
}
|
||||
}
|
||||
|
||||
func handleRequest[Req any, Res any](msg *nats.Msg, handler func(Req) (Res, error)) {
|
||||
var req Req
|
||||
if err := json.Unmarshal(msg.Data, &req); err != nil {
|
||||
msg.Respond([]byte(`{"error":"invalid request"}`))
|
||||
return
|
||||
}
|
||||
|
||||
result, err := handler(req)
|
||||
if err != nil {
|
||||
msg.Respond([]byte(`{"error":"` + err.Error() + `"}`))
|
||||
return
|
||||
}
|
||||
|
||||
response, _ := json.Marshal(result)
|
||||
msg.Respond(response)
|
||||
}
|
||||
|
||||
func (h *Handlers) SetupEndpoints() *Handlers {
|
||||
h.register()
|
||||
h.update()
|
||||
h.get()
|
||||
h.getValues()
|
||||
h.list()
|
||||
return h
|
||||
}
|
||||
|
||||
func (h *Handlers) register() {
|
||||
h.NATS.Subscribe(subjectSensorsRegister, func(msg *nats.Msg) {
|
||||
handleRequest(msg, func(req Sensor) (Sensor, error) {
|
||||
// service layer
|
||||
|
||||
return req, nil
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Handlers) update() {
|
||||
h.NATS.Subscribe(subjectSensorsUpdate, func(msg *nats.Msg) {
|
||||
handleRequest(msg, func(req Sensor) (Sensor, error) {
|
||||
// service layer
|
||||
|
||||
return req, nil
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
return []SensorData{}, nil
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Handlers) list() {
|
||||
h.NATS.Subscribe(subjectSensorsList, func(msg *nats.Msg) {
|
||||
handleRequest(msg, func(req struct{}) ([]Sensor, error) {
|
||||
// service layer
|
||||
|
||||
return []Sensor{}, nil
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user