116 lines
3.2 KiB
Go
116 lines
3.2 KiB
Go
package visitroute
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
|
|
"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/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"
|
|
)
|
|
|
|
var (
|
|
instance *controller
|
|
once sync.Once
|
|
)
|
|
|
|
type controller struct {
|
|
svc *applicationservice.Service
|
|
cfg *config.Config
|
|
bcbsi *bcbsi.Service
|
|
}
|
|
|
|
func controllerInstance(svc *applicationservice.Service, cfg *config.Config) *controller {
|
|
once.Do(func() {
|
|
instance = &controller{
|
|
svc: svc,
|
|
cfg: cfg,
|
|
bcbsi: bcbsi.New(cfg),
|
|
}
|
|
})
|
|
return instance
|
|
}
|
|
|
|
func (c *controller) handle(ctx echo.Context) error {
|
|
var visit viewmodel.Visit
|
|
if err := ctx.Bind(&visit); err != nil {
|
|
fmt.Println(err)
|
|
return routeutils.ResponseAPIValidationError(ctx, "invalid parameters")
|
|
}
|
|
|
|
user, err := auth.GetUserDetail(ctx, c.cfg)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
provider, err := c.svc.Provider.GetByUUID(visit.Provider.ProviderUUID, user)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return routeutils.ResponseAPIValidationError(ctx, "invalid provider")
|
|
}
|
|
|
|
if validationErrors := validation.ValidateVisit(&visit, &user); len(validationErrors) > 0 {
|
|
return routeutils.ResponseAPICustomValidationError(ctx, "visit validation failed", validationErrors)
|
|
}
|
|
|
|
eligibility := viewmodel.Eligibility{}
|
|
eligibility.Provider.ProviderNPI = provider.InternalID
|
|
eligibility.Provider.ProviderName = provider.Name
|
|
eligibility.TrackingID = *visit.User.Member
|
|
eligibility.Subscriber.SubscriberID = *visit.User.Member
|
|
eligibility.Subscriber.PatientType = *visit.User.Type
|
|
eligibility.Subscriber.Name.First = visit.User.First
|
|
eligibility.Subscriber.Name.Last = visit.User.Last
|
|
eligibility.Subscriber.DemographicInfo.DateOfBirth = *visit.User.BirthDate
|
|
eligibility.Subscriber.DemographicInfo.Gender = *visit.User.Gender
|
|
eligibility.ServiceInfo.DateOfService = time.Now()
|
|
eligibility.ServiceInfo.ServiceTypeCodes = []string{"30"}
|
|
|
|
resp, err := c.bcbsi.BXE.Get271(eligibility)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return routeutils.ResponseAPIValidationError(ctx, err.Error())
|
|
}
|
|
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|
|
|
|
func (c *controller) handleGetByID(ctx echo.Context) error {
|
|
visit_uuid := ctx.Param("visit_uuid")
|
|
if visit_uuid == "" {
|
|
return routeutils.ResponseAPIValidationError(ctx, "visit_uuid param is mandatory")
|
|
}
|
|
|
|
user, err := auth.GetUserDetail(ctx, c.cfg)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
resp, err := c.svc.Visits.GetByUUID(visit_uuid, user)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|
|
|
|
func (c *controller) handleGetAll(ctx echo.Context) error {
|
|
user, err := auth.GetUserDetail(ctx, c.cfg)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
resp, err := c.svc.Visits.GetAll(user)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|