backend/controller/
sse.rs

1//! Server-Sent Events controller
2
3use actix_web::{get, web::Query, Responder};
4
5use crate::{
6    config::{
7        auth::user_info::UserInfo,
8        data::{SharedBroadcaster, SharedPool},
9    },
10    model::dto::ConnectToMapQueryParams,
11    service::map_access_control::check_permissions,
12};
13
14/// Create a new SSE client.
15#[get("")]
16pub async fn connect_to_map(
17    query: Query<ConnectToMapQueryParams>,
18    broadcaster: SharedBroadcaster,
19    user_info: UserInfo,
20    pool: SharedPool,
21) -> impl Responder {
22    let query = query.into_inner();
23    check_permissions(query.map_id, &pool, user_info).await?;
24    broadcaster.new_client(query.map_id).await
25}