]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blobdiff - api/admin.go
Admin minimal dashboard.
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / api / admin.go
diff --git a/api/admin.go b/api/admin.go
new file mode 100644 (file)
index 0000000..0ac6050
--- /dev/null
@@ -0,0 +1,46 @@
+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
+}