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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104use sea_orm::{ ActiveValue::{NotSet, Set}, DatabaseConnection, EntityTrait, QueryFilter,};use thiserror::Error;use web_push::SubscriptionInfo;
use crate::User;use orm::entities::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 = web_push_subscription::Entity::insert(web_push_subscription::ActiveModel { id: NotSet, owner_id: Set(user.id().to_string()), 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 = web_push_subscription::Entity::find() .filter(web_push_subscription::COLUMN.owner_id.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> { web_push_subscription::Entity::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 = web_push_subscription::Entity::find() .filter(web_push_subscription::COLUMN.owner_id.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) }}