add register data mechanism
This commit is contained in:
@@ -35,8 +35,11 @@ func (p *pgxRepo) CreateSensor(s Sensor) error {
|
||||
return err
|
||||
}
|
||||
|
||||
const createSensorDataQuery = `insert into registry (sensor_id, value, created_at) values ($1, $2, $3)`
|
||||
|
||||
func (p *pgxRepo) CreateSensorData(s SensorData) error {
|
||||
return nil
|
||||
_, err := p.Exec(context.Background(), createSensorDataQuery, s.SensorID, s.Value, s.Timestamp)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *pgxRepo) UpdateSensor(s Sensor) error {
|
||||
@@ -106,7 +109,32 @@ func (i *inMemory) CreateSensor(s Sensor) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *inMemory) CreateSensorData(s SensorData) error {
|
||||
func (i *inMemory) CreateSensorData(data SensorData) error {
|
||||
i.mu.Lock()
|
||||
defer i.mu.Unlock()
|
||||
|
||||
sensor, exists := i.sensors[data.SensorID]
|
||||
if !exists {
|
||||
return ErrSensorNotFound
|
||||
}
|
||||
|
||||
if sensor.SensorData == nil {
|
||||
sensor.SensorData = &map[int]SensorData{}
|
||||
}
|
||||
|
||||
key := int(data.Timestamp.Unix())
|
||||
(*sensor.SensorData)[key] = data
|
||||
|
||||
if len(*sensor.SensorData) > 100 {
|
||||
oldestKey := key
|
||||
for k := range *sensor.SensorData {
|
||||
if k < oldestKey {
|
||||
oldestKey = k
|
||||
}
|
||||
}
|
||||
delete(*sensor.SensorData, oldestKey)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -169,7 +197,12 @@ func (d *DecoratorRepo) CreateSensor(s Sensor) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *DecoratorRepo) CreateSensorData(s SensorData) error {
|
||||
func (d *DecoratorRepo) CreateSensorData(data SensorData) error {
|
||||
if err := d.db.CreateSensorData(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_ = d.memory.CreateSensorData(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user