From 63a4f3c8b68bb4aab64dc4da7a2e61a177066d3a Mon Sep 17 00:00:00 2001 From: laisolizq Date: Thu, 15 Oct 2020 14:21:51 +0200 Subject: [PATCH] Add get token endpoint --- api/api_test.go | 25 +++++++++++++++++++++++++ api/handlers.go | 16 +++++++++++++++- db/historydb/historydb.go | 9 +++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/api/api_test.go b/api/api_test.go index 016cb5c..220c560 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -871,6 +871,31 @@ func assertExitAPIs(t *testing.T, expected, actual []exitAPI) { } } +func TestGetToken(t *testing.T) { + // Get all txs by their ID + endpoint := apiURL + "tokens/" + fetchedTokens := []historydb.TokenRead{} + for _, token := range tc.tokens { + fetchedToken := historydb.TokenRead{} + assert.NoError(t, doGoodReq("GET", endpoint+strconv.Itoa(int(token.TokenID)), nil, &fetchedToken)) + fetchedTokens = append(fetchedTokens, fetchedToken) + } + assertTokensAPIs(t, tc.tokens, fetchedTokens) +} + +func assertTokensAPIs(t *testing.T, expected, actual []historydb.TokenRead) { + require.Equal(t, len(expected), len(actual)) + for i := 0; i < len(actual); i++ { //nolint len(actual) won't change within the loop + if expected[i].USDUpdate == nil { + assert.Equal(t, expected[i].USDUpdate, actual[i].USDUpdate) + } else { + assert.Equal(t, expected[i].USDUpdate.Unix(), actual[i].USDUpdate.Unix()) + expected[i].USDUpdate = actual[i].USDUpdate + } + assert.Equal(t, expected[i], actual[i]) + } +} + func doGoodReqPaginated( path, order string, iterStruct db.Paginationer, diff --git a/api/handlers.go b/api/handlers.go index 72fb44e..a999339 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -5,6 +5,7 @@ import ( "net/http" "github.com/gin-gonic/gin" + "github.com/hermeznetwork/hermez-node/common" "github.com/hermeznetwork/hermez-node/db/historydb" ) @@ -205,7 +206,20 @@ func getTokens(c *gin.Context) { } func getToken(c *gin.Context) { - + // Get TokenID + tokenIDUint, err := parseParamUint("id", nil, 0, maxUint32, c) + if err != nil { + retBadReq(err, c) + return + } + tokenID := common.TokenID(*tokenIDUint) + // Fetch token from historyDB + token, err := h.GetToken(tokenID) + if err != nil { + retSQLErr(err, c) + return + } + c.JSON(http.StatusOK, token) } func getRecommendedFee(c *gin.Context) { diff --git a/db/historydb/historydb.go b/db/historydb/historydb.go index dc8bea7..21e22de 100644 --- a/db/historydb/historydb.go +++ b/db/historydb/historydb.go @@ -288,6 +288,15 @@ func (hdb *HistoryDB) UpdateTokenValue(tokenSymbol string, value float64) error return err } +// GetToken returns a token from the DB given a TokenID +func (hdb *HistoryDB) GetToken(tokenID common.TokenID) (*TokenRead, error) { + token := &TokenRead{} + err := meddler.QueryRow( + hdb.db, token, `SELECT * FROM token WHERE token_id = $1;`, tokenID, + ) + return token, err +} + // GetTokens returns a list of tokens from the DB func (hdb *HistoryDB) GetTokens() ([]TokenRead, error) { var tokens []*TokenRead