cove-chat/cove-db/src/query/text.rs
CanadianBaconBoi e27a0d33d7 Initial Commit
2026-02-17 18:22:49 +01:00

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 {}