Commit 55ab4470 authored by Ikram Haq's avatar Ikram Haq
Browse files

Update the zoneSubListGet function to get response W.R.T Standard

parent a08e257e
Loading
Loading
Loading
Loading
+31 −16
Original line number Diff line number Diff line
@@ -4090,12 +4090,10 @@ func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
	subscriptionType := queryParams.Get("subscription_type")
	zoneId := queryParams.Get("zoneId")

	var response InlineNotificationSubscriptionList
	var zonalSubList NotificationSubscriptionList
	zonalSubList.ResourceURL = &LinkType{
		Href: hostUrl.String() + basePath + "subscriptions/zones",
	}
	response.NotificationSubscriptionList = &zonalSubList
	var response []InlineNotificationSubscriptionList

	// Create a slice to hold subscriptions
	var subscriptions []Subscription

	var err error
	switch subscriptionType {
@@ -4105,17 +4103,17 @@ func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
		if zoneId != "" {
			keyName += ":" + zoneId
		}
		err = rc.ForEachJSONEntry(keyName, populateZonalTrafficList, &zonalSubList)
		err = rc.ForEachJSONEntry(keyName, populateZonalTrafficList, &subscriptions)
	case "status":
		keyName := baseKey + typeZoneStatusSubscription + "*"
		// If event parameter is provided, filter subscriptions by event
		if zoneId != "" {
			keyName += ":" + zoneId
		}
		err = rc.ForEachJSONEntry(keyName, populateZoneStatusList, &zonalSubList)
		err = rc.ForEachJSONEntry(keyName, populateZoneStatusList, &subscriptions)
	default:
		// If no subscription_type is provided, return both responses
		var userSubListZoneEvent NotificationSubscriptionList
		var userSubListZoneEvent []Subscription
		keyNameEventZone := baseKey + typeZonalSubscription + "*"
		// If event parameter is provided, filter subscriptions by event
		errEvent := rc.ForEachJSONEntry(keyNameEventZone, populateZonalTrafficList, &userSubListZoneEvent)
@@ -4125,7 +4123,7 @@ func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
			return
		}

		var userSubListStatus NotificationSubscriptionList
		var userSubListStatus []Subscription
		keyNameEventZone = baseKey + typeZoneStatusSubscription + "*"
		// If event parameter is provided, filter subscriptions by event
		errStatus := rc.ForEachJSONEntry(keyNameEventZone, populateZoneStatusList, &userSubListStatus)
@@ -4135,9 +4133,9 @@ func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
			return
		}

		// Merge both lists
		zonalSubList.ZoneLocationEventSubscription = append(zonalSubList.ZoneLocationEventSubscription, userSubListZoneEvent.ZoneLocationEventSubscription...)
		zonalSubList.ZoneStatusSubscription = append(zonalSubList.ZoneStatusSubscription, userSubListStatus.ZoneStatusSubscription...)
		// Append subscriptions from both lists
		subscriptions = append(subscriptions, userSubListZoneEvent...)
		subscriptions = append(subscriptions, userSubListStatus...)

		// No error since we're combining the lists
		err = nil
@@ -4149,6 +4147,17 @@ func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
		return
	}

	// Constructing the response
	response = append(response, InlineNotificationSubscriptionList{
		NotificationSubscriptionList: &NotificationSubscriptionList{
			Subscription: subscriptions,
			ResourceURL: &LinkType{
				Href: hostUrl.String() + basePath + "subscriptions/zones",
			},
		},
	})

	// Marshaling the response
	jsonResponse, err := json.Marshal(response)
	if err != nil {
		log.Error(err.Error())
@@ -4156,8 +4165,9 @@ func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
		return
	}

	// Writing the response
	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, string(jsonResponse))
	w.Write(jsonResponse)
}

// func zoneSubListGET(w http.ResponseWriter, r *http.Request) {
@@ -4385,7 +4395,7 @@ func handleZoneStatusSubscription(w http.ResponseWriter, requestBody []map[strin
					Href: hostUrl.String() + basePath + "subscriptions/zones/" + subsIdStr,
				},
			}
			// zoneStatusSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/zones/" + subsIdStr
			zoneStatusSub.SubscriptionType = "zoneStatusSubscription"
			_ = rc.JSONSetEntry(baseKey+typeZoneStatusSubscription+":"+subsIdStr, ".", convertZoneStatusSubscriptionToJson(&zoneStatusSub))
			registerZoneStatus(zoneStatusSub.ZoneId, zoneStatusSub.UpperNumberOfUsersZoneThreshold, zoneStatusSub.UpperNumberOfUsersAPThreshold,
				zoneStatusSub.OperationStatus, subsIdStr, zoneStatusSub.LowerNumberOfUsersZoneThreshold, zoneStatusSub.LowerNumberOfUsersAPThreshold)
@@ -4484,7 +4494,12 @@ func handleZoneLocationEventSubscription(w http.ResponseWriter, requestBody []ma
			newSubsId := nextZonalSubscriptionIdAvailable
			nextZonalSubscriptionIdAvailable += 2
			subsIdStr := strconv.Itoa(newSubsId)
			zonalSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/zones/" + subsIdStr
			zonalSub.Links = &Links{
				Self: &LinkType{
					Href: hostUrl.String() + basePath + "subscriptions/zones/" + subsIdStr,
				},
			}
			zonalSub.SubscriptionType = "zoneLocationEventSubscription"
			_ = rc.JSONSetEntry(baseKey+typeZonalSubscription+":"+subsIdStr, ".", convertZonalSubscriptionToJson1(&zonalSub))
			registerZonal1(zonalSub.ZoneId, zonalSub.LocationEventCriteria, subsIdStr)
			var response InlineZoneLocationEventSubscription
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
package server

type NotificationSubscriptionList struct {
	Subscription           []Subscription           `json:"subscription,omitempty"`
	ResourceURL            *LinkType                `json:"resourceURL"`
	ZoneStatusSubscription []ZoneStatusSubscription `json:"zoneStatusSubscription,omitempty"`

+16 −0
Original line number Diff line number Diff line
/*
 * ETSI GS MEC 013 - Location API
 *
 * The ETSI MEC ISG MEC013 Location API described using OpenAPI.
 *
 * API version: 3.1.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */
package server

type Subscription struct {
	// The URI referring to the subscription.
	Href string `json:"href"`
	// Type of the subscription. The string shall be set according to the \"subscriptionType\" attribute of the associated subscription data type defined in clauses 6.3.4, 6.3.5, 6.3.6, 6.3.7 6.3.8 and 6.3.9: \"UserLocationEventSubscription\" \"UserLocationPeriodicSubscription\" \"ZoneLocationEventSubscription\" \"ZoneStatusSubscription\" \"UserAreaSubscription\" \"UserDistanceSubscription\"
	SubscriptionType string `json:"subscriptionType"`
}
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ type ZoneLocationEventSubscription struct {
	WebsockNotifConfig *WebsockNotifConfig `json:"websockNotifConfig,omitempty"`
	// Identifier of zone (e.g. zone001) to monitor.
	ZoneId string `json:"zoneId"`
	Links  *Links `json:"_links,omitempty"`
	// Self referring URL
	ResourceURL string `json:"resourceURL,omitempty"`
}