use chrono::{DateTime, Utc}; use eyre::Result; use foxchat::{Id, model::http::channel::CreateMessageParams, id::{ChannelType, UserType, MessageType}}; use sqlx::PgExecutor; use ulid::Ulid; pub struct Message { pub id: Id, pub channel_id: Id, pub author_id: Id, pub updated_at: DateTime, pub content: String, } pub async fn create_message( executor: impl PgExecutor<'_>, channel_id: &Id, user_id: &Id, params: CreateMessageParams, ) -> Result { let message = sqlx::query_as!( Message, "insert into messages (id, channel_id, author_id, content) values ($1, $2, $3, $4) returning *", Ulid::new().to_string(), channel_id.0, user_id.0, params.content, ) .fetch_one(executor) .await?; Ok(message) }