use crate::newtypes::{CommunityId, DbUrl, InstanceId, PersonId}; #[cfg(feature = "full")] use crate::schema::{community, community_follower, community_moderator, community_person_ban}; use serde::{Deserialize, Serialize}; use typed_builder::TypedBuilder; #[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Identifiable))] #[cfg_attr(feature = "full", diesel(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, pub instance_id: InstanceId, } /// A safe representation of community, without the sensitive info #[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Identifiable))] #[cfg_attr(feature = "full", diesel(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, pub instance_id: InstanceId, } #[derive(Debug, Clone, TypedBuilder)] #[builder(field_defaults(default))] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = community))] pub struct CommunityInsertForm { #[builder(!default)] pub name: String, #[builder(!default)] 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, #[builder(!default)] pub instance_id: InstanceId, } #[derive(Debug, Clone, TypedBuilder)] #[builder(field_defaults(default))] #[cfg_attr(feature = "full", derive(AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = community))] pub struct CommunityUpdateForm { pub title: Option, 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 public_key: Option, pub private_key: Option>, 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, Eq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr( feature = "full", diesel(belongs_to(crate::source::community::Community)) )] #[cfg_attr(feature = "full", diesel(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", diesel(table_name = community_moderator))] pub struct CommunityModeratorForm { pub community_id: CommunityId, pub person_id: PersonId, } #[derive(PartialEq, Eq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr( feature = "full", diesel(belongs_to(crate::source::community::Community)) )] #[cfg_attr(feature = "full", diesel(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", diesel(table_name = community_person_ban))] pub struct CommunityPersonBanForm { pub community_id: CommunityId, pub person_id: PersonId, pub expires: Option>, } #[derive(PartialEq, Eq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr( feature = "full", diesel(belongs_to(crate::source::community::Community)) )] #[cfg_attr(feature = "full", diesel(table_name = community_follower))] pub struct CommunityFollower { pub id: i32, pub community_id: CommunityId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, pub pending: Option, } #[derive(Clone)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = community_follower))] pub struct CommunityFollowerForm { pub community_id: CommunityId, pub person_id: PersonId, pub pending: bool, }