+type MarketBalanceQuery struct {
+ In struct {
+ User db.User
+ Market string
+ Currency string
+ }
+}
+
+var Poloniex *markets.Poloniex
+
+func init() {
+ Poloniex = markets.NewPoloniex()
+ Poloniex.StartTicker()
+}
+
+func (q MarketBalanceQuery) ValidateParams() *Error {
+ if q.In.Market != "poloniex" {
+ return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)}
+ }
+
+ // TODO: we should request market for available currencies.
+ if q.In.Currency != "BTC" || q.In.Currency != "USDT" {
+ return &Error{BadRequest, "invalid currency, accept [BTC, USDT]", fmt.Errorf("'%v' is not a valid currency", q.In.Currency)}
+ }
+
+ return nil
+}
+
+func (q MarketBalanceQuery) Run() (interface{}, *Error) {
+ config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
+ if err != nil {
+ return nil, NewInternalError(err)
+ }
+
+ if config.Config["key"] == "" || config.Config["secret"] == "" {
+ return nil, &Error{BadRequest, "your credentials for this market are not setup", fmt.Errorf("'%v' credentials are not setup", q.In.Market)}
+ }
+
+ balance, err := Poloniex.GetBalance(config.Config["key"], config.Config["secret"], q.In.Currency)
+ if err != nil {
+ return nil, NewInternalError(err)
+ }
+
+ result := struct {
+ Balance decimal.Decimal `json:balance`
+ }{balance}
+
+ return &result, nil
+}
+