use crate::newtypes::{CommunityId, DbUrl, PersonId}; use serde::{Deserialize, Serialize}; #[cfg(feature = "full")] use crate::schema::{community, community_follower, community_moderator, community_person_ban}; #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Identifiable))] #[cfg_attr(feature = "full", table_name = "community")] pub struct Community { pub id: CommunityId, pub name: String, pub title: String, pub description: Option, pub removed: bool, pub published: chrono::NaiveDateTime, pub updated: Option, pub deleted: bool, pub nsfw: bool, pub actor_id: DbUrl, pub local: bool, pub private_key: Option, pub public_key: String, pub last_refreshed_at: chrono::NaiveDateTime, pub icon: Option, pub banner: Option, pub followers_url: DbUrl, pub inbox_url: DbUrl, pub shared_inbox_url: Option, pub hidden: bool, pub posting_restricted_to_mods: bool, } /// A safe representation of community, without the sensitive info #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Identifiable))] #[cfg_attr(feature = "full", table_name = "community")] pub struct CommunitySafe { pub id: CommunityId, pub name: String, pub title: String, pub description: Option, pub removed: bool, pub published: chrono::NaiveDateTime, pub updated: Option, pub deleted: bool, pub nsfw: bool, pub actor_id: DbUrl, pub local: bool, pub icon: Option, pub banner: Option, pub hidden: bool, pub posting_restricted_to_mods: bool, } #[derive(Debug, Default)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "community")] pub struct CommunityForm { pub name: String, pub title: String, pub description: Option, pub removed: Option, pub published: Option, pub updated: Option, pub deleted: Option, pub nsfw: Option, pub actor_id: Option, pub local: Option, pub private_key: Option>, pub public_key: String, pub last_refreshed_at: Option, pub icon: Option>, pub banner: Option>, pub followers_url: Option, pub inbox_url: Option, pub shared_inbox_url: Option>, pub hidden: Option, pub posting_restricted_to_mods: Option, } #[derive(PartialEq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", belongs_to(Community))] #[cfg_attr(feature = "full", table_name = "community_moderator")] pub struct CommunityModerator { pub id: i32, pub community_id: CommunityId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, } #[derive(Clone)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "community_moderator")] pub struct CommunityModeratorForm { pub community_id: CommunityId, pub person_id: PersonId, } #[derive(PartialEq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", belongs_to(Community))] #[cfg_attr(feature = "full", table_name = "community_person_ban")] pub struct CommunityPersonBan { pub id: i32, pub community_id: CommunityId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, pub expires: Option, } #[derive(Clone)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "community_person_ban")] pub struct CommunityPersonBanForm { pub community_id: CommunityId, pub person_id: PersonId, pub expires: Option>, } #[derive(PartialEq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", belongs_to(Community))] #[cfg_attr(feature = "full", table_name = "community_follower")] pub struct CommunityFollower { pub id: i32, pub community_id: CommunityId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, pub pending: bool, } #[derive(Clone)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "community_follower")] pub struct CommunityFollowerForm { pub community_id: CommunityId, pub person_id: PersonId, pub pending: Option, }