-
Notifications
You must be signed in to change notification settings - Fork 28
/
account_transactions.go
71 lines (57 loc) · 1.86 KB
/
account_transactions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package handlers
import (
"strings"
applogger "github.com/crypto-com/chain-indexing/external/logger"
"github.com/valyala/fasthttp"
"github.com/crypto-com/chain-indexing/appinterface/projection/view"
"github.com/crypto-com/chain-indexing/appinterface/rdb"
"github.com/crypto-com/chain-indexing/infrastructure/httpapi"
account_transaction_view "github.com/crypto-com/chain-indexing/projection/account_transaction/view"
)
type AccountTransactions struct {
logger applogger.Logger
accountTransactionsView *account_transaction_view.AccountTransactions
}
func NewAccountTransactions(logger applogger.Logger, rdbHandle *rdb.Handle) *AccountTransactions {
return &AccountTransactions{
logger.WithFields(applogger.LogFields{
"module": "AccountTransactionsHandler",
}),
account_transaction_view.NewAccountTransactions(rdbHandle),
}
}
func (handler *AccountTransactions) ListByAccount(ctx *fasthttp.RequestCtx) {
pagination, err := httpapi.ParsePagination(ctx)
if err != nil {
ctx.SetStatusCode(fasthttp.StatusBadRequest)
return
}
account, accountOk := URLValueGuard(ctx, handler.logger, "account")
if !accountOk {
return
}
queryArgs := ctx.QueryArgs()
idOrder := view.ORDER_ASC
if queryArgs.Has("order") {
if string(queryArgs.Peek("order")) == "height.desc" {
idOrder = view.ORDER_DESC
}
}
memo := ""
if queryArgs.Has("memo") {
memo = string(queryArgs.Peek("memo"))
}
filter := account_transaction_view.AccountTransactionsListFilter{
Account: strings.ToLower(account),
Memo: memo,
}
blocks, paginationResult, err := handler.accountTransactionsView.List(
filter, account_transaction_view.AccountTransactionsListOrder{Id: idOrder}, pagination,
)
if err != nil {
handler.logger.Errorf("error listing account transactions: %v", err)
httpapi.InternalServerError(ctx)
return
}
httpapi.SuccessWithPagination(ctx, blocks, paginationResult)
}