Upstream sync
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
package selfregisterroute
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
b64 "encoding/base64"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/third/eligibility/bcbsi"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/third/npd/npdmodel"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/auth"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/config"
|
||||
"bitbucket.org/nemt/nemt-portal-api/server/router/routeutils"
|
||||
"bitbucket.org/nemt/nemt-portal-api/server/validation"
|
||||
"github.com/labstack/echo"
|
||||
)
|
||||
|
||||
@@ -33,6 +40,104 @@ func controllerInstance(svc *applicationservice.Service, cfg *config.Config) *co
|
||||
}
|
||||
|
||||
func (c *controller) handle(ctx echo.Context) error {
|
||||
var user viewmodel.User
|
||||
if err := ctx.Bind(&user); err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, "OK")
|
||||
authUser, err := auth.GetUserDetail(ctx, c.cfg)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
if user.PhoneNumber == nil || len(*user.PhoneNumber) == 0 {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "phonenumber is required")
|
||||
}
|
||||
|
||||
if user.Email == nil || len(*user.Email) == 0 {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "email is required")
|
||||
}
|
||||
|
||||
if len(user.Pass) == 0 {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "password is required")
|
||||
}
|
||||
|
||||
pass, err := b64.StdEncoding.DecodeString(user.Pass)
|
||||
if err != nil {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "Invalid password")
|
||||
}
|
||||
user.Pass = string(pass)
|
||||
|
||||
if passwordValidationErrors := validation.ValidatePassword(&user); len(passwordValidationErrors) > 0 {
|
||||
return routeutils.ResponseAPICustomValidationError(ctx, "Password not strong enough", passwordValidationErrors)
|
||||
}
|
||||
|
||||
if len(user.Name) == 0 && len(user.First) == 0 && len(user.Last) == 0 {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "name is required")
|
||||
}
|
||||
|
||||
if len(user.First) != 0 && len(user.Last) != 0 {
|
||||
user.Name = fmt.Sprintf("%s %s", user.First, user.Last)
|
||||
}
|
||||
|
||||
if len(user.Provider.InternalID) == 0 || len(user.Provider.InternalID) > 10 {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "Provider NPI is invalid")
|
||||
}
|
||||
|
||||
if len(user.Provider.OrganizatioName) == 0 {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "Provider Organization Name is invalid")
|
||||
}
|
||||
|
||||
provider, err := c.svc.Provider.GetByNPI(user.Provider.InternalID, authUser)
|
||||
if err != nil {
|
||||
fmt.Println("Error to create organization", err)
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
var organization viewmodel.Organization
|
||||
if provider.ProviderUUID == "" {
|
||||
org := viewmodel.Organization{
|
||||
Author: authUser,
|
||||
LastEditor: authUser,
|
||||
Name: user.Provider.OrganizatioName,
|
||||
Type: viewmodel.OrganizationType{
|
||||
Key: "provider",
|
||||
Name: "Provider",
|
||||
},
|
||||
Reference: npdmodel.ProviderResponse{
|
||||
OrgName: user.Provider.OrganizatioName,
|
||||
FivePartKeyGroups: []npdmodel.PartKeyGroup{
|
||||
npdmodel.PartKeyGroup{
|
||||
ProviderNum: user.Provider.InternalID,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
organization, err = c.svc.Organization.AddOrganization(org, authUser)
|
||||
if err != nil {
|
||||
fmt.Println("Error to create organization", err)
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
if organization.UUID == "" {
|
||||
return routeutils.ResponseAPIValidationError(ctx, "Error to create organization")
|
||||
}
|
||||
} else {
|
||||
organization = provider.Organization
|
||||
}
|
||||
|
||||
user.Organizations = []viewmodel.Organization{organization}
|
||||
user.Profiles = []viewmodel.Profile{viewmodel.Profile{
|
||||
Name: "Visit Reporter",
|
||||
Key: "VIRPT",
|
||||
Organization: organization,
|
||||
}}
|
||||
|
||||
user, err = c.svc.Users.Create(user, authUser)
|
||||
if err != nil {
|
||||
fmt.Println("Error to create user", err)
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, user)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user