commit inicial do projeto
This commit is contained in:
82
internal/api/account_handlers.go
Normal file
82
internal/api/account_handlers.go
Normal file
@ -0,0 +1,82 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"dejo_node/internal/state"
|
||||
"dejo_node/internal/storage"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var GlobalState *state.State
|
||||
var GlobalBlockStore *storage.BlockStore
|
||||
|
||||
func HandleGetBalance(w http.ResponseWriter, r *http.Request) {
|
||||
addr := strings.TrimPrefix(r.URL.Path, "/accounts/")
|
||||
if strings.Contains(addr, "/") {
|
||||
addr = strings.Split(addr, "/")[0]
|
||||
}
|
||||
if addr == "" {
|
||||
http.Error(w, "endereço inválido", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
balance := GlobalState.GetBalance(addr)
|
||||
resp := map[string]interface{}{
|
||||
"address": addr,
|
||||
"balance": balance,
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}
|
||||
|
||||
func HandleGetTransactionsByAddress(w http.ResponseWriter, r *http.Request) {
|
||||
addr := strings.TrimPrefix(r.URL.Path, "/accounts/")
|
||||
addr = strings.TrimSuffix(addr, "/txs")
|
||||
if addr == "" {
|
||||
http.Error(w, "endereço inválido", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
txs := []map[string]interface{}{}
|
||||
blocks, err := GlobalBlockStore.LoadAll()
|
||||
if err != nil {
|
||||
http.Error(w, "erro ao carregar blocos", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
for _, blk := range blocks {
|
||||
for _, tx := range blk.Txns {
|
||||
if tx.From == addr || tx.To == addr {
|
||||
txs = append(txs, map[string]interface{}{
|
||||
"from": tx.From,
|
||||
"to": tx.To,
|
||||
"value": tx.Value,
|
||||
"hash": tx.Hash(),
|
||||
"block": blk.Index,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(txs)
|
||||
}
|
||||
|
||||
func (h *Handler) GetTransactionByHash(w http.ResponseWriter, r *http.Request) {
|
||||
hash := strings.TrimPrefix(r.URL.Path, "/transaction/")
|
||||
blocks, err := h.Store.LoadAll()
|
||||
if err != nil {
|
||||
http.Error(w, "erro ao carregar blocos", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
for _, blk := range blocks {
|
||||
for _, tx := range blk.Txns {
|
||||
if tx.Hash() == hash {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(tx)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
http.Error(w, "transação não encontrada", http.StatusNotFound)
|
||||
}
|
||||
Reference in New Issue
Block a user