From 4d160461ce0d0090e98bbb941bffdeafca600c5f Mon Sep 17 00:00:00 2001 From: Ivo Barros Date: Tue, 20 Jun 2023 15:05:43 +0100 Subject: [PATCH] Feature add hours as sorting options backend (#3161) * add hours as sorting options * ran cargo +nightly fmt * woodpicker trigger --- crates/db_schema/src/lib.rs | 3 +++ crates/db_schema/src/utils.rs | 5 ++++- crates/db_views/src/post_view.rs | 12 ++++++++++++ crates/db_views_actor/src/person_view.rs | 9 +++++++++ .../down.sql | 14 ++++++++++++++ .../up.sql | 4 ++++ 6 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/down.sql create mode 100644 migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/up.sql diff --git a/crates/db_schema/src/lib.rs b/crates/db_schema/src/lib.rs index 47997206..4ab26981 100644 --- a/crates/db_schema/src/lib.rs +++ b/crates/db_schema/src/lib.rs @@ -59,6 +59,9 @@ pub enum SortType { TopAll, MostComments, NewComments, + TopHour, + TopSixHour, + TopTwelveHour, } #[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)] diff --git a/crates/db_schema/src/utils.rs b/crates/db_schema/src/utils.rs index bba1d810..98d3952a 100644 --- a/crates/db_schema/src/utils.rs +++ b/crates/db_schema/src/utils.rs @@ -196,7 +196,10 @@ pub fn post_to_comment_sort_type(sort: SortType) -> CommentSortType { SortType::Active | SortType::Hot => CommentSortType::Hot, SortType::New | SortType::NewComments | SortType::MostComments => CommentSortType::New, SortType::Old => CommentSortType::Old, - SortType::TopDay + SortType::TopHour + | SortType::TopSixHour + | SortType::TopTwelveHour + | SortType::TopDay | SortType::TopAll | SortType::TopWeek | SortType::TopYear diff --git a/crates/db_views/src/post_view.rs b/crates/db_views/src/post_view.rs index 2c1b9d1d..4c65f568 100644 --- a/crates/db_views/src/post_view.rs +++ b/crates/db_views/src/post_view.rs @@ -414,6 +414,18 @@ impl<'a> PostQuery<'a> { .filter(post_aggregates::published.gt(now - 1.days())) .then_order_by(post_aggregates::score.desc()) .then_order_by(post_aggregates::published.desc()), + SortType::TopHour => query + .filter(post_aggregates::published.gt(now - 1.hours())) + .then_order_by(post_aggregates::score.desc()) + .then_order_by(post_aggregates::published.desc()), + SortType::TopSixHour => query + .filter(post_aggregates::published.gt(now - 6.hours())) + .then_order_by(post_aggregates::score.desc()) + .then_order_by(post_aggregates::published.desc()), + SortType::TopTwelveHour => query + .filter(post_aggregates::published.gt(now - 12.hours())) + .then_order_by(post_aggregates::score.desc()) + .then_order_by(post_aggregates::published.desc()), }; let (limit, offset) = limit_and_offset(self.page, self.limit)?; diff --git a/crates/db_views_actor/src/person_view.rs b/crates/db_views_actor/src/person_view.rs index 43f99dfd..c7876cc1 100644 --- a/crates/db_views_actor/src/person_view.rs +++ b/crates/db_views_actor/src/person_view.rs @@ -113,6 +113,15 @@ impl<'a> PersonQuery<'a> { SortType::TopDay => query .filter(person::published.gt(now - 1.days())) .order_by(person_aggregates::comment_score.desc()), + SortType::TopHour => query + .filter(person::published.gt(now - 1.hours())) + .order_by(person_aggregates::comment_score.desc()), + SortType::TopSixHour => query + .filter(person::published.gt(now - 6.hours())) + .order_by(person_aggregates::comment_score.desc()), + SortType::TopTwelveHour => query + .filter(person::published.gt(now - 12.hours())) + .order_by(person_aggregates::comment_score.desc()), }; let (limit, offset) = limit_and_offset(self.page, self.limit)?; diff --git a/migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/down.sql b/migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/down.sql new file mode 100644 index 00000000..006bb108 --- /dev/null +++ b/migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/down.sql @@ -0,0 +1,14 @@ +-- update the default sort type +update local_user set default_sort_type = 'TopDay' where default_sort_type in ('TopHour', 'TopSixHour', 'TopTwelveHour'); + +-- rename the old enum +alter type sort_type_enum rename to sort_type_enum__; +-- create the new enum +CREATE TYPE sort_type_enum AS ENUM ('Active', 'Hot', 'New', 'Old', 'TopDay', 'TopWeek', 'TopMonth', 'TopYear', 'TopAll', 'MostComments', 'NewComments'); + +-- alter all you enum columns +alter table local_user + alter column default_sort_type type sort_type_enum using default_sort_type::text::sort_type_enum; + +-- drop the old enum +drop type sort_type_enum__; \ No newline at end of file diff --git a/migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/up.sql b/migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/up.sql new file mode 100644 index 00000000..7e4b6fbd --- /dev/null +++ b/migrations/2023-06-17-175955_add_listingtype_sorttype_hour_enums/up.sql @@ -0,0 +1,4 @@ +-- Update the enums +ALTER TYPE sort_type_enum ADD VALUE 'TopHour'; +ALTER TYPE sort_type_enum ADD VALUE 'TopSixHour'; +ALTER TYPE sort_type_enum ADD VALUE 'TopTwelveHour'; \ No newline at end of file -- 2.44.1