Skip to main content

sway_groups_core/db/entities/
group_state.rs

1//! Group state entity for tracking last focused workspace per group per output.
2
3use sea_orm::entity::prelude::*;
4
5#[sea_orm::model]
6#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
7#[sea_orm(table_name = "group_state")]
8pub struct Model {
9    #[sea_orm(primary_key, auto_increment = true)]
10    pub id: i32,
11    pub output: String,
12    pub group_name: String,
13    pub last_focused_workspace: Option<String>,
14    pub last_visited: Option<DateTime>,
15}
16
17impl ActiveModelBehavior for ActiveModel {}
18
19impl Entity {
20    pub fn find_by_output_and_group(output: &str, group_name: &str) -> Select<Self> {
21        use sea_orm::{ColumnTrait, QueryFilter};
22        Self::find()
23            .filter(Column::Output.eq(output))
24            .filter(Column::GroupName.eq(group_name))
25    }
26
27    pub fn find_by_group_name(group_name: &str) -> Select<Self> {
28        use sea_orm::{ColumnTrait, QueryFilter};
29        Self::find()
30            .filter(Column::GroupName.eq(group_name))
31    }
32
33    pub fn find_by_last_focused_workspace(workspace_name: &str) -> Select<Self> {
34        use sea_orm::{ColumnTrait, QueryFilter};
35        Self::find()
36            .filter(Column::LastFocusedWorkspace.eq(workspace_name))
37    }
38
39    pub fn find_last_visited_output_for_group(group_name: &str) -> Select<Self> {
40        use sea_orm::{ColumnTrait, Order, QueryFilter, QueryOrder};
41        Self::find()
42            .filter(Column::GroupName.eq(group_name))
43            .order_by(Column::LastVisited, Order::Desc)
44    }
45}