arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
Merge pull request #200 from hermeznetwork/feature/api-gettoken

Add get token endpoint
a_bennassar arnaubennassar5@gmail.com
Thu, 15 Oct 2020 15:14:18 +0200
commit

98255b99be924e2a54d0b8386e4512b70820bfcd

parent

8dbcdaf4eaab6d3c29ba01aabfdffd5afed84e52

3 files changed, 49 insertions(+), 1 deletions(-)

jump to
M api/api_test.go → api/api_test.go

@@ -871,6 +871,31 @@ assert.Equal(t, expected[i], actual[i])

} } +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,
M api/handlers.go → api/handlers.go

@@ -5,6 +5,7 @@ "database/sql"

"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 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) {
M db/historydb/historydb.go → db/historydb/historydb.go

@@ -288,6 +288,15 @@ )

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