Skip to content

Commit

Permalink
Expose info about existence of prev/next page
Browse files Browse the repository at this point in the history
  • Loading branch information
nelsonkopliku committed Aug 8, 2024
1 parent b9972ab commit 48cb88c
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 4 deletions.
54 changes: 51 additions & 3 deletions lib/trento_web/openapi/v1/schema/activity_log.ex
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,56 @@ defmodule TrentoWeb.OpenApi.V1.Schema.ActivityLog do
})
end

defmodule Pagination do
@moduledoc false
OpenApiSpex.schema(%{
additionalProperties: false,
type: :object,
properties: %{
start_cursor: %Schema{
type: :string,
description: "Cursor pointing to the start of the list.",
nullable: true
},
end_cursor: %Schema{
type: :string,
description: "Cursor pointing to the end of the list.",
nullable: true
},
has_next_page: %Schema{
type: :boolean,
description: "Flag indicating if there are more pages after the current one.",
nullable: false
},
has_previous_page: %Schema{
type: :boolean,
description: "Flag indicating if there are more pages before the current one.",
nullable: false
},
first: %Schema{
type: :integer,
description:
"Number of elements requested from the beginning of the list (forward navigation).",
nullable: true
},
last: %Schema{
type: :integer,
description:
"Number of elements requested from the end of the list (backward navigation).",
nullable: true
}
},
required: [
:start_cursor,
:end_cursor,
:has_next_page,
:has_previous_page,
:first,
:last
]
})
end

defmodule ActivityLog do
@moduledoc false

Expand All @@ -49,9 +99,7 @@ defmodule TrentoWeb.OpenApi.V1.Schema.ActivityLog do
type: :object,
properties: %{
data: ActivityLogEntries,
pagination: %Schema{
type: :object
}
pagination: Pagination
},
required: [:data, :pagination]
},
Expand Down
6 changes: 5 additions & 1 deletion lib/trento_web/views/v1/activity_log_view.ex
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ defmodule TrentoWeb.V1.ActivityLogView do
%{
end_cursor: end_cursor,
start_cursor: start_cursor,
has_next_page?: has_next_page,
has_previous_page?: has_previous_page,
flop: %{
first: first,
last: last
Expand All @@ -34,7 +36,9 @@ defmodule TrentoWeb.V1.ActivityLogView do
start_cursor: start_cursor,
end_cursor: end_cursor,
first: first,
last: last
last: last,
has_next_page: has_next_page,
has_previous_page: has_previous_page
}
end
end
25 changes: 25 additions & 0 deletions test/trento/activity_log_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -295,5 +295,30 @@ defmodule Trento.ActivityLogTest do
assert length(next_logs_alt) == length(next_logs)
assert next_logs_alt == next_logs
end

test "should expose information about the existence of previous or next page to navigate to" do
insert_list(100, :activity_log_entry)

assert {:ok, _,
%{has_previous_page?: false, has_next_page?: true, start_cursor: start_cursor}} =
ActivityLog.list_activity_log(%{first: 5})

assert {:ok, [],
%{
end_cursor: nil,
start_cursor: nil
}} =
ActivityLog.list_activity_log(%{last: 5, before: start_cursor})

assert {:ok, _, %{has_previous_page?: true, has_next_page?: false, end_cursor: end_cursor}} =
ActivityLog.list_activity_log(%{last: 5})

assert {:ok, [],
%{
end_cursor: nil,
start_cursor: nil
}} =
ActivityLog.list_activity_log(%{first: 5, after: end_cursor})
end
end
end

0 comments on commit 48cb88c

Please sign in to comment.