From: Dessalines Date: Tue, 26 Jan 2021 17:18:01 +0000 (-0500) Subject: Add listing type to list communities (#1380) X-Git-Url: http://these/git/%7B%60/feeds/u/README.zh.hant.md?a=commitdiff_plain;h=cf911c023df320d43d631191cb1de6f017158ea1;p=lemmy.git Add listing type to list communities (#1380) * Adding listing type to ListCommunities. Fixes #1379 * Upgrading lemmy-js-client. --- diff --git a/api_tests/package.json b/api_tests/package.json index 3e74a5ac..e2c4f37a 100644 --- a/api_tests/package.json +++ b/api_tests/package.json @@ -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", diff --git a/api_tests/yarn.lock b/api_tests/yarn.lock index 8b7c8af5..8e29aa04 100644 --- a/api_tests/yarn.lock +++ b/api_tests/yarn.lock @@ -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" diff --git a/crates/api/src/community.rs b/crates/api/src/community.rs index efdea06a..055f9bfd 100644 --- a/crates/api/src/community.rs +++ b/crates/api/src/community.rs @@ -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) diff --git a/crates/db_views_actor/src/community_view.rs b/crates/db_views_actor/src/community_view.rs index 05dc3789..714fd65e 100644 --- a/crates/db_views_actor/src/community_view.rs +++ b/crates/db_views_actor/src/community_view.rs @@ -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, 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) diff --git a/crates/structs/src/community.rs b/crates/structs/src/community.rs index 5cf3d36d..fbbf2e40 100644 --- a/crates/structs/src/community.rs +++ b/crates/structs/src/community.rs @@ -39,6 +39,7 @@ pub struct CommunityResponse { #[derive(Deserialize, Debug)] pub struct ListCommunities { + pub type_: String, pub sort: String, pub page: Option, pub limit: Option,