weather-api/storage/inmemory-sensor-registry.go
2021-04-25 00:31:27 +02:00

91 lines
2.1 KiB
Go

package storage
import (
"errors"
"github.com/google/uuid"
)
type inmemorySensorRegistry struct {
weatherSensors []*WeatherSensor
}
func NewInmemorySensorRegistry() *inmemorySensorRegistry {
sensorRegistry := new(inmemorySensorRegistry)
return sensorRegistry
}
func (registry *inmemorySensorRegistry) RegisterSensorByName(name string) (*WeatherSensor, error) {
exist, err := registry.ExistSensorName(name)
if err != nil {
return nil, err
}
if exist {
return nil, errors.New("sensorname already exists")
}
sensor := new(WeatherSensor)
sensor.Name = name
sensor.Id = uuid.New()
registry.weatherSensors = append(registry.weatherSensors, sensor)
return sensor, nil
}
func (registry *inmemorySensorRegistry) ExistSensorName(name string) (bool, error) {
for _, s := range registry.weatherSensors {
if s.Name == name {
return true, nil
}
}
return false, nil
}
func (registry *inmemorySensorRegistry) ResolveSensorById(sensorId uuid.UUID) (*WeatherSensor, error) {
for _, s := range registry.weatherSensors {
if s.Id == sensorId {
return s, nil
}
}
return nil, errors.New("sensor does not exist")
}
func (registry *inmemorySensorRegistry) ExistSensor(sensorId uuid.UUID) (bool, error) {
for _, s := range registry.weatherSensors {
if s.Id == sensorId {
return true, nil
}
}
return false, nil
}
func (registry *inmemorySensorRegistry) DeleteSensor(sensorId uuid.UUID) error {
for i, s := range registry.weatherSensors {
if s.Id == sensorId {
registry.weatherSensors = remove(registry.weatherSensors, i)
return nil
}
}
return nil
}
func (registry *inmemorySensorRegistry) UpdateSensor(sensor *WeatherSensor) error {
for i, s := range registry.weatherSensors {
if s.Id == sensor.Id {
registry.weatherSensors[i] = sensor
}
}
return nil
}
func (registry *inmemorySensorRegistry) GetSensors() ([]*WeatherSensor, error) {
return registry.weatherSensors, nil
}
func (registry *inmemorySensorRegistry) Close() error {
return nil
}
func remove(s []*WeatherSensor, i int) []*WeatherSensor {
s[len(s)-1], s[i] = s[i], s[len(s)-1]
return s[:len(s)-1]
}