skynet_api 0.6.5

API for Skynet plugin.
Documentation
use crate::{HyUuid, entity::webpush_subscriptions, hyuuid::uuids2strings, request::Condition};
use anyhow::Result;
use sea_orm::{
    ActiveModelTrait, ColumnTrait, ConnectionTrait, EntityTrait, PaginatorTrait, QueryFilter, Set,
};
use skynet_macro::default_viewer;

pub struct WebpushSubscriptionViewer;

#[default_viewer(webpush_subscriptions)]
impl WebpushSubscriptionViewer {
    pub async fn subscribe<C>(
        db: &C,
        uid: &HyUuid,
        topic: &HyUuid,
    ) -> Result<webpush_subscriptions::Model>
    where
        C: ConnectionTrait,
    {
        webpush_subscriptions::ActiveModel {
            uid: Set(*uid),
            topic: Set(*topic),
            ..Default::default()
        }
        .insert(db)
        .await
        .map_err(Into::into)
    }

    pub async fn unsubscribe<C>(db: &C, uid: &HyUuid, topic: &HyUuid) -> Result<u64>
    where
        C: ConnectionTrait,
    {
        webpush_subscriptions::Entity::delete_many()
            .filter(webpush_subscriptions::Column::Uid.eq(*uid))
            .filter(webpush_subscriptions::Column::Topic.eq(*topic))
            .exec(db)
            .await
            .map(|x| x.rows_affected)
            .map_err(Into::into)
    }
}