feat: search by message components
Signed-off-by: Zomatree <me@zomatree.live>
This commit is contained in:
@@ -1,9 +1,18 @@
|
||||
use amqprs::{BasicProperties, Deliver, channel::{BasicAckArguments, Channel}, consumer::AsyncConsumer};
|
||||
use async_trait::async_trait;
|
||||
use revolt_database::events::rabbit::ChannelDeletePayload;
|
||||
use revolt_database::{Database, events::rabbit::ChannelDeletePayload};
|
||||
use revolt_search::ElasticsearchClient;
|
||||
|
||||
pub struct ChannelDeleteConsumer(pub ElasticsearchClient);
|
||||
pub struct ChannelDeleteConsumer {
|
||||
client: ElasticsearchClient,
|
||||
database: Database
|
||||
}
|
||||
|
||||
impl ChannelDeleteConsumer {
|
||||
pub fn new(client: ElasticsearchClient, database: Database) -> Self {
|
||||
Self { client, database }
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl AsyncConsumer for ChannelDeleteConsumer {
|
||||
@@ -15,8 +24,9 @@ impl AsyncConsumer for ChannelDeleteConsumer {
|
||||
content: Vec<u8>,
|
||||
) {
|
||||
let payload = serde_json::from_slice::<ChannelDeletePayload>(&content).expect("Failed to decode message");
|
||||
log::debug!("Received channel delete {payload:?}");
|
||||
|
||||
if self.0.delete_channel(&payload.channel_id).await.is_ok() {
|
||||
if self.client.delete_channel(&payload.channel_id).await.is_ok() {
|
||||
channel.basic_ack(BasicAckArguments::new(deliver.delivery_tag(), false)).await.expect("Failed to ack");
|
||||
} else {
|
||||
// todo requeue
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
use amqprs::{BasicProperties, Deliver, channel::{BasicAckArguments, Channel}, consumer::AsyncConsumer};
|
||||
use async_trait::async_trait;
|
||||
use revolt_database::Message;
|
||||
use revolt_database::{Database, Message};
|
||||
use revolt_search::ElasticsearchClient;
|
||||
|
||||
pub struct MessageConsumer(pub ElasticsearchClient);
|
||||
pub struct MessageConsumer {
|
||||
client: ElasticsearchClient,
|
||||
database: Database
|
||||
}
|
||||
|
||||
impl MessageConsumer {
|
||||
pub fn new(client: ElasticsearchClient, database: Database) -> Self {
|
||||
Self { client, database }
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl AsyncConsumer for MessageConsumer {
|
||||
@@ -17,7 +26,7 @@ impl AsyncConsumer for MessageConsumer {
|
||||
let message = serde_json::from_slice::<Message>(&content).expect("Failed to decode message");
|
||||
log::debug!("Received message {message:?}");
|
||||
|
||||
if self.0.index_message(message).await.is_ok() {
|
||||
if self.client.index_message(&self.database, message).await.is_ok() {
|
||||
channel.basic_ack(BasicAckArguments::new(deliver.delivery_tag(), false)).await.expect("Failed to ack");
|
||||
} else {
|
||||
// todo requeue
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
use amqprs::{BasicProperties, Deliver, channel::{BasicAckArguments, Channel}, consumer::AsyncConsumer};
|
||||
use async_trait::async_trait;
|
||||
use revolt_database::events::rabbit::MessageDeletePayload;
|
||||
use revolt_database::{Database, events::rabbit::MessageDeletePayload};
|
||||
use revolt_search::ElasticsearchClient;
|
||||
|
||||
pub struct MessageDeleteConsumer(pub ElasticsearchClient);
|
||||
pub struct MessageDeleteConsumer {
|
||||
client: ElasticsearchClient,
|
||||
database: Database
|
||||
}
|
||||
|
||||
impl MessageDeleteConsumer {
|
||||
pub fn new(client: ElasticsearchClient, database: Database) -> Self {
|
||||
Self { client, database }
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl AsyncConsumer for MessageDeleteConsumer {
|
||||
@@ -15,8 +24,9 @@ impl AsyncConsumer for MessageDeleteConsumer {
|
||||
content: Vec<u8>,
|
||||
) {
|
||||
let payload = serde_json::from_slice::<MessageDeletePayload>(&content).expect("Failed to decode message");
|
||||
log::debug!("Received message delete {payload:?}");
|
||||
|
||||
if self.0.delete_message(&payload.message_id).await.is_ok() {
|
||||
if self.client.delete_message(&payload.message_id).await.is_ok() {
|
||||
channel.basic_ack(BasicAckArguments::new(deliver.delivery_tag(), false)).await.expect("Failed to ack");
|
||||
} else {
|
||||
// todo requeue
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
use amqprs::{BasicProperties, Deliver, channel::{BasicAckArguments, Channel}, consumer::AsyncConsumer};
|
||||
use async_trait::async_trait;
|
||||
use revolt_database::Message;
|
||||
use revolt_database::{Database, Message};
|
||||
use revolt_search::ElasticsearchClient;
|
||||
|
||||
pub struct MessageEditConsumer(pub ElasticsearchClient);
|
||||
pub struct MessageEditConsumer {
|
||||
client: ElasticsearchClient,
|
||||
database: Database
|
||||
}
|
||||
|
||||
impl MessageEditConsumer {
|
||||
pub fn new(client: ElasticsearchClient, database: Database) -> Self {
|
||||
Self { client, database }
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl AsyncConsumer for MessageEditConsumer {
|
||||
@@ -15,8 +24,9 @@ impl AsyncConsumer for MessageEditConsumer {
|
||||
content: Vec<u8>,
|
||||
) {
|
||||
let message = serde_json::from_slice::<Message>(&content).expect("Failed to decode message");
|
||||
log::debug!("Received edit message {message:?}");
|
||||
|
||||
if self.0.edit_message(message).await.is_ok() {
|
||||
if self.client.edit_message(&self.database, message).await.is_ok() {
|
||||
channel.basic_ack(BasicAckArguments::new(deliver.delivery_tag(), false)).await.expect("Failed to ack");
|
||||
} else {
|
||||
// todo requeue
|
||||
|
||||
@@ -50,7 +50,7 @@ async fn _main() {
|
||||
&config,
|
||||
&connection,
|
||||
&config.elasticsearch.message_queue,
|
||||
consumers::MessageConsumer(client.clone()),
|
||||
consumers::MessageConsumer::new(client.clone(), db.clone()),
|
||||
)
|
||||
.await,
|
||||
);
|
||||
@@ -60,7 +60,7 @@ async fn _main() {
|
||||
&config,
|
||||
&connection,
|
||||
&config.elasticsearch.message_edit_queue,
|
||||
consumers::MessageEditConsumer(client.clone()),
|
||||
consumers::MessageEditConsumer::new(client.clone(), db.clone()),
|
||||
)
|
||||
.await,
|
||||
);
|
||||
@@ -70,7 +70,7 @@ async fn _main() {
|
||||
&config,
|
||||
&connection,
|
||||
&config.elasticsearch.message_delete_queue,
|
||||
consumers::MessageDeleteConsumer(client.clone()),
|
||||
consumers::MessageDeleteConsumer::new(client.clone(), db.clone()),
|
||||
)
|
||||
.await,
|
||||
);
|
||||
@@ -80,7 +80,7 @@ async fn _main() {
|
||||
&config,
|
||||
&connection,
|
||||
&config.elasticsearch.channel_delete_queue,
|
||||
consumers::ChannelDeleteConsumer(client.clone()),
|
||||
consumers::ChannelDeleteConsumer::new(client.clone(), db.clone()),
|
||||
)
|
||||
.await,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user