push notifications
All checks were successful
/ upload (release) Successful in 1m4s

This commit is contained in:
pavel 2026-02-12 01:28:24 +01:00
commit 91db5861c8
21 changed files with 1263 additions and 79 deletions

View file

@ -1,5 +1,5 @@
use chrono::Utc;
use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, Set};
use sea_orm::{ActiveModelTrait, ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, Set};
use serde::{Deserialize, Serialize};
use std::sync::Arc;
use uuid::Uuid;
@ -8,6 +8,7 @@ use crate::config::Config;
use crate::domain::agent::Agent;
use crate::entities::task::Entity as Task;
use crate::entities::task_run::{self, Entity as TaskRun};
use crate::entities::{push_subscription, task_subscription};
use crate::scheduler::Scheduler;
#[derive(Deserialize)]
@ -119,7 +120,7 @@ pub async fn execute_agent_run(
let mut run = run;
run.logs = Set(logs.clone());
run.answer = Set(answer.clone());
run.status = Set(status);
run.status = Set(status.clone());
run.update(db)
.await
@ -132,6 +133,38 @@ pub async fn execute_agent_run(
task_response.clone(),
));
// Send Push Notifications to subscribers
let subscriptions = task_subscription::Entity::find()
.filter(task_subscription::Column::TaskId.eq(task_id))
.all(db)
.await
.map_err(crate::error::AppError::Database)?;
for sub in subscriptions {
let push_subs = push_subscription::Entity::find()
.filter(push_subscription::Column::UserSub.eq(sub.user_sub))
.all(db)
.await
.map_err(crate::error::AppError::Database)?;
for push_sub in push_subs {
let sender = _scheduler.push_sender.clone();
let goal = task_response.goal.clone();
let status = status.clone();
let sub_data = crate::domain::notifications::push::PushSubscription {
endpoint: push_sub.endpoint,
p256dh: push_sub.p256dh,
auth: push_sub.auth,
};
tokio::spawn(async move {
let _ = sender
.send_notification(&sub_data, &format!("Task Completed: {}", status), &goal)
.await;
});
}
}
Ok(task_response)
}