arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/api/token.go
api/token.goRaw
 1package api
 2
 3import (
 4	"errors"
 5	"net/http"
 6
 7	"github.com/gin-gonic/gin"
 8	"github.com/hermeznetwork/hermez-node/common"
 9	"github.com/hermeznetwork/hermez-node/db"
10	"github.com/hermeznetwork/hermez-node/db/historydb"
11)
12
13func getToken(c *gin.Context) {
14	// Get TokenID
15	tokenIDUint, err := parseParamUint("id", nil, 0, maxUint32, c)
16	if err != nil {
17		retBadReq(err, c)
18		return
19	}
20	if tokenIDUint == nil { // tokenID is required
21		retBadReq(errors.New("Invalid tokenID"), c)
22		return
23	}
24	tokenID := common.TokenID(*tokenIDUint)
25	// Fetch token from historyDB
26	token, err := h.GetToken(tokenID)
27	if err != nil {
28		retSQLErr(err, c)
29		return
30	}
31	c.JSON(http.StatusOK, token)
32}
33
34func getTokens(c *gin.Context) {
35	// Account filters
36	tokenIDs, symbols, name, err := parseTokenFilters(c)
37	if err != nil {
38		retBadReq(err, c)
39		return
40	}
41
42	// Pagination
43	fromItem, order, limit, err := parsePagination(c)
44	if err != nil {
45		retBadReq(err, c)
46		return
47	}
48	// Fetch exits from historyDB
49	tokens, pagination, err := h.GetTokens(
50		tokenIDs, symbols, name, fromItem, limit, order,
51	)
52	if err != nil {
53		retSQLErr(err, c)
54		return
55	}
56
57	// Build succesfull response
58	type tokensResponse struct {
59		Tokens     []historydb.TokenWithUSD `json:"tokens"`
60		Pagination *db.Pagination           `json:"pagination"`
61	}
62	c.JSON(http.StatusOK, &tokensResponse{
63		Tokens:     tokens,
64		Pagination: pagination,
65	})
66}