feat: rewrite requests to include events

This commit is contained in:
Paul Makles
2022-02-19 19:49:10 +00:00
parent 061af1f2c3
commit 489c2bdd87
25 changed files with 159 additions and 240 deletions

View File

@@ -12,7 +12,8 @@ pub async fn req(db: &Db, user: User, target: Ref, message: Ref) -> Result<Empty
return Err(Error::NotFound);
}
db.acknowledge_message(channel.id(), &user.id, &message.id)
channel
.ack(db, &user.id, &message.id)
.await
.map(|_| EmptyResponse)
}

View File

@@ -12,63 +12,26 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result<EmptyResponse> {
return Err(Error::NotFound);
}
match channel {
match &channel {
Channel::SavedMessages { .. } => Err(Error::NoEffect),
Channel::DirectMessage { id, .. } => {
db.update_channel(
&id,
Channel::DirectMessage { id, .. } => db
.update_channel(
id,
&PartialChannel {
active: Some(false),
..Default::default()
},
vec![],
)
.await?;
Ok(EmptyResponse)
}
Channel::Group {
id,
owner,
recipients,
..
} => {
if user.id == owner {
if let Some(new_owner) = recipients.iter().find(|x| *x != &user.id) {
db.update_channel(
&id,
&PartialChannel {
owner: Some(new_owner.into()),
..Default::default()
},
vec![],
)
.await?;
} else {
db.delete_channel(&id).await?;
return Ok(EmptyResponse);
}
}
db.remove_user_from_group(&id, &user.id).await?;
/*ClientboundNotification::ChannelGroupLeave {
id: id.clone(),
user: user.id.clone(),
}
.publish(id.clone());
Content::SystemMessage(SystemMessage::UserLeft { id: user.id })
.send_as_system(&target)
.await
.ok();*/
Ok(EmptyResponse)
}
Channel::TextChannel { id, .. } | Channel::VoiceChannel { id, .. } => {
.await
.map(|_| EmptyResponse),
Channel::Group { .. } => channel
.remove_user_from_group(db, &user.id)
.await
.map(|_| EmptyResponse),
Channel::TextChannel { .. } | Channel::VoiceChannel { .. } => {
if perm.get_manage_channel() {
db.delete_channel(&id).await?;
Ok(EmptyResponse)
channel.delete(db).await.map(|_| EmptyResponse)
} else {
Err(Error::MissingPermission {
permission: ChannelPermission::ManageChannel as i32,

View File

@@ -124,7 +124,8 @@ pub async fn req(
partial.nsfw = Some(new_nsfw);
}
db.update_channel(id, &partial, data.remove.unwrap_or_default())
channel
.update(db, partial, data.remove.unwrap_or_default())
.await?;
}
_ => return Err(Error::InvalidOperation),

View File

@@ -17,11 +17,13 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyR
});
}
match channel {
Channel::Group { id, .. } => {
let user = member.as_user(db).await?;
db.add_user_to_group(&id, &user.id).await?;
Ok(EmptyResponse)
match &channel {
Channel::Group { .. } => {
let member = member.as_user(db).await?;
channel
.add_user_to_group(db, &member.id, &user.id)
.await
.map(|_| EmptyResponse)
}
_ => Err(Error::InvalidOperation),
}

View File

@@ -64,6 +64,6 @@ pub async fn req(db: &Db, user: User, info: Json<Data>) -> Result<Json<Channel>>
nsfw: info.nsfw.unwrap_or(false),
};
db.insert_channel(&group).await?;
group.create(db).await?;
Ok(Json(group))
}

View File

@@ -7,14 +7,11 @@ use revolt_quark::{
pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> {
let channel = target.as_channel(db).await?;
match channel {
match &channel {
Channel::Group {
id,
owner,
recipients,
..
owner, recipients, ..
} => {
if user.id != owner {
if &user.id != owner {
return Err(Error::MissingPermission { permission: 0 });
}
@@ -27,8 +24,10 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyR
return Err(Error::NotInGroup);
}
db.remove_user_from_group(&id, &member.id).await?;
Ok(EmptyResponse)
channel
.remove_user_from_group(db, &member.id)
.await
.map(|_| EmptyResponse)
}
_ => Err(Error::InvalidOperation),
}

View File

@@ -21,5 +21,5 @@ pub async fn req(db: &Db, user: User, target: Ref, msg: Ref) -> Result<EmptyResp
});
}
db.delete_message(&message.id).await.map(|_| EmptyResponse)
message.delete(db).await.map(|_| EmptyResponse)
}

View File

@@ -48,8 +48,7 @@ pub async fn req(
// 1. Handle content update
if let Some(content) = edit.content {
message.content = Content::Text(content);
partial.content = Some(message.content.clone());
partial.content = Some(Content::Text(content));
}
// 2. Clear any auto generated embeds
@@ -71,9 +70,8 @@ pub async fn req(
}
}
message.embeds = Some(new_embeds);
partial.embeds = message.embeds.clone();
db.update_message(&message.id, &partial).await?;
message.update(db, partial).await?;
Ok(Json(message))
}

View File

@@ -152,6 +152,6 @@ pub async fn message_send(
// 6. Set content
message.content = Content::Text(data.content);
db.insert_message(&message).await?;
message.create(db).await?;
Ok(Json(message))
}

View File

@@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
use revolt_quark::{
models::{Channel, User},
perms, ChannelPermission, Db, EmptyResponse, Error, Ref, Result,
perms, ChannelPermission, Db, Error, Ref, Result,
};
#[derive(Serialize, Deserialize)]
@@ -18,8 +18,8 @@ pub async fn req(
target: Ref,
role: String,
data: Json<Data>,
) -> Result<EmptyResponse> {
let channel = target.as_channel(db).await?;
) -> Result<Json<Channel>> {
let mut channel = target.as_channel(db).await?;
if !perms(&user)
.channel(&channel)
.calc_channel(db)
@@ -31,13 +31,9 @@ pub async fn req(
});
}
match channel {
Channel::TextChannel { id, .. } | Channel::VoiceChannel { id, .. } => {
db.set_channel_role_permission(&id, &role, data.permissions)
.await?;
}
_ => return Err(Error::InvalidOperation),
}
channel
.set_role_permission(db, &role, data.permissions)
.await?;
Ok(EmptyResponse)
Ok(Json(channel))
}

View File

@@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
use revolt_quark::{
models::{channel::PartialChannel, Channel, User},
perms, ChannelPermission, Db, EmptyResponse, Error, Ref, Result,
perms, ChannelPermission, Db, Error, Ref, Result,
};
#[derive(Serialize, Deserialize)]
@@ -12,8 +12,8 @@ pub struct Data {
}
#[put("/<target>/permissions/default", data = "<data>", rank = 1)]
pub async fn req(db: &Db, user: User, target: Ref, data: Json<Data>) -> Result<EmptyResponse> {
let channel = target.as_channel(db).await?;
pub async fn req(db: &Db, user: User, target: Ref, data: Json<Data>) -> Result<Json<Channel>> {
let mut channel = target.as_channel(db).await?;
if !perms(&user)
.channel(&channel)
.calc_channel(db)
@@ -25,31 +25,33 @@ pub async fn req(db: &Db, user: User, target: Ref, data: Json<Data>) -> Result<E
});
}
match channel {
Channel::Group { id, .. } => {
db.update_channel(
&id,
&PartialChannel {
permissions: Some(data.permissions as i32),
..Default::default()
},
vec![],
)
.await?;
match &channel {
Channel::Group { .. } => {
channel
.update(
db,
PartialChannel {
permissions: Some(data.permissions as i32),
..Default::default()
},
vec![],
)
.await?;
}
Channel::TextChannel { id, .. } | Channel::VoiceChannel { id, .. } => {
db.update_channel(
&id,
&PartialChannel {
default_permissions: Some(data.permissions as i32),
..Default::default()
},
vec![],
)
.await?;
Channel::TextChannel { .. } | Channel::VoiceChannel { .. } => {
channel
.update(
db,
PartialChannel {
default_permissions: Some(data.permissions as i32),
..Default::default()
},
vec![],
)
.await?;
}
_ => return Err(Error::InvalidOperation),
}
Ok(EmptyResponse)
Ok(Json(channel))
}