Servers: Core objects required. Includes creation. Bump version to 0.5.0.

This commit is contained in:
Paul
2021-06-01 17:09:31 +01:00
parent a4c1fee4cc
commit bff72fa6c3
23 changed files with 415 additions and 59 deletions

View File

@@ -1,2 +1,2 @@
pub mod autumn;
pub mod january;
pub mod january;

View File

@@ -1,9 +1,9 @@
mod microservice;
mod channel;
mod message;
mod microservice;
mod server;
mod user;
mod sync;
mod user;
use microservice::*;
@@ -12,5 +12,5 @@ pub use channel::*;
pub use january::*;
pub use message::*;
pub use server::*;
pub use user::*;
pub use sync::*;
pub use user::*;

View File

@@ -1,8 +1,15 @@
use crate::database::*;
use crate::notifications::events::ClientboundNotification;
use crate::util::result::{Error, Result};
use mongodb::bson::doc;
use mongodb::bson::from_document;
use mongodb::bson::to_document;
use rocket_contrib::json::JsonValue;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MemberCompositeKey {
pub guild: String,
pub server: String,
pub user: String,
}
@@ -34,9 +41,67 @@ pub struct Server {
pub nonce: Option<String>,
pub owner: String,
pub name: String,
// pub default_permissions: u32,
pub channels: Vec<String>,
pub invites: Vec<Invite>,
pub bans: Vec<Ban>,
pub default_permissions: u32,
// pub invites: Vec<Invite>,
// pub bans: Vec<Ban>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<File>,
#[serde(skip_serializing_if = "Option::is_none")]
pub banner: Option<File>,
}
impl Server {
pub async fn get(id: &str) -> Result<Server> {
let doc = get_collection("servers")
.find_one(doc! { "_id": id }, None)
.await
.map_err(|_| Error::DatabaseError {
operation: "find_one",
with: "server",
})?
.ok_or_else(|| Error::UnknownServer)?;
from_document::<Server>(doc).map_err(|_| Error::DatabaseError {
operation: "from_document",
with: "server",
})
}
pub async fn publish(self) -> Result<()> {
get_collection("servers")
.insert_one(
to_document(&self).map_err(|_| Error::DatabaseError {
operation: "to_bson",
with: "channel",
})?,
None,
)
.await
.map_err(|_| Error::DatabaseError {
operation: "insert_one",
with: "server",
})?;
let server_id = self.id.clone();
ClientboundNotification::ServerCreate(self).publish(server_id);
Ok(())
}
pub async fn publish_update(&self, data: JsonValue) -> Result<()> {
ClientboundNotification::ServerUpdate {
id: self.id.clone(),
data,
clear: None,
}
.publish(self.id.clone());
Ok(())
}
pub async fn delete(&self) -> Result<()> {
unimplemented!()
}
}