Commit b9fdc3c9 authored by Mubeena Ishaq's avatar Mubeena Ishaq
Browse files

Implement /registrations/{appInstanceId} PUT method

parent d1e9bd51
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -67,6 +67,10 @@ func AppRegistrationGET(w http.ResponseWriter, r *http.Request) {
	appRegistrationGET(w, r)
}

func AppRegistrationPUT(w http.ResponseWriter, r *http.Request) {
	appRegistrationPUT(w, r)
}

func AppRegistrationDELETE(w http.ResponseWriter, r *http.Request) {
	appRegistrationDELETE(w, r)
}
+56 −1
Original line number Diff line number Diff line
@@ -718,6 +718,61 @@ func appRegistrationGET(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, jsonResponse)
}

func appRegistrationPUT(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	log.Info("Update appInfo by appInstanceId")
	vars := mux.Vars(r)
	appInstanceId := vars["appInstanceId"]

	var appInfoPut AppInfo

	// Read JSON input stream provided in the Request, and stores it in the buffer of a Decoder object
	decoder := json.NewDecoder(r.Body)
	// Decode function return strings containing the text provided in the request body
	err := decoder.Decode(&appInfoPut)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusBadRequest)
		return
	}

	jsonAppInfo, _ := rc.JSONGetEntry(baseKey+"appInfo:"+appInstanceId, ".")

	if jsonAppInfo == "" {
		log.Error("appInfo not found against the provided appInstanceId")
		errHandlerProblemDetails(w, "appInfo not found against the provided appInstanceId", http.StatusNotFound)
		return
	}

	if appInfoPut.AppInstanceId != "" {
		if appInstanceId != appInfoPut.AppInstanceId {
			log.Error("appInstnaceId provided in endpoint and in request body not matching")
			errHandlerProblemDetails(w, "appInstanceId provided in endpoint and in request body not matching", http.StatusNotFound)
			return
		}
	}

	if appInfoPut.AppName == "" {
		log.Error("Mandatory AppName parameter not present")
		errHandlerProblemDetails(w, "Mandatory AppName parameter not present", http.StatusBadRequest)
		return
	}

	appInfoPut.AppInstanceId = appInstanceId

	// Store appInfo key in redis
	err = rc.JSONSetEntry(baseKey+"appInfo:"+appInstanceId, ".", convertAppInfoToJson(&appInfoPut))
	if err != nil {
		log.Error("Failed to store AppInfo in the redis DB: ", err)
	}

	// Prepare & send response
	jsonResponse := convertAppInfoToJson(&appInfoPut)

	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, jsonResponse)
}

func appRegistrationDELETE(w http.ResponseWriter, r *http.Request) {
	log.Info("Delete appInfo by appInstanceId")

@@ -744,7 +799,7 @@ func appRegistrationDELETE(w http.ResponseWriter, r *http.Request) {
		return
	}

	// Send response on successful deletion of MTS session resource
	// Send response on successful deletion of registration
	w.WriteHeader(http.StatusNoContent)
}

+7 −0
Original line number Diff line number Diff line
@@ -202,6 +202,13 @@ var routes = Routes{
		appSupport.AppRegistrationGET,
	},

	Route{
		"AppRegistrationPUT",
		strings.ToUpper("PUT"),
		"/mec_app_support/v2/registrations/{appInstanceId}",
		appSupport.AppRegistrationPUT,
	},

	Route{
		"AppRegistrationDELETE",
		strings.ToUpper("DELETE"),
+109 −0
Original line number Diff line number Diff line
@@ -642,6 +642,115 @@ func (a *MecAppSupportApiService) ApplicationsRegistrationDELETE(ctx context.Con
	return localVarHttpResponse, nil
}

/*
MecAppSupportApiService
The PUT method may be used by the MEC application instance to update its registration to the MEC platform.
  - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
  - @param body Message content in the request contains the profile of the application, calling the MEC platform to update the existing MEC application instance registration.
  - @param appInstanceId Represents a MEC application instance. Note that the appInstanceId is allocated by the MEC platform manager.
*/
func (a *MecAppSupportApiService) ApplicationsRegistrationPUT(ctx context.Context, body AppInfo, appInstanceId string) (*http.Response, error) {
	var (
		localVarHttpMethod = strings.ToUpper("Put")
		localVarPostBody   interface{}
		localVarFileName   string
		localVarFileBytes  []byte
	)

	// create path and map variables
	localVarPath := a.client.cfg.BasePath + "/registrations/{appInstanceId}"
	localVarPath = strings.Replace(localVarPath, "{"+"appInstanceId"+"}", fmt.Sprintf("%v", appInstanceId), -1)

	localVarHeaderParams := make(map[string]string)
	localVarQueryParams := url.Values{}
	localVarFormParams := url.Values{}

	// to determine the Content-Type header
	localVarHttpContentTypes := []string{"application/json"}

	// set Content-Type header
	localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
	if localVarHttpContentType != "" {
		localVarHeaderParams["Content-Type"] = localVarHttpContentType
	}

	// to determine the Accept header
	localVarHttpHeaderAccepts := []string{"application/problem+json"}

	// set Accept header
	localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
	if localVarHttpHeaderAccept != "" {
		localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
	}
	// body params
	localVarPostBody = &body
	r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
	if err != nil {
		return nil, err
	}

	localVarHttpResponse, err := a.client.callAPI(r)
	if err != nil || localVarHttpResponse == nil {
		return localVarHttpResponse, err
	}

	localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
	localVarHttpResponse.Body.Close()
	if err != nil {
		return localVarHttpResponse, err
	}

	if localVarHttpResponse.StatusCode >= 300 {
		newErr := GenericSwaggerError{
			body:  localVarBody,
			error: localVarHttpResponse.Status,
		}
		if localVarHttpResponse.StatusCode == 400 {
			var v ProblemDetails
			err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarHttpResponse, newErr
			}
			newErr.model = v
			return localVarHttpResponse, newErr
		}
		if localVarHttpResponse.StatusCode == 401 {
			var v ProblemDetails
			err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarHttpResponse, newErr
			}
			newErr.model = v
			return localVarHttpResponse, newErr
		}
		if localVarHttpResponse.StatusCode == 403 {
			var v ProblemDetails
			err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarHttpResponse, newErr
			}
			newErr.model = v
			return localVarHttpResponse, newErr
		}
		if localVarHttpResponse.StatusCode == 404 {
			var v ProblemDetails
			err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarHttpResponse, newErr
			}
			newErr.model = v
			return localVarHttpResponse, newErr
		}
		return localVarHttpResponse, newErr
	}

	return localVarHttpResponse, nil
}

/*
MecAppSupportApiService
This method deletes a mecAppSuptApiSubscription. This method is typically used in \"Unsubscribing from service availability event notifications\" procedure.