Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature add hours as sorting options backend #3161

Merged
merged 3 commits into from
Jun 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions crates/db_schema/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ pub enum SortType {
TopAll,
MostComments,
NewComments,
TopHour,
TopSixHour,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice job. We did need to make sure these got appended, to make sure people's existing sort types didn't get wiped out.

TopTwelveHour,
}

#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)]
Expand Down
5 changes: 4 additions & 1 deletion crates/db_schema/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions crates/db_views/src/post_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)?;
Expand Down
9 changes: 9 additions & 0 deletions crates/db_views_actor/src/person_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)?;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did some searching and this does appear to be the correct way to do it, nice job.


-- drop the old enum
drop type sort_type_enum__;
Original file line number Diff line number Diff line change
@@ -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';