Upstream sync

This commit is contained in:
Senad Uka
2018-05-28 08:31:58 +02:00
parent 94229831e0
commit d8737a558b
13 changed files with 180 additions and 122 deletions

View File

@@ -217,7 +217,7 @@ func (s *organizationService) AddOrganization(organization viewmodel.Organizatio
address := entity.OrganizationAddress{ address := entity.OrganizationAddress{
InternalID: provider.MukID, InternalID: provider.MukID,
Name: "Main Address", Name: "Main Address",
Address: fmt.Sprintf("%s %s - %s, %s (%s)", provider.StreetName1, provider.StreetName2, provider.CityName, provider.State, provider.ZipCode), Address: fmt.Sprintf("%s %s - %s, %s (%s)", provider.StreetName1, provider.StreetName2, provider.CityName, provider.State, provider.ZipCode[:5]),
Latitude: lat, Latitude: lat,
Longitude: long, Longitude: long,
CreatedUser: enOrg.Author, CreatedUser: enOrg.Author,
@@ -248,5 +248,5 @@ func (s *organizationService) AddOrganization(organization viewmodel.Organizatio
return viewmodel.Organization{}, nil return viewmodel.Organization{}, nil
} }
return s.GetByUUID(enOrg.UUID, user) return s.mapEntity.Organization.ToOrganizationModel(enOrg), nil
} }

View File

@@ -1,6 +1,8 @@
package applicationservice package applicationservice
import ( import (
"fmt"
"bitbucket.org/nemt/nemt-portal-api/application/entitymapping" "bitbucket.org/nemt/nemt-portal-api/application/entitymapping"
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel" "bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
"bitbucket.org/nemt/nemt-portal-api/domain/service" "bitbucket.org/nemt/nemt-portal-api/domain/service"
@@ -27,6 +29,8 @@ func (s *visitService) Save(visit viewmodel.Visit) (viewmodel.Visit, error) {
if a.AddressType == "home" { if a.AddressType == "home" {
address, err := s.svc.Users.GetAddressByUUID(a.UUID) address, err := s.svc.Users.GetAddressByUUID(a.UUID)
if err != nil { if err != nil {
fmt.Println("Application Visit: Address UUID: ", a.UUID)
fmt.Println("Application Visit: Address Error: ", err.Error())
return viewmodel.Visit{}, err return viewmodel.Visit{}, err
} }
@@ -41,12 +45,15 @@ func (s *visitService) Save(visit viewmodel.Visit) (viewmodel.Visit, error) {
provider, err := s.svc.Provider.GetByUUID(entity.Provider.ProviderUUID, entity.CreatedUser) provider, err := s.svc.Provider.GetByUUID(entity.Provider.ProviderUUID, entity.CreatedUser)
if err != nil { if err != nil {
fmt.Println("Application Visit: Provider UUID: ", entity.Provider.ProviderUUID)
fmt.Println("Application Visit: Provider Error: ", err.Error())
return viewmodel.Visit{}, errors.Wrap(err) return viewmodel.Visit{}, errors.Wrap(err)
} }
entity.Provider = provider entity.Provider = provider
retVal, err := s.svc.Visits.Create(entity) retVal, err := s.svc.Visits.Create(entity)
if err != nil { if err != nil {
fmt.Println("Application Visit: Create Visit Error: ", err.Error())
return viewmodel.Visit{}, errors.Wrap(err) return viewmodel.Visit{}, errors.Wrap(err)
} }
@@ -80,17 +87,20 @@ func (s *visitService) GetByUUID(visitUUID string, user viewmodel.User) (viewmod
eUser := s.mapEntity.User.ToUserEntity(user) eUser := s.mapEntity.User.ToUserEntity(user)
retVal, err := s.svc.Visits.GetByUUID(visitUUID, eUser) retVal, err := s.svc.Visits.GetByUUID(visitUUID, eUser)
if err != nil { if err != nil {
fmt.Println("Visit Application: Error getting visit: ", err.Error())
return viewmodel.Visit{}, errors.Wrap(err) return viewmodel.Visit{}, errors.Wrap(err)
} }
visitUser, err := s.svc.Users.GetByUUID(retVal.User.UUID, "US") visitUser, err := s.svc.Users.GetByUUID(retVal.User.UUID, "US")
if err != nil { if err != nil {
fmt.Println("Visit Application: Error getting user: ", err.Error())
return viewmodel.Visit{}, errors.Wrap(err) return viewmodel.Visit{}, errors.Wrap(err)
} }
retVal.User = visitUser retVal.User = visitUser
provider, err := s.svc.Provider.GetByUUID(retVal.Provider.ProviderUUID, eUser) provider, err := s.svc.Provider.GetByUUID(retVal.Provider.ProviderUUID, eUser)
if err != nil { if err != nil {
fmt.Println("Visit Application: Error getting provider: ", err.Error())
return viewmodel.Visit{}, errors.Wrap(err) return viewmodel.Visit{}, errors.Wrap(err)
} }
retVal.Provider = provider retVal.Provider = provider

View File

@@ -80,8 +80,6 @@ func (s bxeService) Get271(eligibility viewmodel.Eligibility) (bcbsimodel.Interc
return bcbsimodel.Interchange271{}, err return bcbsimodel.Interchange271{}, err
} }
fmt.Println(resp)
if resp.QueryResult.HIPPA271.T271 != "" { if resp.QueryResult.HIPPA271.T271 != "" {
xmlString := html.UnescapeString(resp.QueryResult.HIPPA271.T271) xmlString := html.UnescapeString(resp.QueryResult.HIPPA271.T271)
xmlReader := strings.NewReader(xmlString) xmlReader := strings.NewReader(xmlString)

View File

@@ -262,6 +262,7 @@ func (s *lyftService) RequestRide(rideRequest viewmodel.RideRequest) (viewmodel.
if raw.Error != "" { if raw.Error != "" {
fmt.Println("Error to call Lyft: ", raw.Error+" - "+raw.ErrorDescription) fmt.Println("Error to call Lyft: ", raw.Error+" - "+raw.ErrorDescription)
fmt.Println("Full body error: ", string(body))
return viewmodel.RideRequest{}, errors.New("Lyft Error: " + raw.Error + " - " + raw.ErrorDescription) return viewmodel.RideRequest{}, errors.New("Lyft Error: " + raw.Error + " - " + raw.ErrorDescription)
} }

View File

@@ -12,22 +12,23 @@ type VisitStatus struct {
// Visit entity data // Visit entity data
type Visit struct { type Visit struct {
UUID string `json:"visit_uuid,omitempty"` UUID string `json:"visit_uuid,omitempty"`
Status VisitStatus `json:"visit_status,omitempty"` Status VisitStatus `json:"visit_status,omitempty"`
User User `json:"user,omitempty"` User User `json:"user,omitempty"`
VisitDatetime time.Time `json:"visit_datetime,omitempty"` VisitDatetime time.Time `json:"visit_datetime,omitempty"`
VisitDuration int64 `json:"visit_duration,omitempty"` VisitDuration int64 `json:"visit_duration,omitempty"`
PickupDatetime time.Time `json:"pickup_datetime,omitempty"` PickupDatetime time.Time `json:"pickup_datetime,omitempty"`
Notes *string `json:"notes,omitempty"` Notes *string `json:"notes,omitempty"`
PickupAddressID int64 `json:"pickup_address_id,omitempty"` PickupAddressID int64 `json:"pickup_address_id,omitempty"`
DestinationAddressID int64 `json:"destination_address_id,omitempty"` DestinationAddressID int64 `json:"destination_address_id,omitempty"`
Pickup Location `json:"pickup,omitempty"` Pickup Location `json:"pickup,omitempty"`
Provider ProviderResp `json:"provider,omitempty"` Provider ProviderResp `json:"provider,omitempty"`
CreatedUser User `json:"created_user,omitempty"` CreatedUser User `json:"created_user,omitempty"`
CreatedDate time.Time `json:"created,omitempty"` CreatedDate time.Time `json:"created,omitempty"`
UpdatedDate time.Time `json:"updated,omitempty"` UpdatedDate time.Time `json:"updated,omitempty"`
ReturnDate *time.Time `json:"return_date,omitempty"` ReturnDate *time.Time `json:"return_date,omitempty"`
TripType TripType `json:"trip_type,omitempty"` TripType TripType `json:"trip_type,omitempty"`
ExternalID string `json:"visit_external_id,omitempty"` ExternalID string `json:"visit_external_id,omitempty"`
Rides []Ride `json:"rides,omitempty"` Rides []Ride `json:"rides,omitempty"`
RawProvider ProviderResponse `json:"raw_provider,omitempty"`
} }

View File

@@ -24,6 +24,11 @@ func (c *organizationRepo) getProfileQuery(user entity.User) (query string, wher
if len(user.Profiles) > 0 { if len(user.Profiles) > 0 {
for _, p := range user.Profiles { for _, p := range user.Profiles {
switch p.Key { switch p.Key {
case "VIRPT":
switch p.Organization.Type.Key {
case "provider":
return
}
case "AD", "BCBSIAD", "BDCAD", "PLANAD": case "AD", "BCBSIAD", "BDCAD", "PLANAD":
switch p.Organization.Type.Key { switch p.Organization.Type.Key {
case "techsupport", "bcbsi", "bcbsa": case "techsupport", "bcbsi", "bcbsa":
@@ -44,7 +49,7 @@ func (c *organizationRepo) getProfileQuery(user entity.User) (query string, wher
where = fmt.Sprintf(` AND (a.organization_uuid = '%s' OR f.organization_uuid = '%s') `, p.Organization.UUID, p.Organization.UUID) where = fmt.Sprintf(` AND (a.organization_uuid = '%s' OR f.organization_uuid = '%s') `, p.Organization.UUID, p.Organization.UUID)
return return
} }
case "SP", "SPT", "VIRPT": case "SP", "SPT":
switch p.Organization.Type.Key { switch p.Organization.Type.Key {
case "techsupport", "bcbsi", "bcbsa": case "techsupport", "bcbsi", "bcbsa":
return return
@@ -341,7 +346,6 @@ func (c *organizationRepo) GetByUUID(organizationUUID string, user entity.User)
} }
query = c.getQuery() + query + " WHERE a.organization_uuid = ? " + where query = c.getQuery() + query + " WHERE a.organization_uuid = ? " + where
return c.parseEntity(c.conn.QueryRow(query, organizationUUID)) return c.parseEntity(c.conn.QueryRow(query, organizationUUID))
} }
@@ -446,13 +450,16 @@ func (c *organizationRepo) SetOrganizationAddress(address entity.OrganizationAdd
return entity.OrganizationAddress{}, errors.NewNotFoundError() return entity.OrganizationAddress{}, errors.NewNotFoundError()
} }
organization, err := c.GetByUUID(address.Organization.UUID, user) if address.Organization.ID == 0 {
if err != nil { organization, err := c.GetByUUID(address.Organization.UUID, user)
return entity.OrganizationAddress{}, err if err != nil {
return entity.OrganizationAddress{}, err
}
address.Organization = &organization
} }
UUID, _ := uuid.NewV4() UUID, _ := uuid.NewV4()
result, err := c.conn.Exec(query, UUID.String(), organization.ID, address.InternalID, address.Name, address.Address, address.Description, address.Latitude, address.Longitude, address.CreatedUser.ID, address.UpdatedUser.ID) result, err := c.conn.Exec(query, UUID.String(), address.Organization.ID, address.InternalID, address.Name, address.Address, address.Description, address.Latitude, address.Longitude, address.CreatedUser.ID, address.UpdatedUser.ID)
if err != nil { if err != nil {
return entity.OrganizationAddress{}, err return entity.OrganizationAddress{}, err
} }

View File

@@ -605,7 +605,7 @@ func (c *userRepo) createUser(user entity.User) (int64, string, error) {
func (c *userRepo) RemoveAddress(addressUUID string) error { func (c *userRepo) RemoveAddress(addressUUID string) error {
const ( const (
query = "DELETE FROM tab_address WHERE address_uuid = ?;" query = "UPDATE tab_address SET active = 0 WHERE address_uuid = ?;"
) )
_, err := c.conn.Exec(query, addressUUID) _, err := c.conn.Exec(query, addressUUID)

View File

@@ -190,12 +190,13 @@ func (c *visitRepo) Create(visit entity.Visit) (entity.Visit, error) {
row := c.conn.QueryRow(statusQuery, retVal.Status.Key, retVal.User.UUID, retVal.CreatedUser.UUID, retVal.TripType.Key) row := c.conn.QueryRow(statusQuery, retVal.Status.Key, retVal.User.UUID, retVal.CreatedUser.UUID, retVal.TripType.Key)
if err := row.Scan(&retVal.Status.ID, &retVal.Status.Key, &retVal.Status.Value, &retVal.User.ID, &retVal.User.Name, &retVal.CreatedUser.ID, &retVal.CreatedUser.Name, &retVal.TripType.ID, &retVal.TripType.Key, &retVal.TripType.Value); err != nil { if err := row.Scan(&retVal.Status.ID, &retVal.Status.Key, &retVal.Status.Value, &retVal.User.ID, &retVal.User.Name, &retVal.CreatedUser.ID, &retVal.CreatedUser.Name, &retVal.TripType.ID, &retVal.TripType.Key, &retVal.TripType.Value); err != nil {
fmt.Println("Error to get base data: ", err.Error()) fmt.Println("data.Visit: Error getting base data: ", err.Error())
return retVal, err return retVal, err
} }
results, err := c.conn.Exec(query, retVal.UUID, retVal.Status.ID, retVal.User.ID, retVal.VisitDatetime, retVal.PickupDatetime, retVal.Notes, retVal.CreatedUser.ID, toNullInt64(retVal.VisitDuration), retVal.ExternalID, returnDate, retVal.TripType.ID, retVal.Pickup.ID, retVal.PickupAddressID, retVal.DestinationAddressID, retVal.Provider.ProviderID) results, err := c.conn.Exec(query, retVal.UUID, retVal.Status.ID, retVal.User.ID, retVal.VisitDatetime, retVal.PickupDatetime, retVal.Notes, retVal.CreatedUser.ID, toNullInt64(retVal.VisitDuration), retVal.ExternalID, returnDate, retVal.TripType.ID, retVal.Pickup.ID, retVal.PickupAddressID, retVal.DestinationAddressID, retVal.Provider.ProviderID)
if err != nil { if err != nil {
fmt.Println("data.Visit: Error inserting visit: ", err.Error())
return retVal, err return retVal, err
} }

View File

@@ -2,6 +2,7 @@ package service
import ( import (
"errors" "errors"
"fmt"
"bitbucket.org/nemt/nemt-portal-api/domain/entity" "bitbucket.org/nemt/nemt-portal-api/domain/entity"
) )
@@ -61,11 +62,15 @@ func (s *providerService) GetByMukID(mukID string, user entity.User) (entity.Pro
func (s *providerService) GetByUUID(providerUUID string, user entity.User) (entity.Provider, error) { func (s *providerService) GetByUUID(providerUUID string, user entity.User) (entity.Provider, error) {
provider, err := s.svc.db.Provider().GetByUUID(providerUUID, user) provider, err := s.svc.db.Provider().GetByUUID(providerUUID, user)
if err != nil { if err != nil {
fmt.Println("providerService.GetByUUID: Provider UUID: ", providerUUID)
fmt.Println("providerService.GetByUUID: Provider Error: ", err.Error())
return provider, err return provider, err
} }
organization, err := s.svc.db.Organization().GetByTypeAndReferenceID("provider", provider.ProviderID, user) organization, err := s.svc.db.Organization().GetByTypeAndReferenceID("provider", provider.ProviderID, user)
if err != nil { if err != nil {
fmt.Println("providerService.GetByUUID: OrganizationByType ProviderID : ", provider.ProviderID)
fmt.Println("providerService.GetByUUID: OrganizationByType Error: ", err.Error())
return provider, err return provider, err
} }

View File

@@ -167,6 +167,8 @@ func (c *controller) handleEligibility(ctx echo.Context) error {
if user.PhoneNumber != nil && len(*user.PhoneNumber) == 10 && !strings.Contains(*user.PhoneNumber, "+1") { if user.PhoneNumber != nil && len(*user.PhoneNumber) == 10 && !strings.Contains(*user.PhoneNumber, "+1") {
phoneNumber := fmt.Sprintf("+1%s", *user.PhoneNumber) phoneNumber := fmt.Sprintf("+1%s", *user.PhoneNumber)
user.PhoneNumber = &phoneNumber user.PhoneNumber = &phoneNumber
} else {
return routeutils.ResponseAPIFieldValidationError(ctx, "phonenumber", "Phone number is required")
} }
user, err = c.svc.Users.Create(user, authUser) user, err = c.svc.Users.Create(user, authUser)
@@ -183,7 +185,10 @@ func (c *controller) handleEligibility(ctx echo.Context) error {
phoneNumber := fmt.Sprintf("+1%s", *eligibility.User.PhoneNumber) phoneNumber := fmt.Sprintf("+1%s", *eligibility.User.PhoneNumber)
eligibility.User.PhoneNumber = &phoneNumber eligibility.User.PhoneNumber = &phoneNumber
} }
user.PhoneNumber = eligibility.User.PhoneNumber
if len(*eligibility.User.PhoneNumber) > 0 {
user.PhoneNumber = eligibility.User.PhoneNumber
}
} }
err = c.svc.Users.UpdateLogin(user) err = c.svc.Users.UpdateLogin(user)

View File

@@ -10,7 +10,6 @@ import (
"bitbucket.org/nemt/nemt-portal-api/application/third/eligibility/bcbsi" "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/third/npd/npdmodel"
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel" "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/infra/config"
"bitbucket.org/nemt/nemt-portal-api/server/router/routeutils" "bitbucket.org/nemt/nemt-portal-api/server/router/routeutils"
"bitbucket.org/nemt/nemt-portal-api/server/validation" "bitbucket.org/nemt/nemt-portal-api/server/validation"
@@ -45,10 +44,11 @@ func (c *controller) handle(ctx echo.Context) error {
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
authUser, err := auth.GetUserDetail(ctx, c.cfg) authUser, err := c.svc.Users.GetByUUID("573c70ff-733d-11e7-ba8f-0a6ad3fcdeaa", "")
if err != nil { if err != nil {
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
if user.PhoneNumber == nil || len(*user.PhoneNumber) == 0 { if user.PhoneNumber == nil || len(*user.PhoneNumber) == 0 {
return routeutils.ResponseAPIValidationError(ctx, "phonenumber is required") return routeutils.ResponseAPIValidationError(ctx, "phonenumber is required")
} }

View File

@@ -93,26 +93,24 @@ func (c *controller) handleRide(ctx echo.Context) error {
ride.Visit.User.Type = &subscriber ride.Visit.User.Type = &subscriber
var provider viewmodel.ProviderResp var provider viewmodel.ProviderResp
if authUser.Profiles[0].Key == "VIRPT" { provider, err = c.svc.Provider.GetByUUID(ride.Visit.Provider.ProviderUUID, authUser)
provider, err = c.svc.Provider.GetByOrganization(authUser.Profiles[0].Organization.UUID, authUser)
} else {
provider, err = c.svc.Provider.GetByUUID(ride.Visit.Provider.ProviderUUID, authUser)
}
if err != nil { if err != nil {
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
visit.Provider = provider
eligibility := viewmodel.Eligibility{} eligibility := viewmodel.Eligibility{}
eligibility.Provider.ProviderNPI = provider.InternalID eligibility.Provider.ProviderNPI = provider.InternalID
eligibility.Provider.ProviderName = provider.OrganizatioName eligibility.Provider.ProviderName = provider.OrganizatioName
eligibility.TrackingID = "1234567" eligibility.TrackingID = c.rangeIn(1000000, 9999999)
eligibility.Subscriber.SubscriberID = *ride.Visit.User.Member eligibility.Subscriber.SubscriberID = *ride.Visit.User.Member
eligibility.Subscriber.PatientType = *ride.Visit.User.Type eligibility.Subscriber.PatientType = *ride.Visit.User.Type
eligibility.Subscriber.Name.First = ride.Visit.User.First eligibility.Subscriber.Name.First = ride.Visit.User.First
eligibility.Subscriber.Name.Last = ride.Visit.User.Last eligibility.Subscriber.Name.Last = ride.Visit.User.Last
eligibility.Subscriber.DemographicInfo.DateOfBirth = *ride.Visit.User.BirthDate eligibility.Subscriber.DemographicInfo.DateOfBirth = *ride.Visit.User.BirthDate
eligibility.Subscriber.DemographicInfo.Gender = *ride.Visit.User.Gender eligibility.Subscriber.DemographicInfo.Gender = *ride.Visit.User.Gender
eligibility.ServiceInfo.DateOfService = time.Now() loc, _ := time.LoadLocation("America/Chicago")
eligibility.ServiceInfo.DateOfService = time.Now().In(loc)
eligibility.ServiceInfo.ServiceTypeCodes = []string{"30"} eligibility.ServiceInfo.ServiceTypeCodes = []string{"30"}
resp271, err := c.bcbsi.BXE.Get271(eligibility) resp271, err := c.bcbsi.BXE.Get271(eligibility)
@@ -155,24 +153,26 @@ func (c *controller) handleRide(ctx echo.Context) error {
address.Longitude = result[0].Geometry.Location.Lng address.Longitude = result[0].Geometry.Location.Lng
} }
if len(user.Addresses) > 0 { if address.Latitude != 0 && address.Longitude != 0 {
for _, a := range user.Addresses { if len(user.Addresses) > 0 {
if a.AddressType == "home" { for _, a := range user.Addresses {
err := c.svc.Users.RemoveAddress(a.UUID) if a.AddressType == "home" {
if err != nil { err := c.svc.Users.RemoveAddress(a.UUID)
fmt.Println("Error to remove old address: ", err.Error()) if err != nil {
return routeutils.HandleAPIError(ctx, err) fmt.Println("Error to remove old address: ", err.Error())
return routeutils.HandleAPIError(ctx, err)
}
} }
} }
} }
}
address, err = c.svc.Users.SaveAddress(address) address, err = c.svc.Users.SaveAddress(address)
if err != nil { if err != nil {
fmt.Println("Error to save address: ", err.Error()) fmt.Println("Error to save address: ", err.Error())
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
}
user.Addresses = append(user.Addresses, address)
} }
user.Addresses = append(user.Addresses, address)
homeAddress := viewmodel.Address{} homeAddress := viewmodel.Address{}
for _, a := range visit.User.Addresses { for _, a := range visit.User.Addresses {
@@ -422,41 +422,64 @@ func (c *controller) handle(ctx echo.Context) error {
} }
var provider viewmodel.ProviderResp var provider viewmodel.ProviderResp
if authUser.Profiles[0].Key == "VIRPT" { provider, err = c.svc.Provider.GetByNPI(visit.RawProvider.FivePartKeyGroups[0].ProviderNum, authUser)
provider, err = c.svc.Provider.GetByOrganization(authUser.Profiles[0].Organization.UUID, authUser)
} else {
provider, err = c.svc.Provider.GetByUUID(visit.Provider.ProviderUUID, authUser)
}
if err != nil { if err != nil {
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
if provider.ProviderUUID == "" {
org := viewmodel.Organization{
Type: viewmodel.OrganizationType{
Key: "provider",
Name: "Provider",
},
Name: visit.RawProvider.OrgName,
Description: visit.RawProvider.OrgName,
Main: false,
Author: authUser,
LastEditor: authUser,
Reference: visit.RawProvider,
}
org, err = c.svc.Organization.AddOrganization(org, authUser)
if err != nil {
return routeutils.HandleAPIError(ctx, err)
}
provider, err = c.svc.Provider.GetByOrganization(org.UUID, authUser)
if err != nil {
return routeutils.HandleAPIError(ctx, err)
}
}
visit.Provider = provider
if validationErrors := validation.ValidateVisit(&visit, &authUser); len(validationErrors) > 0 { if validationErrors := validation.ValidateVisit(&visit, &authUser); len(validationErrors) > 0 {
return routeutils.ResponseAPICustomValidationError(ctx, "visit validation failed", validationErrors) return routeutils.ResponseAPICustomValidationError(ctx, "visit validation failed", validationErrors)
} }
eligibility := viewmodel.Eligibility{} // eligibility := viewmodel.Eligibility{}
eligibility.Provider.ProviderNPI = provider.InternalID // eligibility.Provider.ProviderNPI = provider.InternalID
eligibility.Provider.ProviderName = provider.OrganizatioName // eligibility.Provider.ProviderName = provider.OrganizatioName
eligibility.TrackingID = c.rangeIn(1000000, 9999999) // eligibility.TrackingID = c.rangeIn(1000000, 9999999)
eligibility.Subscriber.SubscriberID = *visit.User.Member // eligibility.Subscriber.SubscriberID = *visit.User.Member
eligibility.Subscriber.PatientType = *visit.User.Type // eligibility.Subscriber.PatientType = *visit.User.Type
eligibility.Subscriber.Name.First = visit.User.First // eligibility.Subscriber.Name.First = visit.User.First
eligibility.Subscriber.Name.Last = visit.User.Last // eligibility.Subscriber.Name.Last = visit.User.Last
eligibility.Subscriber.DemographicInfo.DateOfBirth = *visit.User.BirthDate // eligibility.Subscriber.DemographicInfo.DateOfBirth = *visit.User.BirthDate
eligibility.Subscriber.DemographicInfo.Gender = *visit.User.Gender // eligibility.Subscriber.DemographicInfo.Gender = *visit.User.Gender
eligibility.ServiceInfo.DateOfService = time.Now() // loc, _ := time.LoadLocation("America/Chicago")
eligibility.ServiceInfo.ServiceTypeCodes = []string{"30"} // eligibility.ServiceInfo.DateOfService = time.Now().In(loc)
// eligibility.ServiceInfo.ServiceTypeCodes = []string{"30"}
resp, err := c.bcbsi.BXE.Get271(eligibility) // resp, err := c.bcbsi.BXE.Get271(eligibility)
if err != nil { // if err != nil {
fmt.Println(err) // fmt.Println("Error to get eligibility: ", err.Error())
return routeutils.ResponseAPIValidationError(ctx, err.Error()) // return routeutils.ResponseAPIValidationError(ctx, err.Error())
} // }
user, err := c.svc.Users.GetByMemberID(*visit.User.Member) user, err := c.svc.Users.GetByMemberID(*visit.User.Member)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println("Error to get user by memberID: ", err.Error())
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
@@ -498,12 +521,14 @@ func (c *controller) handle(ctx echo.Context) error {
profile, err := c.svc.Profile.GetByKey("US") profile, err := c.svc.Profile.GetByKey("US")
if err != nil { if err != nil {
fmt.Println("Error to get Profile: ", err.Error())
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
user.Profiles = append(user.Profiles, profile) user.Profiles = append(user.Profiles, profile)
user, err = c.svc.Users.Create(user, authUser) user, err = c.svc.Users.Create(user, authUser)
if err != nil { if err != nil {
fmt.Println("Error to create the user: ", err.Error())
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
} else { } else {
@@ -521,62 +546,65 @@ func (c *controller) handle(ctx echo.Context) error {
err = c.svc.Users.UpdateLogin(user) err = c.svc.Users.UpdateLogin(user)
if err != nil { if err != nil {
fmt.Println("Error to update login: ", err.Error())
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }
} }
address := viewmodel.Address{} // address := viewmodel.Address{}
header := resp.Division.HealthCareEligibilityResponse.LoopHL0030[0].HL_0460[0].HL_0890[0].NM1_0920[0].N3_0950 // header := resp.Division.HealthCareEligibilityResponse.LoopHL0030[0].HL_0460[0].HL_0890[0].NM1_0920[0].N3_0950
body := resp.Division.HealthCareEligibilityResponse.LoopHL0030[0].HL_0460[0].HL_0890[0].NM1_0920[0].N4_0960 // body := resp.Division.HealthCareEligibilityResponse.LoopHL0030[0].HL_0460[0].HL_0890[0].NM1_0920[0].N4_0960
zipCode := strings.TrimSpace(body.N403) // zipCode := strings.TrimSpace(body.N403)
address.AddressTypeName = "Home" // address.AddressTypeName = "Home"
address.AddressType = "home" // address.AddressType = "home"
address.Name = fmt.Sprintf("%s, %s", header.N301, body.N401) // address.Name = fmt.Sprintf("%s, %s", header.N301, body.N401)
address.Address = fmt.Sprintf("%s, %s (%s)", header.N301, body.N401, zipCode) // address.Address = fmt.Sprintf("%s, %s (%s)", header.N301, body.N401, zipCode)
address.CreatedUserUUID = authUser.ID // address.CreatedUserUUID = authUser.ID
address.User = user // address.User = user
address.Type = "provider" // address.Type = "provider"
googleMapsAPI, err := maps.NewClient(maps.WithClientIDAndSignature("gme-bluecrossandblue1", "msqgD-jdqCyR0M_1u5C1HION5iI=")) // googleMapsAPI, err := maps.NewClient(maps.WithClientIDAndSignature("gme-bluecrossandblue1", "msqgD-jdqCyR0M_1u5C1HION5iI="))
if err != nil { // if err != nil {
fmt.Println("Error to instantiate googles api: ", err.Error()) // fmt.Println("Error to instantiate googles api: ", err.Error())
return routeutils.HandleAPIError(ctx, err) // return routeutils.HandleAPIError(ctx, err)
} // }
r := &maps.GeocodingRequest{ // r := &maps.GeocodingRequest{
Address: address.Address + " " + body.N402 + ", " + zipCode, // Address: address.Address + " " + body.N402 + ", " + zipCode,
} // }
result, err := googleMapsAPI.Geocode(context.Background(), r) // result, err := googleMapsAPI.Geocode(context.Background(), r)
if err != nil { // if err != nil {
fmt.Println("Error to instantiate googles api: ", err.Error()) // fmt.Println("Error to instantiate googles api: ", err.Error())
return routeutils.HandleAPIError(ctx, err) // return routeutils.HandleAPIError(ctx, err)
} // }
if len(result) > 0 { // if len(result) > 0 {
address.Latitude = result[0].Geometry.Location.Lat // address.Latitude = result[0].Geometry.Location.Lat
address.Longitude = result[0].Geometry.Location.Lng // address.Longitude = result[0].Geometry.Location.Lng
} // }
if len(user.Addresses) > 0 { // if address.Latitude != 0 && address.Longitude != 0 {
for _, a := range user.Addresses { // if len(user.Addresses) > 0 {
if a.AddressType == "home" { // for _, a := range user.Addresses {
err := c.svc.Users.RemoveAddress(a.UUID) // if a.AddressType == "home" {
if err != nil { // err := c.svc.Users.RemoveAddress(a.UUID)
fmt.Println("Error to remove old address: ", err.Error()) // if err != nil {
return routeutils.HandleAPIError(ctx, err) // fmt.Println("Error to remove old address: ", err.Error())
} // return routeutils.HandleAPIError(ctx, err)
} // }
} // }
} // }
// }
address, err = c.svc.Users.SaveAddress(address) // address, err = c.svc.Users.SaveAddress(address)
if err != nil { // if err != nil {
fmt.Println("Error to save address: ", err.Error()) // fmt.Println("Error saving address: ", err.Error())
return routeutils.HandleAPIError(ctx, err) // return routeutils.HandleAPIError(ctx, err)
} // }
user.Addresses = append(user.Addresses, address) // user.Addresses = append(user.Addresses, address)
// }
visit.TripType = viewmodel.TripType{ visit.TripType = viewmodel.TripType{
Key: "no_trip", Key: "no_trip",
@@ -588,6 +616,7 @@ func (c *controller) handle(ctx echo.Context) error {
visit, err = c.svc.Visits.Save(visit) visit, err = c.svc.Visits.Save(visit)
if err != nil { if err != nil {
fmt.Println("Error saving visit: ", err.Error())
return routeutils.HandleAPIError(ctx, err) return routeutils.HandleAPIError(ctx, err)
} }

View File

@@ -18,7 +18,8 @@ func authSkipper(ctx echo.Context) bool {
strings.Contains(path, "/v1/ext") || strings.Contains(path, "/v1/ext") ||
strings.Contains(path, "/v1/notification/ws") || strings.Contains(path, "/v1/notification/ws") ||
strings.HasPrefix(path, "/v1/lyfthook") || strings.HasPrefix(path, "/v1/lyfthook") ||
strings.HasPrefix(path, "/v1/docs")) strings.HasPrefix(path, "/v1/docs") ||
strings.HasPrefix(path, "/v1/selfregister"))
} }
// appSkipper is the default skipper for the application routes // appSkipper is the default skipper for the application routes