arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/api/account.go
api/account.goRaw
 1package api
 2
 3import (
 4	"net/http"
 5
 6	"github.com/gin-gonic/gin"
 7	"github.com/hermeznetwork/hermez-node/apitypes"
 8	"github.com/hermeznetwork/hermez-node/db"
 9	"github.com/hermeznetwork/hermez-node/db/historydb"
10)
11
12func getAccount(c *gin.Context) {
13	// Get Addr
14	idx, err := parseParamIdx(c)
15	if err != nil {
16		retBadReq(err, c)
17		return
18	}
19	apiAccount, err := h.GetAccountAPI(*idx)
20	if err != nil {
21		retSQLErr(err, c)
22		return
23	}
24
25	// Get balance from stateDB
26	account, err := s.GetAccount(*idx)
27	if err != nil {
28		retSQLErr(err, c)
29		return
30	}
31
32	apiAccount.Balance = apitypes.NewBigIntStr(account.Balance)
33
34	c.JSON(http.StatusOK, apiAccount)
35}
36
37func getAccounts(c *gin.Context) {
38	// Account filters
39	tokenIDs, addr, bjj, err := parseAccountFilters(c)
40	if err != nil {
41		retBadReq(err, c)
42		return
43	}
44	// Pagination
45	fromItem, order, limit, err := parsePagination(c)
46	if err != nil {
47		retBadReq(err, c)
48		return
49	}
50
51	// Fetch Accounts from historyDB
52	apiAccounts, pagination, err := h.GetAccountsAPI(tokenIDs, addr, bjj, fromItem, limit, order)
53	if err != nil {
54		retSQLErr(err, c)
55		return
56	}
57
58	// Get balances from stateDB
59	for x, apiAccount := range apiAccounts {
60		idx, err := stringToIdx(string(apiAccount.Idx), "Account Idx")
61		if err != nil {
62			retSQLErr(err, c)
63			return
64		}
65		account, err := s.GetAccount(*idx)
66		if err != nil {
67			retSQLErr(err, c)
68			return
69		}
70		apiAccounts[x].Balance = apitypes.NewBigIntStr(account.Balance)
71	}
72
73	// Build succesfull response
74	type accountResponse struct {
75		Accounts   []historydb.AccountAPI `json:"accounts"`
76		Pagination *db.Pagination         `json:"pagination"`
77	}
78	c.JSON(http.StatusOK, &accountResponse{
79		Accounts:   apiAccounts,
80		Pagination: pagination,
81	})
82}