diff --git a/src/gateway/mod.rs b/src/gateway/mod.rs index 23f2c81..9990cb9 100644 --- a/src/gateway/mod.rs +++ b/src/gateway/mod.rs @@ -3,6 +3,5 @@ mod events; mod payload; mod upgrade; -pub use crate::database::redis::publish; pub use payload::*; pub use upgrade::upgrade; diff --git a/src/gateway/payload.rs b/src/gateway/payload.rs index 5e88401..270e5fa 100644 --- a/src/gateway/payload.rs +++ b/src/gateway/payload.rs @@ -1,3 +1,4 @@ +use crate::database::redis::publish; use crate::structures::*; use axum::extract::ws; use serde::{Deserialize, Serialize}; @@ -71,3 +72,9 @@ impl From for ws::Message { ws::Message::Text(serde_json::to_string(&payload).unwrap()) } } + +impl Payload { + pub async fn to(self, id: i64) { + publish(id, serde_json::to_string(&self).unwrap()).await; + } +} diff --git a/src/routes/channels/create.rs b/src/routes/channels/create.rs index bf7e070..5f17fb0 100644 --- a/src/routes/channels/create.rs +++ b/src/routes/channels/create.rs @@ -18,7 +18,7 @@ pub async fn create( let group = Channel::new_group(user.id, data.name).save().await?; for id in group.recipients.as_ref().unwrap() { - publish(*id, Payload::ChannelCreate(group.clone())).await; + Payload::ChannelCreate(group.clone()).to(*id).await; } Ok(Json(group)) diff --git a/src/routes/channels/delete.rs b/src/routes/channels/delete.rs index fc1362a..09285f0 100644 --- a/src/routes/channels/delete.rs +++ b/src/routes/channels/delete.rs @@ -12,7 +12,7 @@ pub async fn delete(Extension(user): Extension, Path(id): Path) -> Re channel.remove().await?; - publish(id, Payload::ChannelDelete(id.into())).await; + Payload::ChannelDelete(id.into()).to(id).await; Ok(()) } diff --git a/src/routes/channels/edit.rs b/src/routes/channels/edit.rs index 0039549..3d378ec 100644 --- a/src/routes/channels/edit.rs +++ b/src/routes/channels/edit.rs @@ -28,7 +28,7 @@ pub async fn edit( let group = group.update_all_fields(pool()).await?; - publish(group.id, Payload::ChannelUpdate(group.clone())).await; + Payload::ChannelUpdate(group.clone()).to(group.id).await; Ok(Json(group)) } diff --git a/src/routes/channels/kick.rs b/src/routes/channels/kick.rs index 203d9a0..d868709 100644 --- a/src/routes/channels/kick.rs +++ b/src/routes/channels/kick.rs @@ -28,7 +28,7 @@ pub async fn kick( let group = group.update_all_fields(pool()).await?; - publish(group_id, Payload::ChannelUpdate(group)).await; + Payload::ChannelUpdate(group).to(group_id).await; Ok(()) } diff --git a/src/routes/invites/join.rs b/src/routes/invites/join.rs index fe70760..d5b1ac1 100644 --- a/src/routes/invites/join.rs +++ b/src/routes/invites/join.rs @@ -37,13 +37,10 @@ pub async fn join(Extension(user): Extension, Path(code): Path) -> .update(pool()) .await?; - publish( - user.id, - Payload::ServerCreate(server_id.server(None).await?), - ) - .await; - - publish(server_id, Payload::ServerMemberJoin(member)).await; + Payload::ServerCreate(server_id.server(None).await?) + .to(user.id) + .await; + Payload::ServerMemberJoin(member).to(server_id).await; Ok(()) } @@ -65,8 +62,8 @@ pub async fn join(Extension(user): Extension, Path(code): Path) -> let group = group.update_all_fields(pool()).await?; - publish(group.id, Payload::ChannelUpdate(group.clone())).await; - publish(user.id, Payload::ChannelCreate(group)).await; + Payload::ChannelUpdate(group.clone()).to(group.id).await; + Payload::ChannelCreate(group).to(user.id).await; Ok(()) } diff --git a/src/routes/messages/create.rs b/src/routes/messages/create.rs index 2e4c779..3eb682d 100644 --- a/src/routes/messages/create.rs +++ b/src/routes/messages/create.rs @@ -36,7 +36,7 @@ pub async fn create( let msg = msg.save().await?; - publish(channel_id, Payload::MessageCreate(msg.clone())).await; + Payload::MessageCreate(msg.clone()).to(channel_id).await; Ok(Json(msg)) } diff --git a/src/routes/messages/delete.rs b/src/routes/messages/delete.rs index 727854f..9ff7528 100644 --- a/src/routes/messages/delete.rs +++ b/src/routes/messages/delete.rs @@ -35,7 +35,7 @@ pub async fn delete( tx.commit().await?; - publish(channel_id, Payload::MessageDelete(id.into())).await; + Payload::MessageDelete(id.into()).to(channel_id).await; Ok(()) } diff --git a/src/routes/messages/edit.rs b/src/routes/messages/edit.rs index 61adc34..ec17d0d 100644 --- a/src/routes/messages/edit.rs +++ b/src/routes/messages/edit.rs @@ -32,7 +32,7 @@ pub async fn edit( let msg = msg.update_all_fields(pool()).await?; - publish(channel_id, Payload::MessageUpdate(msg.clone())).await; + Payload::MessageUpdate(msg.clone()).to(channel_id).await; Ok(Json(msg)) } diff --git a/src/routes/servers/channels/create.rs b/src/routes/servers/channels/create.rs index 5d74774..7759bf2 100644 --- a/src/routes/servers/channels/create.rs +++ b/src/routes/servers/channels/create.rs @@ -37,7 +37,7 @@ pub async fn create( let channel = channel.save().await?; - publish(server_id, Payload::ChannelCreate(channel.clone())).await; + Payload::ChannelCreate(channel.clone()).to(server_id).await; Ok(Json(channel)) } diff --git a/src/routes/servers/channels/delete.rs b/src/routes/servers/channels/delete.rs index e0bd4ea..831a995 100644 --- a/src/routes/servers/channels/delete.rs +++ b/src/routes/servers/channels/delete.rs @@ -15,7 +15,9 @@ pub async fn delete( channel.remove().await?; - publish(server_id, Payload::ChannelDelete((id, server_id).into())).await; + Payload::ChannelDelete((id, server_id).into()) + .to(server_id) + .await; Ok(()) } diff --git a/src/routes/servers/channels/edit.rs b/src/routes/servers/channels/edit.rs index 421c3b0..9485a20 100644 --- a/src/routes/servers/channels/edit.rs +++ b/src/routes/servers/channels/edit.rs @@ -29,7 +29,7 @@ pub async fn edit( let channel = channel.update_all_fields(pool()).await?; - publish(server_id, Payload::ChannelUpdate(channel.clone())).await; + Payload::ChannelUpdate(channel.clone()).to(server_id).await; Ok(Json(channel)) } diff --git a/src/routes/servers/create.rs b/src/routes/servers/create.rs index c7f2bad..ad7f20e 100644 --- a/src/routes/servers/create.rs +++ b/src/routes/servers/create.rs @@ -38,7 +38,7 @@ pub async fn create( tx.commit().await?; - publish(user.id, Payload::ServerCreate(server.clone())).await; + Payload::ServerCreate(server.clone()).to(user.id).await; Ok(Json(server)) } diff --git a/src/routes/servers/delete.rs b/src/routes/servers/delete.rs index 97bf0b7..4a6fda2 100644 --- a/src/routes/servers/delete.rs +++ b/src/routes/servers/delete.rs @@ -12,7 +12,7 @@ pub async fn delete(Extension(user): Extension, Path(id): Path) -> Re server.remove().await?; - publish(id, Payload::ServerDelete(id.into())).await; + Payload::ServerDelete(id.into()).to(id).await; Ok(()) } diff --git a/src/routes/servers/edit.rs b/src/routes/servers/edit.rs index 40a37d1..00897e7 100644 --- a/src/routes/servers/edit.rs +++ b/src/routes/servers/edit.rs @@ -28,7 +28,7 @@ pub async fn edit( let server = server.update_all_fields(pool()).await?; - publish(server.id, Payload::ServerUpdate(server.clone())).await; + Payload::ServerUpdate(server.clone()).to(server.id).await; Ok(Json(server)) } diff --git a/src/routes/servers/members/edit.rs b/src/routes/servers/members/edit.rs index a840d4a..61496ab 100644 --- a/src/routes/servers/members/edit.rs +++ b/src/routes/servers/members/edit.rs @@ -52,7 +52,9 @@ pub async fn edit( let member = member.update_all_fields(pool()).await?; - publish(server_id, Payload::ServerMemberUpdate(member.clone())).await; + Payload::ServerMemberUpdate(member.clone()) + .to(server_id) + .await; Ok(Json(member)) } diff --git a/src/routes/servers/members/kick.rs b/src/routes/servers/members/kick.rs index 3206c92..37b52d9 100644 --- a/src/routes/servers/members/kick.rs +++ b/src/routes/servers/members/kick.rs @@ -15,11 +15,9 @@ pub async fn kick( id.member(server_id).await?.remove().await?; - publish( - server_id, - Payload::ServerMemberLeave((id, server_id).into()), - ) - .await; + Payload::ServerMemberLeave((id, server_id).into()) + .to(server_id) + .await; Ok(()) } diff --git a/src/routes/servers/roles/create.rs b/src/routes/servers/roles/create.rs index b647bd9..61fe66d 100644 --- a/src/routes/servers/roles/create.rs +++ b/src/routes/servers/roles/create.rs @@ -38,7 +38,7 @@ pub async fn create( let role = role.save().await?; - publish(server_id, Payload::RoleCreate(role.clone())).await; + Payload::RoleCreate(role.clone()).to(server_id).await; Ok(Json(role)) } diff --git a/src/routes/servers/roles/delete.rs b/src/routes/servers/roles/delete.rs index 4e34362..a33e85a 100644 --- a/src/routes/servers/roles/delete.rs +++ b/src/routes/servers/roles/delete.rs @@ -13,7 +13,9 @@ pub async fn delete( id.role(server_id).await?.remove().await?; - publish(server_id, Payload::RoleDelete((id, server_id).into())).await; + Payload::RoleDelete((id, server_id).into()) + .to(server_id) + .await; Ok(()) } diff --git a/src/routes/servers/roles/edit.rs b/src/routes/servers/roles/edit.rs index d459711..a529486 100644 --- a/src/routes/servers/roles/edit.rs +++ b/src/routes/servers/roles/edit.rs @@ -31,7 +31,7 @@ pub async fn edit( let role = role.update_all_fields(pool()).await?; - publish(server_id, Payload::RoleUpdate(role.clone())).await; + Payload::RoleUpdate(role.clone()).to(server_id).await; Ok(Json(role)) } diff --git a/src/routes/users/open_dm.rs b/src/routes/users/open_dm.rs index a12d5fc..e82aaaf 100644 --- a/src/routes/users/open_dm.rs +++ b/src/routes/users/open_dm.rs @@ -22,10 +22,10 @@ pub async fn open_dm( let target = id.user().await?; let channel = Channel::new_dm(user.id, target.id).save().await?; - publish(user.id, Payload::ChannelCreate(channel.clone())).await; + Payload::ChannelCreate(channel.clone()).to(user.id).await; if target.id != user.id { - publish(target.id, Payload::ChannelCreate(channel.clone())).await; + Payload::ChannelCreate(channel.clone()).to(target.id).await; } Ok(channel.into()) diff --git a/src/routes/users/relationships/add.rs b/src/routes/users/relationships/add.rs index b9388f0..899229d 100644 --- a/src/routes/users/relationships/add.rs +++ b/src/routes/users/relationships/add.rs @@ -52,8 +52,8 @@ pub async fn add(Extension(mut user): Extension, Path(id): Path) -> R user.relationship = status.1.into(); target.relationship = status.0.into(); - publish(user.id, Payload::UserUpdate(target.clone())).await; - publish(target.id, Payload::UserUpdate(user)).await; + Payload::UserUpdate(target.clone()).to(user.id).await; + Payload::UserUpdate(user).to(target.id).await; Ok(()) } diff --git a/src/routes/users/relationships/block.rs b/src/routes/users/relationships/block.rs index b6f67cc..cd6c72e 100644 --- a/src/routes/users/relationships/block.rs +++ b/src/routes/users/relationships/block.rs @@ -48,8 +48,8 @@ pub async fn block(Extension(mut user): Extension, Path(id): Path) -> user.relationship = status.1.into(); target.relationship = status.0.into(); - publish(user.id, Payload::UserUpdate(target.clone())).await; - publish(target.id, Payload::UserUpdate(user)).await; + Payload::UserUpdate(target.clone()).to(user.id).await; + Payload::UserUpdate(user).to(target.id).await; Ok(()) } diff --git a/src/routes/users/relationships/delete.rs b/src/routes/users/relationships/delete.rs index c7093fa..6132235 100644 --- a/src/routes/users/relationships/delete.rs +++ b/src/routes/users/relationships/delete.rs @@ -43,8 +43,8 @@ pub async fn delete(Extension(mut user): Extension, Path(id): Path) - user.relationship = target.relations.0.get(&user.id).copied(); target.relationship = user.relations.0.get(&target.id).copied(); - publish(user.id, Payload::UserUpdate(target.clone())).await; - publish(target.id, Payload::UserUpdate(user)).await; + Payload::UserUpdate(target.clone()).to(user.id).await; + Payload::UserUpdate(user).to(target.id).await; } Ok(())