Files
handmade-revolt-backend/src/database/entities/channel.rs
T

81 lines
1.9 KiB
Rust

use crate::{
database::get_collection,
util::result::{Error, Result},
};
use mongodb::bson::to_document;
use serde::{Deserialize, Serialize};
/*#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct LastMessage {
id: String,
user_id: String,
short_content: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Channel {
#[serde(rename = "_id")]
pub id: String,
#[serde(rename = "type")]
pub channel_type: u8,
// DM: whether the DM is active
pub active: Option<bool>,
// DM + GDM: last message in channel
pub last_message: Option<LastMessage>,
// DM + GDM: recipients for channel
pub recipients: Option<Vec<String>>,
// GDM: owner of group
pub owner: Option<String>,
// GUILD: channel parent
pub guild: Option<String>,
// GUILD + GDM: channel name
pub name: Option<String>,
// GUILD + GDM: channel description
pub description: Option<String>,
}*/
#[derive(Serialize, Deserialize, Debug)]
#[serde(tag = "type")]
pub enum Channel {
SavedMessages {
#[serde(rename = "_id")]
id: String,
user: String,
},
DirectMessage {
#[serde(rename = "_id")]
id: String,
active: bool,
recipients: Vec<String>,
},
Group {
#[serde(rename = "_id")]
id: String,
name: String,
owner: String,
description: String,
recipients: Vec<String>,
},
}
impl Channel {
pub async fn save(&self) -> Result<()> {
get_collection("channels")
.insert_one(
to_document(&self).map_err(|_| Error::DatabaseError {
operation: "to_bson",
with: "channel",
})?,
None,
)
.await
.map_err(|_| Error::DatabaseError {
operation: "insert_one",
with: "channel",
})?;
Ok(())
}
}