64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package storage
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
type ConfigVersionRecord struct {
|
|
ID int `json:"id"`
|
|
DeviceID string `json:"device_id"`
|
|
ConfigID string `json:"config_id"`
|
|
ConfigJSON string `json:"config_json"`
|
|
CreatedAt string `json:"created_at"`
|
|
}
|
|
|
|
type ConfigVersionsRepo struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewConfigVersionsRepo(db *sql.DB) *ConfigVersionsRepo {
|
|
return &ConfigVersionsRepo{db: db}
|
|
}
|
|
|
|
func (r *ConfigVersionsRepo) Save(deviceID, configID, configJSON string) error {
|
|
if r == nil || r.db == nil {
|
|
return nil
|
|
}
|
|
_, err := r.db.Exec(`INSERT INTO config_versions(device_id, config_id, config_json, created_at) VALUES(?,?,?,?)`,
|
|
deviceID, configID, configJSON, time.Now().Format(time.RFC3339))
|
|
return err
|
|
}
|
|
|
|
func (r *ConfigVersionsRepo) List(deviceID string) ([]ConfigVersionRecord, error) {
|
|
if r == nil || r.db == nil {
|
|
return nil, nil
|
|
}
|
|
rows, err := r.db.Query(`SELECT id, device_id, config_id, config_json, created_at FROM config_versions WHERE device_id=? ORDER BY id DESC LIMIT 20`, deviceID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var results []ConfigVersionRecord
|
|
for rows.Next() {
|
|
var rec ConfigVersionRecord
|
|
if err := rows.Scan(&rec.ID, &rec.DeviceID, &rec.ConfigID, &rec.ConfigJSON, &rec.CreatedAt); err != nil {
|
|
continue
|
|
}
|
|
results = append(results, rec)
|
|
}
|
|
return results, rows.Err()
|
|
}
|
|
|
|
func (r *ConfigVersionsRepo) GetByID(id int) (*ConfigVersionRecord, error) {
|
|
if r == nil || r.db == nil {
|
|
return nil, nil
|
|
}
|
|
var rec ConfigVersionRecord
|
|
err := r.db.QueryRow(`SELECT id, device_id, config_id, config_json, created_at FROM config_versions WHERE id=?`, id).Scan(&rec.ID, &rec.DeviceID, &rec.ConfigID, &rec.ConfigJSON, &rec.CreatedAt)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &rec, nil
|
|
}
|