use super::*;
pub struct OnDesk {
pub id: String,
pub desk: Origin,
pub desk_root: String,
pub project_root: String,
pub off: i64,
}
impl Store {
pub fn docs_on_desks(&self) -> Result<Vec<OnDesk>> {
let conn = self.conn.lock().unwrap();
let rows = conn
.prepare(
"SELECT d.id, k.id, k.name, COALESCE(d.desk_slot, 0), k.root, p.root, d.desk_off
FROM live_docs d JOIN desks k ON k.id = d.desk_id JOIN projects p ON p.id = d.project_id
WHERE p.root NOT LIKE 'peer:%'",
)?
.query_map([], |r| {
Ok(OnDesk {
id: r.get(0)?,
desk: Origin {
id: r.get(1)?,
name: r.get(2)?,
slot: r.get(3)?,
},
desk_root: r.get(4)?,
project_root: r.get(5)?,
off: r.get(6)?,
})
})?
.collect::<std::result::Result<_, _>>()?;
Ok(rows)
}
pub fn keep_desk_off(&self, id: &str, off: i64) -> Result<()> {
self.conn.lock().unwrap().execute(
"UPDATE docs SET desk_off = ?2 WHERE id = ?1",
params![id, off],
)?;
Ok(())
}
}