From d6c01586fe1703d69184828b332e2eace844cac8 Mon Sep 17 00:00:00 2001 From: ENT8R Date: Thu, 3 Oct 2019 14:12:27 +0200 Subject: [PATCH 1/3] Sort and order notes by different values and ascending or descending order --- app/controllers/api/notes_controller.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/notes_controller.rb b/app/controllers/api/notes_controller.rb index fc9167eb3..23ea4e955 100644 --- a/app/controllers/api/notes_controller.rb +++ b/app/controllers/api/notes_controller.rb @@ -294,11 +294,14 @@ module Api raise OSM::APIBadUserInput, "Date #{params[:to]} is in a wrong format" end - @notes = @notes.where(:created_at => from..to) + @notes = params[:sort] == "created_at" ? @notes.where(:created_at => from..to) : @notes.where(:updated_at => from..to) end # Find the notes we want to return - @notes = @notes.order("updated_at DESC").limit(result_limit).preload(:comments) + sort_by = params[:sort_by] == "created_at" ? "created_at" : "updated_at" + order_by = params[:order_by] == "ASC" ? "ASC" : "DESC" + + @notes = @notes.order("#{sort_by} #{order_by}").limit(result_limit).preload(:comments) # Render the result respond_to do |format| From b7bdc88008672fd065529f1b016256a55964fe1b Mon Sep 17 00:00:00 2001 From: ENT8R Date: Thu, 3 Oct 2019 17:17:59 +0200 Subject: [PATCH 2/3] Don't expose technical terms to the user --- app/controllers/api/notes_controller.rb | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/notes_controller.rb b/app/controllers/api/notes_controller.rb index 23ea4e955..703f275aa 100644 --- a/app/controllers/api/notes_controller.rb +++ b/app/controllers/api/notes_controller.rb @@ -298,10 +298,21 @@ module Api end # Find the notes we want to return - sort_by = params[:sort_by] == "created_at" ? "created_at" : "updated_at" - order_by = params[:order_by] == "ASC" ? "ASC" : "DESC" + @notes = if params[:sort] == "created_at" + if params[:order] == "oldest" + @notes.order("created_at ASC") + else + @notes.order("created_at DESC") + end + else + if params[:order] == "oldest" + @notes.order("updated_at ASC") + else + @notes.order("updated_at DESC") + end + end - @notes = @notes.order("#{sort_by} #{order_by}").limit(result_limit).preload(:comments) + @notes = @notes.distinct.limit(result_limit).preload(:comments) # Render the result respond_to do |format| From b84799f481e67c7a5cf6964e228c7a617b1defc7 Mon Sep 17 00:00:00 2001 From: ENT8R Date: Wed, 19 Feb 2020 12:58:47 +0100 Subject: [PATCH 3/3] Keep the behaviour backwards-compatible --- app/controllers/api/notes_controller.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/notes_controller.rb b/app/controllers/api/notes_controller.rb index 703f275aa..a73240e5f 100644 --- a/app/controllers/api/notes_controller.rb +++ b/app/controllers/api/notes_controller.rb @@ -294,10 +294,14 @@ module Api raise OSM::APIBadUserInput, "Date #{params[:to]} is in a wrong format" end - @notes = params[:sort] == "created_at" ? @notes.where(:created_at => from..to) : @notes.where(:updated_at => from..to) + @notes = if params[:sort] == "updated_at" + @notes.where(:updated_at => from..to) + else + @notes.where(:created_at => from..to) + end end - # Find the notes we want to return + # Choose the sort order @notes = if params[:sort] == "created_at" if params[:order] == "oldest" @notes.order("created_at ASC") @@ -312,6 +316,7 @@ module Api end end + # Find the notes we want to return @notes = @notes.distinct.limit(result_limit).preload(:comments) # Render the result