initial commit 2
This commit is contained in:
178
server/router/providerroute/controller.go
Normal file
178
server/router/providerroute/controller.go
Normal file
@@ -0,0 +1,178 @@
|
||||
package providerroute
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/third/npd"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/third/npd/npdmodel"
|
||||
"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"
|
||||
"github.com/labstack/echo"
|
||||
)
|
||||
|
||||
var (
|
||||
instance *controller
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
type controller struct {
|
||||
cfg *config.Config
|
||||
svc *applicationservice.Service
|
||||
npd *npd.Service
|
||||
}
|
||||
|
||||
func controllerInstance(cfg *config.Config, svc *applicationservice.Service) *controller {
|
||||
once.Do(func() {
|
||||
instance = &controller{
|
||||
cfg: cfg,
|
||||
svc: svc,
|
||||
npd: npd.New(cfg),
|
||||
}
|
||||
})
|
||||
return instance
|
||||
}
|
||||
|
||||
func (c *controller) handle(ctx echo.Context) error {
|
||||
var providers []npdmodel.ProviderResponse
|
||||
|
||||
if err := ctx.Bind(&providers); err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
authUser, err := auth.GetUserDetail(ctx, c.cfg)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
entities, err := c.svc.Provider.Save(providers, authUser)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, entities)
|
||||
}
|
||||
|
||||
func (c *controller) handleParticipating(ctx echo.Context) error {
|
||||
query := ctx.QueryParam("query")
|
||||
var lat float64
|
||||
var long float64
|
||||
var distance int64
|
||||
distance = 10
|
||||
planCode := ""
|
||||
productID := ""
|
||||
mukID := ""
|
||||
providerID := ""
|
||||
sort := "distance"
|
||||
|
||||
lat, err := routeutils.GetAndValidateFloatQueryParam(ctx, "lat", "latitude is mandatory")
|
||||
if err != nil {
|
||||
lat = 0
|
||||
}
|
||||
|
||||
long, err = routeutils.GetAndValidateFloatQueryParam(ctx, "long", "longitude is mandatory")
|
||||
if err != nil {
|
||||
long = 0
|
||||
}
|
||||
|
||||
planCode, _ = routeutils.GetAndValidateStringQueryParam(ctx, "plan_code", "Plan Code is mandatory")
|
||||
productID, _ = routeutils.GetAndValidateStringQueryParam(ctx, "product_id", "Product ID is mandatory")
|
||||
|
||||
providerID, _ = routeutils.GetAndValidateStringQueryParam(ctx, "provider_id", "Provider ID is mandatory")
|
||||
distance, err = routeutils.GetAndValidateIntQueryParam(ctx, "distance", "distance is mandatory")
|
||||
if err != nil {
|
||||
distance = 1000000
|
||||
}
|
||||
|
||||
sort, err = routeutils.GetAndValidateStringQueryParam(ctx, "sort", "sort is mandatory")
|
||||
if err != nil || (sort != "distance" && sort != "name") {
|
||||
sort = "distance"
|
||||
}
|
||||
|
||||
mukID, _ = routeutils.GetAndValidateStringQueryParam(ctx, "muk_id", "Muk ID is mandatory")
|
||||
|
||||
authUser, err := auth.GetUserDetail(ctx, c.cfg)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
// if (lat != 0 && long == 0) || (lat == 0 && long != 0) {
|
||||
// return routeutils.ResponseAPIFieldValidationError(ctx, "coordinates", "Invalid coordinates")
|
||||
// } else {
|
||||
// lat = 41.886406
|
||||
// long = -87.624225
|
||||
// }
|
||||
|
||||
lat = 40.442875
|
||||
long = -80.003112
|
||||
|
||||
if len(mukID) > 0 {
|
||||
query = ""
|
||||
providerID = ""
|
||||
}
|
||||
|
||||
providers, err := c.svc.Provider.Get(query, lat, long, distance, planCode, productID, mukID, providerID, sort, authUser)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, providers)
|
||||
}
|
||||
|
||||
func (c *controller) handleList(ctx echo.Context) error {
|
||||
name := ctx.QueryParam("name")
|
||||
searchBy := ctx.QueryParam("searchBy")
|
||||
|
||||
// lat, err := routeutils.GetAndValidateFloatQueryParam(ctx, "lat", "latitude is mandatory")
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
// long, err := routeutils.GetAndValidateFloatQueryParam(ctx, "long", "longitude is mandatory")
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
distance, err := routeutils.GetAndValidateIntQueryParam(ctx, "distance", "distance is mandatory")
|
||||
if err != nil {
|
||||
distance = 10
|
||||
}
|
||||
|
||||
limit, err := routeutils.GetAndValidateIntQueryParam(ctx, "limit", "limit is mandatory")
|
||||
if err != nil {
|
||||
limit = 50
|
||||
}
|
||||
|
||||
sortBy, err := routeutils.GetAndValidateStringQueryParam(ctx, "sortby", "limit is mandatory")
|
||||
if err != nil || (sortBy != "distance" && sortBy != "name") {
|
||||
sortBy = "distance"
|
||||
}
|
||||
|
||||
providerParams := npdmodel.ProviderSearchParams{
|
||||
Name: name,
|
||||
SearchBy: searchBy,
|
||||
Latitude: 40.442875,
|
||||
Longitude: -80.003112,
|
||||
Distance: distance,
|
||||
Limit: limit,
|
||||
Offset: 0,
|
||||
SortBy: sortBy,
|
||||
FacetAcceptNewPatients: "Y",
|
||||
FacetExtendedOfficeHours: "Y",
|
||||
FacetGender: "Y",
|
||||
FacetHospitalAffiliations: "Y",
|
||||
FacetLanguage: "Y",
|
||||
FacetOfficeLanguages: "Y",
|
||||
FacetProviderAffiliations: "Y",
|
||||
FacetProviderEntityName: "Y",
|
||||
FacetSummaryScore: "Y",
|
||||
}
|
||||
|
||||
providers, err := c.npd.Provider.GetProviders(providerParams)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, providers)
|
||||
}
|
||||
Reference in New Issue
Block a user