This commit is contained in:
Tony Rewin 2023-10-03 00:10:14 +03:00
parent d26f952949
commit 1f3019ea1a

View File

@ -12,7 +12,6 @@ use uuid::Uuid;
use chrono::Utc; use chrono::Utc;
use std::sync::Arc; use std::sync::Arc;
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
enum PayloadKind { enum PayloadKind {
@ -56,8 +55,6 @@ async fn get_auth_id(token: &str) -> Result<i32, Box<dyn Error>> {
Ok(id) Ok(id)
} }
// Функция создает первый чат для пользователя. В чате два участника: пользователь и автор с идентификатором 1.
// Данные чата сохраняются в Redis.
async fn create_first_chat(author_id: i32, con: &mut redis::aio::Connection) -> Result<Vec<String>, Box<dyn Error>> { async fn create_first_chat(author_id: i32, con: &mut redis::aio::Connection) -> Result<Vec<String>, Box<dyn Error>> {
let chat_id = Uuid::new_v4().to_string(); let chat_id = Uuid::new_v4().to_string();
let members = vec![author_id.to_string(), "1".to_string()]; let members = vec![author_id.to_string(), "1".to_string()];
@ -145,12 +142,14 @@ async fn sse_handler(
}; };
let mut pubsub = con.into_pubsub(); let mut pubsub = con.into_pubsub();
for chat_id in chats {
if let Err(e) = pubsub.subscribe(format!("chat:{}", chat_id)).await { let mut con = match redis.get_async_connection().await {
eprintln!("Failed to subscribe to chat: {}", e); Ok(con) => con,
Err(e) => {
eprintln!("Failed to get async connection: {}", e);
return HttpResponse::InternalServerError().finish(); return HttpResponse::InternalServerError().finish();
} }
} };
let _ = match con.srem::<&str, &i32, usize>("authors-online", &author_id).await { let _ = match con.srem::<&str, &i32, usize>("authors-online", &author_id).await {
Ok(_) => (), Ok(_) => (),
@ -160,7 +159,7 @@ async fn sse_handler(
} }
}; };
let server_event = match Arc::clone(&rx).recv().await { let server_event = match rx.recv().await {
Ok(event) => event, Ok(event) => event,
Err(e) => { Err(e) => {
eprintln!("Failed to receive server event: {}", e); eprintln!("Failed to receive server event: {}", e);