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

Implement /registrations/{appInstanceId} DELETE method

parent bfdb5194
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -59,10 +59,14 @@ func TimingCurrentTimeGET(w http.ResponseWriter, r *http.Request) {
	timingCurrentTimeGET(w, r)
}

func RegisterMecAppPOST(w http.ResponseWriter, r *http.Request) {
	registerAppPost(w, r)
func AppRegistrationPOST(w http.ResponseWriter, r *http.Request) {
	appRegistrationPOST(w, r)
}

func AppRegistrationGET(w http.ResponseWriter, r *http.Request) {
	appRegistrationGET(w, r)
}

func AppRegistrationDELETE(w http.ResponseWriter, r *http.Request) {
	appRegistrationDELETE(w, r)
}
+41 −19
Original line number Diff line number Diff line
@@ -622,7 +622,7 @@ func timingCurrentTimeGET(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, string(jsonResponse))
}

func registerAppPost(w http.ResponseWriter, r *http.Request) {
func appRegistrationPOST(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	log.Info("applicationsRegistrationPOST")

@@ -668,18 +668,20 @@ func registerAppPost(w http.ResponseWriter, r *http.Request) {
		return
	}

	var jsonResponse []byte

	jsonResponse, err = setApplicationInfo(appInfo)
	if err != nil {
	// Set the application info in Redis
	keyName := baseKey + "appInfo:" + appInfo.AppInstanceId
	if err := rc.JSONSetEntry(keyName, ".", convertAppInfoToJson(&appInfo)); err != nil {
		log.Error("Unable to store new Registration in redis")
		errHandlerProblemDetails(w, "Unable to store new Registration in redis", http.StatusInternalServerError)
		return
	}

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

	// On successful registration, return 201 Created with the response body
	w.WriteHeader(http.StatusCreated)
	fmt.Fprint(w, string(jsonResponse))
	fmt.Fprint(w, jsonResponse)
}

func appRegistrationGET(w http.ResponseWriter, r *http.Request) {
@@ -690,7 +692,7 @@ func appRegistrationGET(w http.ResponseWriter, r *http.Request) {
	mutex.Lock()
	defer mutex.Unlock()

	keyName := baseKey + "Ins_Id:" + appInstanceId
	keyName := baseKey + "appInfo:" + appInstanceId
	jsonAppInfo, err := rc.JSONGetEntry(keyName, ".")

	if err != nil {
@@ -716,6 +718,36 @@ func appRegistrationGET(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, jsonResponse)
}

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

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)
	appInstanceId := vars["appInstanceId"]

	keyName := baseKey + "appInfo:" + appInstanceId

	// Find appInfo entry in redis DB
	_, err := rc.JSONGetEntry(keyName, ".")
	if err != nil {
		err = errors.New("appInfo not found against the provided appInstanceId")
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusNotFound)
		return
	}

	// Delete appInfo entry from redis DB
	err = rc.JSONDelEntry(keyName, ".")
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusNotFound)
		return
	}

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

func deleteAppInstance(appId string) {
	log.Info("Deleting App instance: ", appId)

@@ -809,7 +841,7 @@ func newAppInfo(app *apps.Application) (map[string]string, error) {
func setAppInfo(appInfo map[string]string) error {
	appId, found := appInfo[fieldAppId]
	if !found || appId == "" {
		return errors.New("Missing app instance id")
		return errors.New("missing app instance id")
	}

	// Convert value type to interface{} before storing app info
@@ -1119,21 +1151,11 @@ func getAppInfo(appId string) (map[string]string, error) {
	key := baseKeyAppEn + "app:" + appId + ":info"
	appInfo, err := rc.GetEntry(key)
	if err != nil || len(appInfo) == 0 {
		return nil, errors.New("App Instance not found")
		return nil, errors.New("app instance not found")
	}
	return appInfo, nil
}

func setApplicationInfo(appInfo AppInfo) ([]byte, error) {
	var jsonResponse []byte
	appInstanceId := appInfo.AppInstanceId
	keyName := baseKey + "appInfo:" + appInstanceId
	_ = rc.JSONSetEntry(keyName, ".", convertAppInfoToJson(&appInfo))
	jsonResponse, err := json.Marshal(appInfo)

	return jsonResponse, err
}

func errHandlerProblemDetails(w http.ResponseWriter, error string, code int) {
	var pd ProblemDetails
	pd.Detail = error
+10 −3
Original line number Diff line number Diff line
@@ -189,10 +189,10 @@ var routes = Routes{
	},

	Route{
		"RegisterMecAppPOST",
		strings.ToUpper("Post"),
		"AppRegistrationPOST",
		strings.ToUpper("POST"),
		"/mec_app_support/v2/registrations",
		appSupport.RegisterMecAppPOST,
		appSupport.AppRegistrationPOST,
	},

	Route{
@@ -202,6 +202,13 @@ var routes = Routes{
		appSupport.AppRegistrationGET,
	},

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

	Route{
		"Index",
		"GET",
+107 −0
Original line number Diff line number Diff line
@@ -535,6 +535,113 @@ func (a *MecAppSupportApiService) ApplicationsRegistrationGET(ctx context.Contex
	return localVarReturnValue, localVarHttpResponse, nil
}

/*
MecAppSupportApiService
The DELETE method is used to cancel the existing MEC application instance registration.
  - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
  - @param appInstanceId Represents a MEC application instance. Note that the appInstanceId is allocated by the MEC platform manager.
*/

func (a *MecAppSupportApiService) ApplicationsRegistrationDELETE(ctx context.Context, appInstanceId string) (*http.Response, error) {
	var (
		localVarHttpMethod = strings.ToUpper("Delete")
		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{}

	// 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
	}
	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.