1
0
Fork 0
forked from 2sys/shoutdotdev
shoutdotdev/src/messages.rs

41 lines
978 B
Rust
Raw Normal View History

2025-02-26 13:10:47 -08:00
use chrono::{DateTime, Utc};
use diesel::{
dsl::{auto_type, AsSelect},
pg::Pg,
prelude::*,
};
use uuid::Uuid;
use crate::{channels::Channel, schema::messages};
2025-02-26 13:10:47 -08:00
2025-03-14 13:04:57 -07:00
/// A "/say" message queued for sending
2025-02-26 13:10:47 -08:00
#[derive(Associations, Clone, Debug, Identifiable, Queryable, Selectable)]
#[diesel(table_name = messages)]
#[diesel(belongs_to(Channel))]
2025-02-26 13:10:47 -08:00
pub struct Message {
pub id: Uuid,
2025-03-08 22:18:24 -08:00
pub project_id: Uuid,
pub channel_id: Uuid,
2025-02-26 13:10:47 -08:00
pub created_at: DateTime<Utc>,
2025-03-08 22:18:24 -08:00
pub sent_at: Option<DateTime<Utc>>,
2025-02-26 13:10:47 -08:00
pub message: String,
}
impl Message {
#[auto_type(no_type_alias)]
pub fn all() -> _ {
let select: AsSelect<Message, Pg> = Message::as_select();
messages::table.select(select)
}
#[auto_type(no_type_alias)]
2025-03-14 13:04:57 -07:00
pub fn with_channel<'a>(channel_id: &'a Uuid) -> _ {
messages::channel_id.eq(channel_id)
2025-02-26 13:10:47 -08:00
}
2025-03-08 22:18:24 -08:00
#[auto_type(no_type_alias)]
pub fn is_not_sent() -> _ {
messages::sent_at.is_null()
}
2025-02-26 13:10:47 -08:00
}