Add create user rest endpoint
diff --git a/core/kg/app/app.go b/core/kg/app/app.go
index 0c65fc8..0d8b312 100644
--- a/core/kg/app/app.go
+++ b/core/kg/app/app.go
@@ -1,19 +1,22 @@
package app
import (
+ "github.com/giolekva/pcloud/core/kg/model"
"github.com/giolekva/pcloud/core/kg/store"
)
// App represents an application layer of the kg
type App struct {
store store.Store
+ config *model.Config
logger logger
}
// NewApp creates new app
-func NewApp(store store.Store, logger logger) *App {
+func NewApp(store store.Store, config *model.Config, logger logger) *App {
return &App{
store: store,
+ config: config,
logger: logger,
}
}
diff --git a/core/kg/app/user.go b/core/kg/app/user.go
index 07ff301..dd25e84 100644
--- a/core/kg/app/user.go
+++ b/core/kg/app/user.go
@@ -1,6 +1,7 @@
package app
import (
+ "github.com/giolekva/pcloud/core/kg/log"
"github.com/giolekva/pcloud/core/kg/model"
"github.com/pkg/errors"
)
@@ -13,3 +14,24 @@
}
return user, nil
}
+
+func (a *App) CreateUser(user *model.User) (*model.User, error) {
+ if !a.isFirstUserAccount() {
+ return nil, errors.New("not a first user")
+ }
+
+ user.HashPassword()
+ updatedUser, err := a.store.User().Save(user)
+ if err != nil {
+ return nil, errors.Wrap(err, "can't save user to the DB")
+ }
+ return updatedUser, nil
+}
+
+func (a *App) isFirstUserAccount() bool {
+ count, err := a.store.User().Count()
+ if err != nil {
+ a.logger.Error("error fetching first user account", log.Err(err))
+ }
+ return count > 0
+}