Add pagination

This commit is contained in:
2025-10-07 22:49:03 -07:00
parent 3c732654d5
commit 7f82574b86
2 changed files with 29 additions and 2 deletions

View File

@@ -1,5 +1,20 @@
class Api::V1::ParksController < ApplicationController class Api::V1::ParksController < ApplicationController
DEFAULT_PAGE_SIZE = 10
def index def index
render json: Park.all parks = Park
.limit(per_page)
.offset((page - 1) * per_page)
render json: parks
end
private
def per_page
(params[:per_page].presence || DEFAULT_PAGE_SIZE).to_i
end
def page
(params[:page].presence || 1).to_i
end end
end end

View File

@@ -2,7 +2,7 @@ require 'rails_helper'
RSpec.describe "Api::V1::Parks", type: :request do RSpec.describe "Api::V1::Parks", type: :request do
describe "GET /index" do describe "GET /index" do
it "returns some parks" do it "returns parks" do
get api_v1_parks_url get api_v1_parks_url
expect(response).to have_http_status(:success) expect(response).to have_http_status(:success)
expect(response.parsed_body).to include( expect(response.parsed_body).to include(
@@ -16,5 +16,17 @@ RSpec.describe "Api::V1::Parks", type: :request do
) )
) )
end end
context "with pagination" do
it "respects page size param" do
get api_v1_parks_url, params: { per_page: 1 }
expect(response.parsed_body.size).to eq(1)
end
it "respects page param" do
get api_v1_parks_url, params: { per_page: 1, page: 2 }
expect(response.parsed_body.first["code"]).to eq("crla")
end
end
end end
end end