--- /dev/null
+package api
+
+import (
+ "fmt"
+
+ "immae.eu/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front/db"
+)
+
+type GetAllPortfoliosQuery struct {
+ In struct {
+ Market string
+ }
+ Out map[string]Portfolio
+}
+
+func (q GetAllPortfoliosQuery) 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 GetAllPortfoliosQuery) Run() (interface{}, *Error) {
+ u, err := db.GetActiveUsers()
+ if err != nil {
+ return nil, NewInternalError(err)
+ }
+
+ q.Out = make(map[string]Portfolio)
+
+ for _, marketConfig := range u {
+ report, err := GetWeekPortfolio(marketConfig)
+ if ErrorIs(err, NotFound) {
+ continue
+ }
+
+ if err != nil {
+ return nil, NewInternalError(err)
+ }
+
+ q.Out[marketConfig.User.Email] = report.Round()
+ }
+
+ return q.Out, nil
+}