109 lines
3.0 KiB
Rust
109 lines
3.0 KiB
Rust
use bitflags::bitflags;
|
|
use chrono::{DateTime, Utc};
|
|
use serde::Serialize;
|
|
|
|
#[derive(Debug, Serialize)]
|
|
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: Option<Groups>,
|
|
pub member_roles: Option<Roles>,
|
|
pub thumbnail_url: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, sqlx::Type, Serialize)]
|
|
#[sqlx(type_name = "message_status", rename_all = "lowercase")]
|
|
pub enum MessageStatus {
|
|
Pending,
|
|
Sent,
|
|
Canceled,
|
|
}
|
|
|
|
bitflags! {
|
|
#[derive(Clone, Copy, Debug, Serialize)]
|
|
pub struct Channel: u16 {
|
|
const ALGEMEEN = 1 << 0;
|
|
const BELANGRIJK = 1 << 1;
|
|
const WEDSTRIJDEN = 1 << 2;
|
|
}
|
|
}
|
|
|
|
impl From<i64> for Channel {
|
|
fn from(value: i64) -> Self {
|
|
Self::from_bits(value as u16).unwrap_or(Channel::empty())
|
|
}
|
|
}
|
|
|
|
pub struct MessageCreate {
|
|
pub scheduled_at: Option<DateTime<Utc>>,
|
|
pub title: String,
|
|
pub content: String,
|
|
pub channel: Channel,
|
|
pub member_groups: Option<Groups>,
|
|
pub member_roles: Option<Roles>,
|
|
pub thumbnail_url: Option<String>,
|
|
}
|
|
|
|
impl Message {
|
|
pub fn new(message_create: MessageCreate) -> Self {
|
|
let message_id = uuid::Uuid::new_v4();
|
|
|
|
let created_at = Utc::now();
|
|
|
|
Self {
|
|
message_id,
|
|
created_at,
|
|
scheduled_at: message_create.scheduled_at,
|
|
title: message_create.title,
|
|
content: message_create.content,
|
|
channel: message_create.channel,
|
|
thumbnail_url: message_create.thumbnail_url,
|
|
member_groups: message_create.member_groups,
|
|
member_roles: message_create.member_roles,
|
|
status: MessageStatus::Pending,
|
|
}
|
|
}
|
|
}
|
|
|
|
use crate::database::model::Message as DbMessage;
|
|
|
|
use super::member::{Groups, Roles};
|
|
impl From<DbMessage> for Message {
|
|
fn from(value: DbMessage) -> Self {
|
|
Self {
|
|
message_id: value.message_id,
|
|
created_at: value.created_at,
|
|
scheduled_at: value.scheduled_at,
|
|
status: value.status,
|
|
title: value.title,
|
|
content: value.content,
|
|
channel: value.channel,
|
|
member_groups: value.member_groups.into(),
|
|
member_roles: value.member_roles.into(),
|
|
thumbnail_url: value.thumbnail_url,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<Message> for DbMessage {
|
|
fn from(value: Message) -> Self {
|
|
Self {
|
|
message_id: value.message_id,
|
|
created_at: value.created_at,
|
|
scheduled_at: value.scheduled_at,
|
|
status: value.status,
|
|
title: value.title,
|
|
content: value.content,
|
|
channel: value.channel,
|
|
member_groups: value.member_groups.into(),
|
|
member_roles: value.member_roles.into(),
|
|
thumbnail_url: value.thumbnail_url,
|
|
}
|
|
}
|
|
}
|