65 lines
1.6 KiB
Rust

use chrono::{DateTime, Utc};
use sqlx::{PgPool, Postgres, QueryBuilder};
use crate::model::{
member::{Groups, Roles},
message::{Channel, MessageStatus},
};
#[derive(Debug)]
pub struct Message {
pub message_id: uuid::Uuid,
pub created_at: DateTime<Utc>,
pub scheduled_at: Option<DateTime<Utc>>,
pub status: MessageStatus,
pub title: String,
pub content: String,
pub channel: Channel,
pub member_groups: Groups,
pub member_roles: Roles,
pub thumbnail_url: Option<String>,
}
impl Message {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, Postgres>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
INSERT INTO messages (
message_id,
created_at, scheduled_at,
status,
title, content,
channel,
member_groups, member_roles,
thumbnail_url
) VALUES (
$1,
$2, $3,
$4,
$5, $6,
$7,
$8, $9,
$10
)
",
self.message_id,
self.created_at,
self.scheduled_at,
self.status as MessageStatus,
self.title,
self.content,
self.channel.bits() as i64,
self.member_groups.bits() as i64,
self.member_roles.bits() as i64,
self.thumbnail_url,
)
.execute(&mut **transaction)
.await?;
Ok(())
}
}