Something went wrong. Try again.
A simple to-do app focused on tasks that can be completed within a specific time span.
Something went wrong. Try again.
Rust
at rust-backend
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889use sea_orm::{ ActiveValue::{NotSet, Set}, ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter,};use thiserror::Error;use web_push::SubscriptionInfo;
use crate::User;use orm::entities::{prelude::*, web_push_subscription};
#[derive(Error, Debug, PartialEq)]pub enum WebPushServiceError { #[error("database error - caused by: {0}")] DbError(#[from] sea_orm::DbErr),}
pub struct WebPushService {}
impl WebPushService { pub async fn create( user: &User, db: &DatabaseConnection, subscription: SubscriptionInfo, ) -> Result<SubscriptionInfo, WebPushServiceError> { let subscription = WebPushSubscription::insert(web_push_subscription::ActiveModel { id: NotSet, owner_id: Set(user.id.clone()), endpoint: Set(subscription.endpoint), p256dh: Set(subscription.keys.p256dh), auth: Set(subscription.keys.auth), }) .exec_with_returning(db) .await?;
Ok(SubscriptionInfo::new( subscription.endpoint, subscription.p256dh, subscription.auth, )) }
pub async fn exists( user: &User, db: &DatabaseConnection, subscription: &SubscriptionInfo, ) -> Result<bool, WebPushServiceError> { let result = WebPushSubscription::find() .filter(web_push_subscription::Column::OwnerId.eq(&user.id)) .filter(web_push_subscription::Column::Endpoint.eq(&subscription.endpoint)) .filter(web_push_subscription::Column::Auth.eq(&subscription.keys.auth)) .filter(web_push_subscription::Column::P256dh.eq(&subscription.keys.p256dh)) .one(db) .await?;
Ok(result.is_some()) }
pub async fn delete_by_id(db: &DatabaseConnection, id: i32) -> Result<(), WebPushServiceError> { WebPushSubscription::delete_by_id(id).exec(db).await?; Ok(()) }
pub async fn get_all_by_owner_id( db: &DatabaseConnection, owner: &str, ) -> Result<Vec<(SubscriptionInfo, i32)>, WebPushServiceError> { let subscriptions = WebPushSubscription::find() .filter(web_push_subscription::Column::OwnerId.eq(owner)) .all(db) .await?;
let subscriptions = subscriptions .into_iter() .map(|subscription| { ( SubscriptionInfo::new( subscription.endpoint, subscription.p256dh, subscription.auth, ), subscription.id, ) }) .collect();
Ok(subscriptions) }}