set baby steps in the transactions query

This commit is contained in:
Ilion Beyst 2015-09-10 14:04:36 +02:00
parent 9bde05abbb
commit 65e6278b67

View file

@ -0,0 +1,47 @@
class TransactionsQuery
def initialize user
@user = user
@transactions = Arel::Table.new(:transactions)
end
def arel
Arel::SelectManager.new(ActiveRecord::Base)
.from(transactions)
.project(
@transactions[:amount],
@transactions[:date],
@transactions[:peer_id],
@transactions[:issuer_id],
@transactions[:message]
)
end
def transactions
Arel::Nodes::UnionAll.new(outgoing, incoming)
end
def outgoing
@transactions
.where(@transactions[:debtor_id].eq(@user.id))
.project(
(@transactions[:amount]*Arel::Nodes::SqlLiteral.new("-1")).as('amount'),
@transactions[:creditor_id].as('peer_id'),
@transactions[:created_at].as('date'),
@transactions[:issuer_id],
@transactions[:issuer_type]
)
end
def incoming
@user.incoming_transactions.arel
@transactions
.where(@transactions[:debtor_id].eq(@user.id))
.project(
@transactions[:amount],
@transactions[:debtor_id].as('peer_id'),
@transactions[:created_at].as('date'),
@transactions[:issuer_id],
@transactions[:issuer_type]
)
end
end