cfgd_core/state/
managed.rs1use rusqlite::params;
2
3use super::StateStore;
4use super::types::ManagedResource;
5use crate::errors::Result;
6
7impl StateStore {
8 pub fn upsert_managed_resource(
10 &self,
11 resource_type: &str,
12 resource_id: &str,
13 source: &str,
14 hash: Option<&str>,
15 apply_id: Option<i64>,
16 ) -> Result<()> {
17 self.conn
18 .execute(
19 "INSERT INTO managed_resources (resource_type, resource_id, source, last_hash, last_applied)
20 VALUES (?1, ?2, ?3, ?4, ?5)
21 ON CONFLICT(resource_type, resource_id) DO UPDATE SET
22 source = excluded.source,
23 last_hash = excluded.last_hash,
24 last_applied = excluded.last_applied",
25 params![resource_type, resource_id, source, hash, apply_id],
26 )
27 ?;
28 Ok(())
29 }
30
31 pub fn is_resource_managed(&self, resource_type: &str, resource_id: &str) -> Result<bool> {
33 let count: i64 = self.conn.query_row(
34 "SELECT COUNT(*) FROM managed_resources WHERE resource_type = ?1 AND resource_id = ?2",
35 params![resource_type, resource_id],
36 |row| row.get(0),
37 )?;
38 Ok(count > 0)
39 }
40
41 pub fn managed_resources(&self) -> Result<Vec<ManagedResource>> {
43 let mut stmt = self
44 .conn
45 .prepare(
46 "SELECT resource_type, resource_id, source, last_hash, last_applied FROM managed_resources ORDER BY resource_type, resource_id",
47 )
48 ?;
49
50 let resources = stmt
51 .query_map([], |row| {
52 Ok(ManagedResource {
53 resource_type: row.get(0)?,
54 resource_id: row.get(1)?,
55 source: row.get(2)?,
56 last_hash: row.get(3)?,
57 last_applied: row.get(4)?,
58 })
59 })?
60 .collect::<std::result::Result<Vec<_>, _>>()?;
61
62 Ok(resources)
63 }
64
65 pub fn managed_resources_by_source(&self, source_name: &str) -> Result<Vec<ManagedResource>> {
67 let mut stmt = self.conn.prepare(
68 "SELECT resource_type, resource_id, source, last_hash, last_applied
69 FROM managed_resources WHERE source = ?1 ORDER BY resource_type, resource_id",
70 )?;
71
72 let resources = stmt
73 .query_map(params![source_name], |row| {
74 Ok(ManagedResource {
75 resource_type: row.get(0)?,
76 resource_id: row.get(1)?,
77 source: row.get(2)?,
78 last_hash: row.get(3)?,
79 last_applied: row.get(4)?,
80 })
81 })?
82 .collect::<std::result::Result<Vec<_>, _>>()?;
83
84 Ok(resources)
85 }
86}