feat: add subscription models
This commit is contained in:
parent
3c4af12fa1
commit
caad08c99e
6 changed files with 61 additions and 1 deletions
|
|
@ -1,3 +1,4 @@
|
|||
pub mod device;
|
||||
pub mod session;
|
||||
pub mod subscription;
|
||||
pub mod user;
|
||||
|
|
|
|||
39
src/db/models/subscription.rs
Normal file
39
src/db/models/subscription.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
use diesel::prelude::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::db::{schema::*, DbPool, DbResult};
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Queryable, Selectable)]
|
||||
#[diesel(table_name = subscriptions)]
|
||||
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
|
||||
pub struct Subscription {
|
||||
pub id: i64,
|
||||
pub device_id: i64,
|
||||
pub url: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Insertable)]
|
||||
#[diesel(table_name = subscriptions)]
|
||||
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
|
||||
pub struct NewSubscription {
|
||||
pub device_id: i64,
|
||||
pub url: String,
|
||||
}
|
||||
|
||||
impl Subscription {
|
||||
pub fn for_device(pool: &DbPool, device_id: i64) -> DbResult<Vec<String>> {
|
||||
Ok(subscriptions::dsl::subscriptions
|
||||
.select(subscriptions::url)
|
||||
.filter(subscriptions::device_id.eq(device_id))
|
||||
.get_results(&mut pool.get()?)?)
|
||||
}
|
||||
|
||||
pub fn for_user(pool: &DbPool, user_id: i64) -> DbResult<Vec<String>> {
|
||||
Ok(subscriptions::table
|
||||
.inner_join(devices::table)
|
||||
.filter(devices::user_id.eq(user_id))
|
||||
.select(subscriptions::url)
|
||||
.distinct()
|
||||
.get_results(&mut pool.get()?)?)
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,14 @@ diesel::table! {
|
|||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
subscriptions (id) {
|
||||
id -> BigInt,
|
||||
device_id -> BigInt,
|
||||
url -> Text,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
users (id) {
|
||||
id -> BigInt,
|
||||
|
|
@ -28,9 +36,11 @@ diesel::table! {
|
|||
|
||||
diesel::joinable!(devices -> users (user_id));
|
||||
diesel::joinable!(sessions -> users (user_id));
|
||||
diesel::joinable!(subscriptions -> devices (device_id));
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(
|
||||
devices,
|
||||
sessions,
|
||||
subscriptions,
|
||||
users,
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue