65 lines
1.6 KiB
Rust
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(())
|
|
}
|
|
}
|