101 lines
1.6 KiB
Go
101 lines
1.6 KiB
Go
|
package pancakeswapnft
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/machinebox/graphql"
|
||
|
"github.com/pkg/errors"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
userQuery = `
|
||
|
query ($where: User_filter) {
|
||
|
users(where: $where) {
|
||
|
id
|
||
|
numberTokensListed
|
||
|
numberTokensPurchased
|
||
|
numberTokensSold
|
||
|
totalVolumeInBNBTokensPurchased
|
||
|
totalVolumeInBNBTokensSold
|
||
|
totalFeesCollectedInBNB
|
||
|
buyTradeHistory {
|
||
|
id
|
||
|
block
|
||
|
timestamp
|
||
|
askPrice
|
||
|
netPrice
|
||
|
buyer {
|
||
|
id
|
||
|
}
|
||
|
seller {
|
||
|
id
|
||
|
}
|
||
|
nft {
|
||
|
tokenId
|
||
|
}
|
||
|
withBNB
|
||
|
}
|
||
|
sellTradeHistory {
|
||
|
id
|
||
|
block
|
||
|
timestamp
|
||
|
askPrice
|
||
|
netPrice
|
||
|
buyer {
|
||
|
id
|
||
|
}
|
||
|
seller {
|
||
|
id
|
||
|
}
|
||
|
nft {
|
||
|
tokenId
|
||
|
}
|
||
|
withBNB
|
||
|
}
|
||
|
askOrderHistory {
|
||
|
id
|
||
|
block
|
||
|
askPrice
|
||
|
timestamp
|
||
|
seller {
|
||
|
id
|
||
|
}
|
||
|
orderType
|
||
|
}
|
||
|
averageTokenPriceInBNBPurchased
|
||
|
averageTokenPriceInBNBSold
|
||
|
}
|
||
|
}`
|
||
|
)
|
||
|
|
||
|
type UserService struct {
|
||
|
graphClient *graphql.Client
|
||
|
}
|
||
|
|
||
|
func NewUserService(graphclient *graphql.Client) *UserService {
|
||
|
return &UserService{
|
||
|
graphClient: graphclient,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *UserService) GetUser(ctx context.Context, address string) (User, error) {
|
||
|
req := graphql.NewRequest(userQuery)
|
||
|
req.Var("where", struct {
|
||
|
Id string `json:"id"`
|
||
|
}{
|
||
|
Id: strings.ToLower(address),
|
||
|
})
|
||
|
|
||
|
var respData struct {
|
||
|
Users []User `json:"users"`
|
||
|
}
|
||
|
if err := s.graphClient.Run(ctx, req, &respData); err != nil {
|
||
|
return User{}, errors.Wrap(err, "requesting graphql")
|
||
|
}
|
||
|
|
||
|
if len(respData.Users) == 0 {
|
||
|
return User{}, errors.Errorf("no user found with id %s", address)
|
||
|
}
|
||
|
return respData.Users[0], nil
|
||
|
}
|