59 lines
2.1 KiB
Rust
59 lines
2.1 KiB
Rust
use anyhow::{Error};
|
|
use sqlx::{Execute, Executor};
|
|
use sqlx::postgres::{ PgQueryResult};
|
|
use cove_net_common::id::message_type::MessageType;
|
|
use cove_net_common::id::SnowflakeID;
|
|
use cove_net_common::id::types::text::TextMessageType;
|
|
use cove_net_common::message::c2s::text::text::{TextEmbed, TextMessage};
|
|
use crate::{CoveDB, CoveDBImpl};
|
|
use crate::part::{BindQueryBuilder, SqlPart};
|
|
use crate::part::insert::SqlInsert;
|
|
|
|
pub trait TextQueries: CoveDBImpl + Send + Sync {
|
|
async fn create_message(
|
|
&self, user_id: SnowflakeID,
|
|
message: TextMessage, mentions: Option<Vec<SnowflakeID>>, mention_everyone: bool,
|
|
message_type: &TextMessageType
|
|
) -> Result<PgQueryResult, Error> {
|
|
println!("creating message");
|
|
let message_id = SnowflakeID::new_random_hex_loc(
|
|
MessageType::Text(TextMessageType::Text), "beefcafe"
|
|
)?;
|
|
|
|
let mut query_builder = BindQueryBuilder::new();
|
|
|
|
SqlInsert::with_table("messages")
|
|
.col::<SnowflakeID>("id")
|
|
.col::<SnowflakeID>("channel_id")
|
|
.col::<SnowflakeID>("guild_id")
|
|
.col::<SnowflakeID>("author_id")
|
|
.col::<String>("content")
|
|
.col::<bool>("tts")
|
|
.col::<bool>("mention_everyone")
|
|
.col::<TextMessageType>("message_type")
|
|
.opt_arr_col::<SnowflakeID>("mentions")
|
|
.opt_arr_col::<TextEmbed>("embeds")
|
|
.opt_arr_col::<SnowflakeID>("attachments")
|
|
.encode(&mut query_builder)?;
|
|
|
|
let query = query_builder.to_query().build()
|
|
.bind(message_id)
|
|
.bind(message.channel_id)
|
|
.bind(message.guild_id)
|
|
.bind(user_id)
|
|
.bind(message.content)
|
|
.bind(message.tts)
|
|
.bind(mention_everyone)
|
|
.bind(message_type)
|
|
.bind(mentions)
|
|
.bind(message.embeds)
|
|
.bind(message.attachments);
|
|
|
|
println!("{:?}", query.sql());
|
|
let res: PgQueryResult = self.run_query(query).await?;
|
|
println!("Rows Affected: {}", res.rows_affected());
|
|
Ok(res)
|
|
}
|
|
}
|
|
|
|
impl TextQueries for CoveDB {} |