feat: links all cursor pagination

This commit is contained in:
sjdonado
2025-03-16 18:30:52 +01:00
parent 1967cc2c22
commit cd6dfa345b
2 changed files with 27 additions and 4 deletions
+23 -3
View File
@@ -97,10 +97,30 @@ module App::Controllers::Link
def call(env)
user = env.get("user").as(User)
query = Database::Query.where(user_id: user.id.as(String))
links = Database.all(Link, query, preload: [:clicks])
limit = (env.params.query["limit"]? || "100").to_i
cursor = env.params.query["cursor"]?
query = Database::Query.where(user_id: user.id.as(String))
if cursor
query = query.where("id < ?", cursor)
end
query = query.order_by("id DESC").limit(limit + 1)
links = Database.all(Link, query)
has_more = links.size > limit
links = links[0...limit] if has_more
next_cursor = has_more ? links.last.id : nil
response = {
"data" => links.map { |link| App::Serializers::Link.new(link) },
"pagination" => {
"has_more" => has_more,
"next" => next_cursor
}
}
response = {"data" => links.map { |link| App::Serializers::Link.new(link) }}
response.to_json
end
end
+4 -1
View File
@@ -16,7 +16,10 @@ module App::Serializers
builder.field("id", @link.id)
builder.field("refer", @refer)
builder.field("origin", @link.url)
builder.field("clicks", @link.clicks.map { |click| App::Serializers::Click.new(click) })
unless @link.clicks.empty?
builder.field("clicks", @link.clicks.map { |click| App::Serializers::Click.new(click) })
end
end
end
end