func HandleRequest()

in iot-onboarding-service/src/main/main.go [56:112]


func HandleRequest(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
	log.Printf("[ONBOARDING] Received Request %+v with context %+v", req, ctx)
	//0-Adding content to dynamoDB client to be able to use Xray Training
	onboardingDB.AddContext(ctx)
	//1-Identifying use case from HTTP Method and path
	useCase := identifyUseCase(req.Resource, req.HTTPMethod)
	var err error
	var res model.Response
	//2-Validating request and creating request wrapper
	onboardingRequest, err := createOnBoardingRequest(req)
	if err != nil {
		log.Printf("[ONBOARDING] Use Case %s failed with error: %v", useCase, err)
		return builResponseError(err), nil
	}
	//3-Get IOT Data-ATS Enpoint for the account
	mqttEndpoint, err2 := iotCore.GetEndpoint()
	if err2 != nil {
		log.Printf("[ONBOARDING] Use Case %s failed while retreiving MQTT Endpoint with error: %v", useCase, err)
		return builResponseError(err2), nil
	}
	//3-Selecting apropriate use case
	if useCase == FN_RETRIEVE_ONBOARDED_DEVICE {
		log.Printf("[ONBOARDING]Selected Use Case %v", useCase)
		if err == nil {
			res, err = usecase.Retrieve(onboardingRequest, onboardingDB, mqttEndpoint)
			if err == nil {
				log.Printf("[ONBOARDING] Use Case %s successult with response: %v", useCase, res)
				return builResponse(res), nil
			}
		}
		return builResponseError(err), nil
	} else if useCase == FN_ONBOARD_DEVICE {
		log.Printf("[ONBOARDING] Selected Use Case %v", useCase)
		if err == nil {
			res, err = usecase.Create(onboardingRequest, onboardingDB, iotCore, mqttEndpoint)
			if err == nil {
				log.Printf("[ONBOARDING] Use Case %s successult with response: %v", useCase, res)
				return builResponse(res), nil
			}
		}
		return builResponseError(err), nil
	} else if useCase == FN_DELETE_ONBOARDED_DEVICE {
		log.Printf("[ONBOARDING] Selected Use Case %v", useCase)
		if err == nil {
			res, err = usecase.Delete(onboardingRequest, onboardingDB, iotCore)
			if err == nil {
				log.Printf("[ONBOARDING] Use Case %s successult with response: %v", useCase, res)
				return builResponse(res), nil
			}
		}
		return builResponseError(err), nil
	}
	//4-if no use case found, return an error
	log.Printf("No Use Case Found for %v", req.HTTPMethod+" "+req.Resource)
	err = errors.New("No Use Case Found for " + req.HTTPMethod + " " + req.Resource)
	return builResponseError(err), nil
}