+
+type GetPortfolioQuery struct {
+ In struct {
+ User db.User
+ Market string
+ }
+}
+
+func (q GetPortfolioQuery) 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)}
+ }
+
+ return nil
+}
+
+func (q GetPortfolioQuery) Run() (interface{}, *Error) {
+ marketConfig, err := db.GetUserMarketConfig(q.In.User.Id, q.In.Market)
+ if err != nil {
+ return nil, NewInternalError(err)
+ }
+
+ report, err := GetWeekPortfolio(*marketConfig)
+ if ErrorIs(err, NotFound) {
+ return nil, err.(*Error)
+ }
+
+ if err != nil {
+ return nil, NewInternalError(err)
+ }
+
+ return report.Round(), nil
+}