This commit is contained in:
Mateusz Gruszczyński
2026-08-25 18:10:51 +02:00
parent 440c7c3a8d
commit 26d8f9f83a
21 changed files with 1031 additions and 98 deletions
+29 -1
View File
@@ -5,7 +5,7 @@ use rusqlite::{params, Connection, OptionalExtension};
use serde::{de::DeserializeOwned, Serialize};
use serde_json::Value;
use crate::{
models::{ApiTokenInfo, Automation, ConfigurationExport, Device, EventLog, HaReading, Reading, RuntimeSettings, Schedule, Zone, ZoneReading},
models::{ApiTokenInfo, Automation, ClimateGroup, ConfigurationExport, Device, EventLog, HaReading, Reading, RuntimeSettings, Schedule, Zone, ZoneReading},
queries,
};
@@ -110,6 +110,28 @@ impl Db {
Ok(changed)
}
pub fn save_group(&self, group: &ClimateGroup) -> Result<()> {
let payload = Self::to_json(group)?;
let conn = self.lock()?;
conn.execute(
queries::UPSERT_GROUP,
params![group.id, payload, group.updated_at.to_rfc3339()],
)?;
Ok(())
}
pub fn list_groups(&self) -> Result<Vec<ClimateGroup>> {
self.list_payloads(queries::LIST_GROUPS)
}
pub fn get_group(&self, id: &str) -> Result<Option<ClimateGroup>> {
self.get_payload(queries::GET_GROUP, id)
}
pub fn delete_group(&self, id: &str) -> Result<bool> {
self.delete_by_id("groups", id)
}
pub fn save_schedule(&self, schedule: &Schedule) -> Result<()> {
let payload = Self::to_json(schedule)?;
let conn = self.lock()?;
@@ -187,6 +209,7 @@ impl Db {
let sql = match table {
"schedules" => queries::DELETE_SCHEDULE,
"automations" => queries::DELETE_AUTOMATION,
"groups" => queries::DELETE_GROUP,
_ => anyhow::bail!("unsupported table"),
};
let conn = self.lock()?;
@@ -523,6 +546,7 @@ impl Db {
settings,
devices: self.list_devices()?,
zones: self.list_zones()?,
groups: self.list_groups()?,
schedules: self.list_schedules()?,
automations: self.list_automations()?,
})
@@ -540,6 +564,10 @@ impl Db {
let payload = Self::to_json(zone)?;
tx.execute(queries::UPSERT_ZONE, params![zone.id, payload, zone.updated_at.to_rfc3339()])?;
}
for group in &export.groups {
let payload = Self::to_json(group)?;
tx.execute(queries::UPSERT_GROUP, params![group.id, payload, group.updated_at.to_rfc3339()])?;
}
for schedule in &export.schedules {
let payload = Self::to_json(schedule)?;
tx.execute(queries::UPSERT_SCHEDULE, params![schedule.id, schedule.zone_id, payload, schedule.updated_at.to_rfc3339()])?;