aboutsummaryrefslogtreecommitdiff
path: root/api/market_config.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/market_config.go')
-rw-r--r--api/market_config.go75
1 files changed, 42 insertions, 33 deletions
diff --git a/api/market_config.go b/api/market_config.go
index c2248b3..81a92d1 100644
--- a/api/market_config.go
+++ b/api/market_config.go
@@ -5,11 +5,9 @@ import (
5 "strings" 5 "strings"
6 "time" 6 "time"
7 7
8 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/markets"
9
10 "github.com/jloup/utils" 8 "github.com/jloup/utils"
11 "github.com/shopspring/decimal"
12 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/db" 9 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/db"
10 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/markets"
13) 11)
14 12
15type MarketConfigQuery struct { 13type MarketConfigQuery struct {
@@ -56,45 +54,33 @@ func (q MarketConfigQuery) Run() (interface{}, *Error) {
56 return config.Config, nil 54 return config.Config, nil
57} 55}
58 56
59type MarketBalanceQuery struct { 57type TestMarketCredentialsQuery struct {
60 In struct { 58 In struct {
61 User db.User 59 User db.User
62 Market string 60 Market string
63 Currency string
64 } 61 }
65} 62}
66 63
67func (q MarketBalanceQuery) ValidateParams() *Error { 64func (q TestMarketCredentialsQuery) ValidateParams() *Error {
68 if q.In.Market != "poloniex" { 65 if q.In.Market != "poloniex" {
69 return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)} 66 return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)}
70 } 67 }
71 68
72 // TODO: we should request market for available currencies.
73 if q.In.Currency != "BTC" && q.In.Currency != "USDT" && q.In.Currency != "ETH" {
74 return &Error{BadRequest, "invalid currency, accept [BTC, USDT, ETH]", fmt.Errorf("'%v' is not a valid currency", q.In.Currency)}
75 }
76
77 return nil 69 return nil
78} 70}
79 71
80func (q MarketBalanceQuery) Run() (interface{}, *Error) { 72func (q TestMarketCredentialsQuery) Run() (interface{}, *Error) {
81 config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market) 73 config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
82 if err != nil { 74 if err != nil {
83 return nil, NewInternalError(err) 75 return nil, NewInternalError(err)
84 } 76 }
85 77
86 if config.Config["key"] == "" || config.Config["secret"] == "" { 78 if config.Config["key"] == "" || config.Config["secret"] == "" {
87 return nil, &Error{InvalidMarketCredentials, "your credentials for this market are not setup", fmt.Errorf("'%v' credentials are not setup", q.In.Market)} 79 return nil, &Error{InvalidMarketCredentials, "no market credentials", fmt.Errorf("market credentials are empty for marketId '%v'", q.In.Market)}
88 } 80 }
89 81
90 result := struct {
91 Value decimal.Decimal `json:"value"`
92 ValueCurrency string `json:"valueCurrency"`
93 Balance map[string]markets.Balance `json:"balance"`
94 }{}
95
96 resultErr := CallExternalService(fmt.Sprintf("'%s' GetBalanceValue", q.In.Market), EXTERNAL_SERVICE_TIMEOUT_SECONDS*time.Second, func() *Error { 82 resultErr := CallExternalService(fmt.Sprintf("'%s' GetBalanceValue", q.In.Market), EXTERNAL_SERVICE_TIMEOUT_SECONDS*time.Second, func() *Error {
97 balance, err := Poloniex.GetBalance(config.Config["key"], config.Config["secret"]) 83 err := Poloniex.TestCredentials(config.Config["key"], config.Config["secret"])
98 84
99 if utils.ErrIs(err, markets.InvalidCredentials) { 85 if utils.ErrIs(err, markets.InvalidCredentials) {
100 return &Error{InvalidMarketCredentials, "wrong market credentials", fmt.Errorf("wrong '%v' market credentials", q.In.Market)} 86 return &Error{InvalidMarketCredentials, "wrong market credentials", fmt.Errorf("wrong '%v' market credentials", q.In.Market)}
@@ -108,16 +94,6 @@ func (q MarketBalanceQuery) Run() (interface{}, *Error) {
108 return NewInternalError(err) 94 return NewInternalError(err)
109 } 95 }
110 96
111 for currency, value := range balance.Balances {
112 if value.BTCValue.Abs().LessThan(decimal.NewFromFloat(0.0001)) {
113 delete(balance.Balances, currency)
114 }
115 }
116
117 result.Balance = balance.Balances
118 result.ValueCurrency = "BTC"
119 result.Value = balance.BTCValue.Round(8)
120
121 return nil 97 return nil
122 }) 98 })
123 99
@@ -125,7 +101,7 @@ func (q MarketBalanceQuery) Run() (interface{}, *Error) {
125 return nil, resultErr 101 return nil, resultErr
126 } 102 }
127 103
128 return &result, nil 104 return nil, nil
129} 105}
130 106
131type UpdateMarketConfigQuery struct { 107type UpdateMarketConfigQuery struct {
@@ -164,3 +140,36 @@ func (q UpdateMarketConfigQuery) Run() (interface{}, *Error) {
164 140
165 return nil, nil 141 return nil, nil
166} 142}
143
144type GetPortfolioQuery struct {
145 In struct {
146 User db.User
147 Market string
148 }
149}
150
151func (q GetPortfolioQuery) ValidateParams() *Error {
152 if q.In.Market != "poloniex" {
153 return &Error{BadRequest, "invalid market name", fmt.Errorf("'%v' is not a valid market name", q.In.Market)}
154 }
155
156 return nil
157}
158
159func (q GetPortfolioQuery) Run() (interface{}, *Error) {
160 marketConfig, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
161 if err != nil {
162 return nil, NewInternalError(err)
163 }
164
165 report, err := GetWeekPortfolio(*marketConfig)
166 if ErrorIs(err, NotFound) {
167 return nil, err.(*Error)
168 }
169
170 if err != nil {
171 return nil, NewInternalError(err)
172 }
173
174 return report.Round(), nil
175}