104 lines
2.7 KiB
Go
104 lines
2.7 KiB
Go
package profileroute
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
|
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
|
"bitbucket.org/nemt/nemt-portal-api/domain"
|
|
"bitbucket.org/nemt/nemt-portal-api/infra/cache"
|
|
"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
|
|
}
|
|
|
|
func controllerInstance(cfg *config.Config, svc *applicationservice.Service) *controller {
|
|
once.Do(func() {
|
|
instance = &controller{
|
|
cfg: cfg,
|
|
svc: svc,
|
|
}
|
|
})
|
|
|
|
return instance
|
|
}
|
|
|
|
func (c *controller) handle(ctx echo.Context) error {
|
|
|
|
cache := cache.Instance(c.cfg)
|
|
cacheKey := ctx.Request().Method + ctx.Request().URL.EscapedPath() + ctx.Request().URL.RawQuery
|
|
resp := []viewmodel.Profile{}
|
|
err := cache.GetStruct(cacheKey, &resp)
|
|
if err != nil {
|
|
if err != domain.ErrCacheMiss {
|
|
ctx.Logger().Errorf(domain.LogProblemGettingFromCache, err)
|
|
}
|
|
resp, err = c.svc.Profile.GetVisibles(true)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
cache.SetStruct(cacheKey, resp)
|
|
}
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|
|
|
|
func (c *controller) handleKey(ctx echo.Context) error {
|
|
|
|
key, err := routeutils.GetAndValidateStringParam(ctx, "key", "Key is mandatory")
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
cache := cache.Instance(c.cfg)
|
|
cacheKey := ctx.Request().Method + ctx.Request().URL.EscapedPath() + ctx.Request().URL.RawQuery
|
|
resp := viewmodel.Profile{}
|
|
|
|
err = cache.GetStruct(cacheKey, &resp)
|
|
if err != nil {
|
|
if err != domain.ErrCacheMiss {
|
|
ctx.Logger().Errorf(domain.LogProblemGettingFromCache, err)
|
|
}
|
|
resp, err = c.svc.Profile.GetByKey(key)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
cache.SetStruct(cacheKey, resp)
|
|
}
|
|
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|
|
|
|
func (c *controller) handleOrg(ctx echo.Context) error {
|
|
orgType, err := routeutils.GetAndValidateStringParam(ctx, "org_key", "Org is mandatory")
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
cache := cache.Instance(c.cfg)
|
|
cacheKey := ctx.Request().Method + ctx.Request().URL.EscapedPath() + ctx.Request().URL.RawQuery
|
|
resp := []viewmodel.Profile{}
|
|
err = cache.GetStruct(cacheKey, &resp)
|
|
if err != nil {
|
|
if err != domain.ErrCacheMiss {
|
|
ctx.Logger().Errorf(domain.LogProblemGettingFromCache, err)
|
|
}
|
|
resp, err = c.svc.Profile.GetByOrganizationType(orgType)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
cache.SetStruct(cacheKey, resp)
|
|
}
|
|
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|