use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; use time::OffsetDateTime; use uuid::Uuid; #[derive( Debug, Clone, Copy, PartialEq, Eq, Default, EnumIter, DeriveActiveEnum, Serialize, Deserialize, )] #[sea_orm(rs_type = "i32", db_type = "SmallInteger")] pub enum MemberStatus { #[default] Active = 0, Inactive = 1, Left = 2, Removed = 3, } #[derive( Debug, Clone, Copy, PartialEq, Eq, Default, EnumIter, DeriveActiveEnum, Serialize, Deserialize, )] #[sea_orm(rs_type = "i32", db_type = "SmallInteger")] pub enum MessageNotifications { #[default] All = 0, Mentions = 1, Nothing = 2, } #[sea_orm::model] #[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "space_members")] pub struct Model { #[sea_orm(primary_key, auto_increment = false)] pub space_id: Uuid, #[sea_orm(primary_key, auto_increment = false)] pub user_id: Uuid, pub alias_name: Option, pub alias_avatar_url: Option, pub status: MemberStatus, pub last_active_at: Option, pub left_at: Option, pub invited_at: Option, pub invited_by: Option, pub joined_at: OffsetDateTime, pub created_at: OffsetDateTime, pub updated_at: Option, #[sea_orm(default_value = 0)] pub message_notifications: MessageNotifications, #[sea_orm(default_value = "false")] pub muted: bool, pub mute_until: Option, #[sea_orm(default_value = "false")] pub mobile_push: bool, #[sea_orm(default_value = "false")] pub suppress_everyone: bool, #[sea_orm(default_value = "false")] pub suppress_roles: bool, #[sea_orm(default_value = "false")] pub hide_muted_channels: bool, #[sea_orm(belongs_to, from = "space_id", to = "id")] pub space: BelongsTo, #[sea_orm(belongs_to, relation_enum = "Member", from = "user_id", to = "uid")] pub user: BelongsTo, #[sea_orm(belongs_to, relation_enum = "Inviter", from = "invited_by", to = "uid")] pub inviter: BelongsTo>, } impl ActiveModelBehavior for ActiveModel {}