37 lines
1.1 KiB
Ruby
37 lines
1.1 KiB
Ruby
|
module Connections
|
||
|
class PendingDeletedDossiersConnection < CursorConnection
|
||
|
def cursor_for(item)
|
||
|
if item.en_construction?
|
||
|
cursor_from_column(item, :hidden_by_user_at)
|
||
|
else
|
||
|
cursor_from_column(item, :hidden_by_administration_at)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def resolve_nodes(before:, after:, limit:, inverted:)
|
||
|
order = inverted ? :desc : :asc
|
||
|
|
||
|
dossiers_table = Dossier.arel_table
|
||
|
case_statement = dossiers_table[:state]
|
||
|
.when(:en_construction)
|
||
|
.then(dossiers_table[:hidden_by_user_at])
|
||
|
.else(dossiers_table[:hidden_by_administration_at])
|
||
|
|
||
|
nodes = items.order(case_statement.public_send(order)).order(dossiers_table[:id].public_send(order))
|
||
|
nodes = nodes.limit(limit)
|
||
|
|
||
|
if before.present?
|
||
|
timestamp, id = timestamp_and_id_from_cursor(before)
|
||
|
nodes.where("(#{case_statement.to_sql}, dossiers.id) < (?, ?)", timestamp, id)
|
||
|
elsif after.present?
|
||
|
timestamp, id = timestamp_and_id_from_cursor(after)
|
||
|
nodes.where("(#{case_statement.to_sql}, dossiers.id) > (?, ?)", timestamp, id)
|
||
|
else
|
||
|
nodes
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|