6 "github.com/shopspring/decimal"
7 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/db"
8 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/markets"
11 type MarketConfigQuery struct {
18 func (q MarketConfigQuery) ValidateParams() *Error {
19 if q.In.Market != "poloniex" {
20 return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)}
26 func (q MarketConfigQuery) Run() (interface{}, *Error) {
27 config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
29 return nil, NewInternalError(err)
33 configMap := make(map[string]string)
35 configMap["secret"] = ""
37 config, err = db.SetUserMarketConfig(q.In.User.Id, q.In.Market, configMap)
39 return nil, NewInternalError(err)
44 return config.Config, nil
47 type MarketBalanceQuery struct {
55 var Poloniex *markets.Poloniex
58 Poloniex = markets.NewPoloniex()
59 Poloniex.StartTicker()
62 func (q MarketBalanceQuery) ValidateParams() *Error {
63 if q.In.Market != "poloniex" {
64 return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)}
67 // TODO: we should request market for available currencies.
68 if q.In.Currency != "BTC" || q.In.Currency != "USDT" {
69 return &Error{BadRequest, "invalid currency, accept [BTC, USDT]", fmt.Errorf("'%v' is not a valid currency", q.In.Currency)}
75 func (q MarketBalanceQuery) Run() (interface{}, *Error) {
76 config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
78 return nil, NewInternalError(err)
81 if config.Config["key"] == "" || config.Config["secret"] == "" {
82 return nil, &Error{BadRequest, "your credentials for this market are not setup", fmt.Errorf("'%v' credentials are not setup", q.In.Market)}
85 balance, err := Poloniex.GetBalance(config.Config["key"], config.Config["secret"], q.In.Currency)
87 return nil, NewInternalError(err)
91 Balance decimal.Decimal `json:balance`
97 type UpdateMarketConfigQuery struct {
106 func (q UpdateMarketConfigQuery) ValidateParams() *Error {
107 if q.In.Market == "" {
108 return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)}
114 func (q UpdateMarketConfigQuery) Run() (interface{}, *Error) {
115 configMap := make(map[string]string)
117 configMap["key"] = q.In.Key
119 if q.In.Secret != "" {
120 configMap["secret"] = q.In.Secret
123 _, err := db.SetUserMarketConfig(q.In.User.Id, q.In.Market, configMap)
125 return nil, NewInternalError(err)