]> Untitled Git - lemmy.git/blobdiff - crates/api_common/src/community.rs
add new flag to api (#3363)
[lemmy.git] / crates / api_common / src / community.rs
index 71d7cf7349d558f0920200526645e555dcbe13e1..ff6ed1271a54963793e622e52776e95d9272a2b9 100644 (file)
@@ -5,10 +5,17 @@ use lemmy_db_schema::{
   ListingType,
   SortType,
 };
-use lemmy_db_views_actor::structs::{CommunityModeratorView, CommunityView, PersonViewSafe};
+use lemmy_db_views_actor::structs::{CommunityModeratorView, CommunityView, PersonView};
 use serde::{Deserialize, Serialize};
+use serde_with::skip_serializing_none;
+#[cfg(feature = "full")]
+use ts_rs::TS;
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Get a community. Must provide either an id, or a name.
 pub struct GetCommunity {
   pub id: Option<CommunityId>,
   /// Example: star_trek , or star_trek@xyz.tld
@@ -16,50 +23,78 @@ pub struct GetCommunity {
   pub auth: Option<Sensitive<String>>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// The community response.
 pub struct GetCommunityResponse {
   pub community_view: CommunityView,
   pub site: Option<Site>,
   pub moderators: Vec<CommunityModeratorView>,
-  pub online: usize,
   pub discussion_languages: Vec<LanguageId>,
-  /// Default language used for new posts if none is specified, generated based on community and
-  /// user languages.
-  pub default_post_language: Option<LanguageId>,
 }
 
+#[skip_serializing_none]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+/// Create a community.
 pub struct CreateCommunity {
+  /// The unique name.
   pub name: String,
+  /// A longer title.
   pub title: String,
+  /// A longer sidebar, or description of your community, in markdown.
   pub description: Option<String>,
+  /// An icon URL.
   pub icon: Option<String>,
+  /// A banner URL.
   pub banner: Option<String>,
+  /// Whether its an NSFW community.
   pub nsfw: Option<bool>,
+  /// Whether to restrict posting only to moderators.
   pub posting_restricted_to_mods: Option<bool>,
+  pub discussion_languages: Option<Vec<LanguageId>>,
   pub auth: Sensitive<String>,
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// A simple community response.
 pub struct CommunityResponse {
   pub community_view: CommunityView,
+  pub discussion_languages: Vec<LanguageId>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Fetches a list of communities.
 pub struct ListCommunities {
   pub type_: Option<ListingType>,
   pub sort: Option<SortType>,
+  pub show_nsfw: Option<bool>,
   pub page: Option<i64>,
   pub limit: Option<i64>,
   pub auth: Option<Sensitive<String>>,
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// The response for listing communities.
 pub struct ListCommunitiesResponse {
   pub communities: Vec<CommunityView>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Ban a user from a community.
 pub struct BanFromCommunity {
   pub community_id: CommunityId,
   pub person_id: PersonId,
@@ -71,12 +106,18 @@ pub struct BanFromCommunity {
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// The response for banning a user from a community.
 pub struct BanFromCommunityResponse {
-  pub person_view: PersonViewSafe,
+  pub person_view: PersonView,
   pub banned: bool,
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Add a moderator to a community.
 pub struct AddModToCommunity {
   pub community_id: CommunityId,
   pub person_id: PersonId,
@@ -85,24 +126,42 @@ pub struct AddModToCommunity {
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// The response of adding a moderator to a community.
 pub struct AddModToCommunityResponse {
   pub moderators: Vec<CommunityModeratorView>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Edit a community.
 pub struct EditCommunity {
   pub community_id: CommunityId,
+  /// A longer title.
   pub title: Option<String>,
+  /// A longer sidebar, or description of your community, in markdown.
   pub description: Option<String>,
+  /// An icon URL.
   pub icon: Option<String>,
+  /// A banner URL.
   pub banner: Option<String>,
+  /// Whether its an NSFW community.
   pub nsfw: Option<bool>,
+  /// Whether to restrict posting only to moderators.
   pub posting_restricted_to_mods: Option<bool>,
   pub discussion_languages: Option<Vec<LanguageId>>,
   pub auth: Sensitive<String>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Hide a community from the main view.
+// TODO this should really be a part of edit community. And why does it contain a reason, that should be in the mod tables.
 pub struct HideCommunity {
   pub community_id: CommunityId,
   pub hidden: bool,
@@ -110,14 +169,22 @@ pub struct HideCommunity {
   pub auth: Sensitive<String>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Delete your own community.
 pub struct DeleteCommunity {
   pub community_id: CommunityId,
   pub deleted: bool,
   pub auth: Sensitive<String>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Remove a community (only doable by moderators).
 pub struct RemoveCommunity {
   pub community_id: CommunityId,
   pub removed: bool,
@@ -127,6 +194,9 @@ pub struct RemoveCommunity {
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Follow / subscribe to a community.
 pub struct FollowCommunity {
   pub community_id: CommunityId,
   pub follow: bool,
@@ -134,19 +204,29 @@ pub struct FollowCommunity {
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Block a community.
 pub struct BlockCommunity {
   pub community_id: CommunityId,
   pub block: bool,
   pub auth: Sensitive<String>,
 }
 
+#[skip_serializing_none]
 #[derive(Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// The block community response.
 pub struct BlockCommunityResponse {
   pub community_view: CommunityView,
   pub blocked: bool,
 }
 
 #[derive(Debug, Serialize, Deserialize, Clone, Default)]
+#[cfg_attr(feature = "full", derive(TS))]
+#[cfg_attr(feature = "full", ts(export))]
+/// Transfer a community to a new owner.
 pub struct TransferCommunity {
   pub community_id: CommunityId,
   pub person_id: PersonId,