]> Untitled Git - lemmy.git/commitdiff
Add listing type to list communities (#1380)
authorDessalines <dessalines@users.noreply.github.com>
Tue, 26 Jan 2021 17:18:01 +0000 (12:18 -0500)
committerGitHub <noreply@github.com>
Tue, 26 Jan 2021 17:18:01 +0000 (12:18 -0500)
* Adding listing type to ListCommunities. Fixes #1379

* Upgrading lemmy-js-client.

api_tests/package.json
api_tests/yarn.lock
crates/api/src/community.rs
crates/db_views_actor/src/community_view.rs
crates/structs/src/community.rs

index 3e74a5accd06ad6083ea102679a922d206807bbc..e2c4f37a0e4000145e0bad2cdd9c357c66da3ea8 100644 (file)
@@ -16,7 +16,7 @@
     "eslint": "^7.18.0",
     "eslint-plugin-jane": "^9.0.3",
     "jest": "^26.6.3",
-    "lemmy-js-client": "0.9.0-rc.12",
+    "lemmy-js-client": "0.9.1-rc.1",
     "node-fetch": "^2.6.1",
     "prettier": "^2.1.2",
     "ts-jest": "^26.4.4",
index 8b7c8af50aa223472dc870b817ddeb0bcd087f77..8e29aa041725b9902bcf79a2646a1f4104e01631 100644 (file)
@@ -3233,10 +3233,10 @@ language-tags@^1.0.5:
   dependencies:
     language-subtag-registry "~0.3.2"
 
-lemmy-js-client@0.9.0-rc.12:
-  version "0.9.0-rc.12"
-  resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.9.0-rc.12.tgz#991d31c4ef89b9bd4088a17c60b6cbaac997df41"
-  integrity sha512-SeCw9wjU89Zm4YWhr+neHC2XvqoqzJg2e42sFEgcDmnQxpPt2sND9Udu+tjGXatbz0tCu6ybGmpR5M0QT4xx9Q==
+lemmy-js-client@0.9.1-rc.1:
+  version "0.9.1-rc.1"
+  resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.9.1-rc.1.tgz#afe3cb0d4852f849dd087a4756a3771bc920a907"
+  integrity sha512-aVvo4IeJvIPUvypipk4GnyLB6nVQVLfB0arYrMkVV4L7zrZ/0pGtpkMDLaOAj/KpA6O0u9eLmaou5RberZQolA==
 
 leven@^3.1.0:
   version "3.1.0"
index efdea06ad80769e6266b2145ac9688a3cf7119de..055f9bfd5b3f19c1a86a69fa2ecffa040acec938 100644 (file)
@@ -21,6 +21,7 @@ use lemmy_db_queries::{
   Crud,
   Followable,
   Joinable,
+  ListingType,
   SortType,
 };
 use lemmy_db_schema::{
@@ -447,12 +448,14 @@ impl Perform for ListCommunities {
       None => false,
     };
 
+    let type_ = ListingType::from_str(&data.type_)?;
     let sort = SortType::from_str(&data.sort)?;
 
     let page = data.page;
     let limit = data.limit;
     let communities = blocking(context.pool(), move |conn| {
       CommunityQueryBuilder::create(conn)
+        .listing_type(&type_)
         .sort(&sort)
         .show_nsfw(show_nsfw)
         .my_user_id(user_id)
index 05dc37890b16644921b9d5f13f5b8708c21e2817..714fd65e8b3054ebaf3a9612949020c057c82998 100644 (file)
@@ -5,6 +5,7 @@ use lemmy_db_queries::{
   functions::hot_rank,
   fuzzy_search,
   limit_and_offset,
+  ListingType,
   MaybeOptional,
   SortType,
   ToSafe,
@@ -97,6 +98,7 @@ impl CommunityView {
 
 pub struct CommunityQueryBuilder<'a> {
   conn: &'a PgConnection,
+  listing_type: &'a ListingType,
   sort: &'a SortType,
   my_user_id: Option<i32>,
   show_nsfw: bool,
@@ -110,6 +112,7 @@ impl<'a> CommunityQueryBuilder<'a> {
     CommunityQueryBuilder {
       conn,
       my_user_id: None,
+      listing_type: &ListingType::All,
       sort: &SortType::Hot,
       show_nsfw: true,
       search_term: None,
@@ -118,6 +121,11 @@ impl<'a> CommunityQueryBuilder<'a> {
     }
   }
 
+  pub fn listing_type(mut self, listing_type: &'a ListingType) -> Self {
+    self.listing_type = listing_type;
+    self
+  }
+
   pub fn sort(mut self, sort: &'a SortType) -> Self {
     self.sort = sort;
     self
@@ -201,6 +209,12 @@ impl<'a> CommunityQueryBuilder<'a> {
       query = query.filter(community::nsfw.eq(false));
     };
 
+    query = match self.listing_type {
+      ListingType::Subscribed => query.filter(community_follower::user_id.is_not_null()), // TODO could be this: and(community_follower::user_id.eq(user_id_join)),
+      ListingType::Local => query.filter(community::local.eq(true)),
+      _ => query,
+    };
+
     let (limit, offset) = limit_and_offset(self.page, self.limit);
     let res = query
       .limit(limit)
index 5cf3d36d95ee8752ec290d9a04b97b1fc0107d98..fbbf2e4035d1aa522138e9ecf2b75becd345267e 100644 (file)
@@ -39,6 +39,7 @@ pub struct CommunityResponse {
 
 #[derive(Deserialize, Debug)]
 pub struct ListCommunities {
+  pub type_: String,
   pub sort: String,
   pub page: Option<i64>,
   pub limit: Option<i64>,