palpo_data/user/
filter.rs1use 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}