feat(core/models): implement server members model

closes #280
This commit is contained in:
Paul Makles
2023-08-01 15:00:07 +01:00
parent fec947b4c8
commit d9dd040db4
5 changed files with 78 additions and 9 deletions

View File

@@ -2,6 +2,7 @@ mod bots;
mod channel_webhooks;
mod channels;
mod files;
mod server_members;
mod servers;
mod users;
@@ -9,5 +10,6 @@ pub use bots::*;
pub use channel_webhooks::*;
pub use channels::*;
pub use files::*;
pub use server_members::*;
pub use servers::*;
pub use users::*;

View File

@@ -0,0 +1,42 @@
use super::File;
use iso8601_timestamp::Timestamp;
auto_derived!(
/// Server Member
pub struct Member {
/// Unique member id
#[cfg_attr(feature = "serde", serde(rename = "_id"))]
pub id: MemberCompositeKey,
/// Time at which this user joined the server
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub joined_at: Option<Timestamp>,
/// Member's nickname
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub nickname: Option<String>,
/// Avatar attachment
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub avatar: Option<File>,
/// Member's roles
#[cfg_attr(
feature = "serde",
serde(skip_serializing_if = "Vec::is_empty", default)
)]
pub roles: Vec<String>,
/// Timestamp this member is timed out until
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub timeout: Option<Timestamp>,
}
/// Composite primary key consisting of server and user id
#[derive(Hash, Default)]
pub struct MemberCompositeKey {
/// Server Id
pub server: String,
/// User Id
pub user: String,
}
);