]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blame - api/market_config.go
poloniex balance draft
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / api / market_config.go
CommitLineData
7a9e5112 1package api
2
3import (
4 "fmt"
5
6c5c1403 6 "github.com/shopspring/decimal"
7a9e5112 7 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/db"
6c5c1403 8 "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/markets"
7a9e5112 9)
10
11type MarketConfigQuery struct {
12 In struct {
13 User db.User
14 Market string
15 }
16}
17
18func (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)}
21 }
22
23 return nil
24}
25
26func (q MarketConfigQuery) Run() (interface{}, *Error) {
27 config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
28 if err != nil {
29 return nil, NewInternalError(err)
30 }
31
32 if config == nil {
33 configMap := make(map[string]string)
34 configMap["key"] = ""
35 configMap["secret"] = ""
36
37 config, err = db.SetUserMarketConfig(q.In.User.Id, q.In.Market, configMap)
38 if err != nil {
39 return nil, NewInternalError(err)
40 }
41
42 }
43
44 return config.Config, nil
45}
46
6c5c1403
J
47type MarketBalanceQuery struct {
48 In struct {
49 User db.User
50 Market string
51 Currency string
52 }
53}
54
55var Poloniex *markets.Poloniex
56
57func init() {
58 Poloniex = markets.NewPoloniex()
59 Poloniex.StartTicker()
60}
61
62func (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)}
65 }
66
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)}
70 }
71
72 return nil
73}
74
75func (q MarketBalanceQuery) Run() (interface{}, *Error) {
76 config, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
77 if err != nil {
78 return nil, NewInternalError(err)
79 }
80
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)}
83 }
84
85 balance, err := Poloniex.GetBalance(config.Config["key"], config.Config["secret"], q.In.Currency)
86 if err != nil {
87 return nil, NewInternalError(err)
88 }
89
90 result := struct {
91 Balance decimal.Decimal `json:balance`
92 }{balance}
93
94 return &result, nil
95}
96
7a9e5112 97type UpdateMarketConfigQuery struct {
98 In struct {
99 User db.User
100 Market string
101 Key string
102 Secret string
103 }
104}
105
106func (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)}
109 }
110
111 return nil
112}
113
114func (q UpdateMarketConfigQuery) Run() (interface{}, *Error) {
115 configMap := make(map[string]string)
116 if q.In.Key != "" {
117 configMap["key"] = q.In.Key
118 }
119 if q.In.Secret != "" {
120 configMap["secret"] = q.In.Secret
121 }
122
123 _, err := db.SetUserMarketConfig(q.In.User.Id, q.In.Market, configMap)
124 if err != nil {
125 return nil, NewInternalError(err)
126 }
127
128 return nil, nil
129}