palpo_data/user/
filter.rs

1use diesel::prelude::*;
2
3use crate::core::{client::filter::FilterDefinition, identifiers::*, JsonValue, UnixMillis};
4use crate::schema::*;
5use crate::{connect, DataResult};
6
7#[derive(Identifiable, Queryable, Debug, Clone)]
8#[diesel(table_name = user_filters)]
9pub struct DbUserFilter {
10    pub id: i64,
11    pub user_id: OwnedUserId,
12    pub filter: JsonValue,
13    pub created_at: UnixMillis,
14}
15
16#[derive(Insertable, Debug, Clone)]
17#[diesel(table_name = user_filters)]
18pub struct NewDbUserFilter {
19    pub user_id: OwnedUserId,
20    pub filter: JsonValue,
21    pub created_at: UnixMillis,
22}
23
24pub fn get_filter(user_id: &UserId, filter_id: i64) -> DataResult<Option<FilterDefinition>> {
25    let filter = user_filters::table
26        .filter(user_filters::id.eq(filter_id))
27        .filter(user_filters::user_id.eq(user_id))
28        .select(user_filters::filter)
29        .first(&mut *connect()?)
30        .optional()?;
31    if let Some(filter) = filter {
32        Ok(Some(serde_json::from_value(filter)?))
33    } else {
34        Ok(None)
35    }
36}
37
38pub fn create_filter(user_id: &UserId, filter: &FilterDefinition) -> DataResult<i64> {
39    let filter = diesel::insert_into(user_filters::table)
40        .values(NewDbUserFilter {
41            user_id: user_id.to_owned(),
42            filter: serde_json::to_value(filter)?,
43            created_at: UnixMillis::now(),
44        })
45        .get_result::<DbUserFilter>(&mut *connect()?)?;
46    Ok(filter.id)
47}