Commit 11a1bcf8 authored by M. Hamza's avatar M. Hamza
Browse files

add example request bodies in swagger.yaml in meep-vis

parent e38b9b17
Loading
Loading
Loading
Loading
+32 −3
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ paths:
                subscription:
                  - _links:
                      self:
                        href: 'http://meAppServer.example.com/vis/v2/subscriptions/sub123'
                        href: 'http://meAppServer.example.com/vis/v2/subscriptions/123'
                    callbackReference: 'http://my.callback.com/vis-v2x-msg/some-id'
                    subscriptionType: V2xMsgSubscription
        '400':
@@ -274,6 +274,20 @@ paths:
                  - $ref: '#/components/schemas/ProvChgUuMbmsSubscription'
                  - $ref: '#/components/schemas/ProvChgPc5Subscription'
                  - $ref: '#/components/schemas/V2xMsgSubscription'
              example:
                subscriptionType: V2xMsgSubscription
                callbackReference: 'http://my.callback.com/vis-v2x-msg/some-id'
                _links:
                  self:
                    href: 'http://meAppServer.example.com/vis/v2/subscriptions/123'
                filterCriteria:
                  stdOrganization: 'ETSI'
                  msgType:
                    - 1
                    - 2
                expiryDeadline:
                  seconds: 1977836800
                  nanoseconds: 0
        '400':
          $ref: '#/components/responses/400'
        '401':
@@ -345,7 +359,7 @@ paths:
                callbackReference: 'http://my.callback.com/vis-v2x-msg/some-id'
                _links:
                  self:
                    href: 'http://meAppServer.example.com/vis/v2/subscriptions/sub123'
                    href: 'http://meAppServer.example.com/vis/v2/subscriptions/123'
                filterCriteria:
                  stdOrganization: 'ETSI'
                  msgType:
@@ -388,7 +402,7 @@ paths:
              callbackReference: 'http://my.callback.com/vis-v2x-msg/some-id'
              _links:
                self:
                  href: 'http://meAppServer.example.com/vis/v2/subscriptions/sub123'
                  href: 'http://meAppServer.example.com/vis/v2/subscriptions/123'
              filterCriteria:
                stdOrganization: 'ETSI'
                msgType:
@@ -408,6 +422,21 @@ paths:
                  - $ref: '#/components/schemas/ProvChgUuMbmsSubscription'
                  - $ref: '#/components/schemas/ProvChgPc5Subscription'
                  - $ref: '#/components/schemas/V2xMsgSubscription'
              example:
                example:
                  subscriptionType: V2xMsgSubscription
                  callbackReference: 'http://my.callback.com/vis-v2x-msg/some-id'
                  _links:
                    self:
                      href: 'http://meAppServer.example.com/vis/v2/subscriptions/123'
                  filterCriteria:
                    stdOrganization: 'ETSI'
                    msgType:
                      - 1
                      - 2
                  expiryDeadline:
                    seconds: 1977836800
                    nanoseconds: 0
        '400':
          $ref: '#/components/responses/400'
        '401':
+1 −1
Original line number Diff line number Diff line
@@ -28,5 +28,5 @@ type SubscriptionLinkListLinksSubscriptions struct {
	// The URI referring to the subscription.
	Href string `json:"href"`
	// Type of the subscription. The values are as defined in the \"subscriptionType\" attribute for each different V2X information event subscription data type.
	SubscriptionType *SubscriptionType `json:"subscriptionType"`
	SubscriptionType string `json:"subscriptionType,omitempty"`
}
+61 −48
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ const PROV_CHG_UU_MBMS = "ProvChgUuMbmsSubscription"
const PROV_CHG_PC5 = "ProvChgPc5Subscription"

var v2xMsgSubscriptionMap = map[int]*V2xMsgSubscription{}
var provChgUuUniSubscriptionMap = map[int]*ProvChgUuUniSubscription{}
var subscriptionExpiryMap = map[int][]int{}
var mutex sync.Mutex
var expiryTicker *time.Ticker
@@ -1010,6 +1011,9 @@ func subscriptionsPost(w http.ResponseWriter, r *http.Request) {

		jsonResponse = convertV2xMsgSubscriptionToJson(&v2xSubscription)

	case PROV_CHG_UU_UNI:
		//TODO

	default:
		log.Error("Unsupported subscriptionType")
		return
@@ -1019,88 +1023,97 @@ func subscriptionsPost(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, jsonResponse)
}

func createSubscriptionLinkList(subType string) *SubscriptionLinkList {

	subscriptionLinkList := new(SubscriptionLinkList)

	link := new(SubscriptionLinkListLinks)
	self := new(LinkType)
	self.Href = hostUrl.String() + basePath + "subscriptions"

	link.Self = self
	subscriptionLinkList.Links = link

	//loop through all different types of subscription

	mutex.Lock()
	defer mutex.Unlock()

	//loop through v2x_msg map
	if subType == "" || subType == "v2x_msg" {
		for _, v2xMsgSubscription := range v2xMsgSubscriptionMap {
			if v2xMsgSubscription != nil {
				var subscription SubscriptionLinkListLinksSubscriptions
				subscription.Href = v2xMsgSubscription.Links.Self.Href
				subscription.SubscriptionType = V2X_MSG
				subscriptionLinkList.Links.Subscriptions = append(subscriptionLinkList.Links.Subscriptions, subscription)
			}
		}
	}

	//loop through prov_chg_uu_uni map
	if subType == "" || subType == "prov_chg_uu_uni" {
		for _, provChgUuUniSubscription := range provChgUuUniSubscriptionMap {
			if provChgUuUniSubscription != nil {
				var subscription SubscriptionLinkListLinksSubscriptions
				subscription.Href = provChgUuUniSubscription.Links.Self.Href
				subscription.SubscriptionType = PROV_CHG_UU_UNI
				subscriptionLinkList.Links.Subscriptions = append(subscriptionLinkList.Links.Subscriptions, subscription)
			}
		}
	}

	//no other maps to go through

	return subscriptionLinkList
}

func subGET(w http.ResponseWriter, r *http.Request) {
	log.Info("subGet")

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

	// Validate query params
	u, _ := url.Parse(r.URL.String())
	log.Info("url: ", u.RequestURI())
	q := u.Query()
	validQueryParams := []string{"subscription_type"}
	validQueryParams := []string{"subscriptionType"}
	if !validateQueryParams(q, validQueryParams) {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	// Get & validate query param values
	subType := q.Get("subscription_type")
	subType := q.Get("subscriptionType")
	if !validateQueryParamValue(subType, []string{"", "prov_chg_uu_uni", "prov_chg_uu_mbms", "prov_chg_pc5", "v2x_msg"}) {
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	// Create subscription link list
	subscriptionLinkList := &SubscriptionLinkList{
		Links: &SubscriptionLinkListLinks{
			Self: &LinkType{
				Href: hostUrl.String() + basePath + "subscriptions",
			},
		},
	}

	var subscriptionLinkListLinks SubscriptionLinkListLinks
	response := createSubscriptionLinkList(subType)

	// Find subscriptions by type
	subscription_type := ""
	subscriptionType := ""
	if subType != "" {
		if subType == "prov_chg_uu_uni" {
			subscription_type = PROV_CHG_UU_UNI
			subscriptionType = PROV_CHG_UU_UNI
		} else if subType == "prov_chg_uu_mbms" {
			subscription_type = PROV_CHG_UU_MBMS
			subscriptionType = PROV_CHG_UU_MBMS
		} else if subType == "prov_chg_pc5" {
			subscription_type = PROV_CHG_PC5
			subscriptionType = PROV_CHG_PC5
		} else if subType == "v2x_msg" {
			subscription_type = V2X_MSG
			subscriptionType = V2X_MSG
		}
	}
	subList, err := subMgr.GetFilteredSubscriptions("", subscription_type)
	subList, err := subMgr.GetFilteredSubscriptions("", subscriptionType)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	// Prepare response
	for _, sub := range subList {
		// Add reference to link list
		var linkListSub SubscriptionLinkListLinksSubscriptions

		// Add type-specific link
		var subscriptionType SubscriptionType
		if sub.Cfg.Type == PROV_CHG_UU_UNI {
			subscriptionType = PROV_CHG_UU_UNI_SubscriptionType
			subOrig := convertJsonToUuUniSubscription(sub.JsonSubOrig)
			linkListSub.Href = subOrig.Links.Self.Href
		} else if sub.Cfg.Type == PROV_CHG_UU_MBMS {
			subscriptionType = PROV_CHG_UU_MBMS_SubscriptionType
			fmt.Print("Not supported")
		} else if sub.Cfg.Type == PROV_CHG_PC5 {
			subscriptionType = PROV_CHG_PC5_SubscriptionType
			fmt.Print("Not supported")
		} else if sub.Cfg.Type == V2X_MSG {
			subscriptionType = V2X_MSG_SubscriptionType
			subOrig := convertJsonToV2xMsgSubscription(sub.JsonSubOrig)
			linkListSub.Href = subOrig.Links.Self.Href
		}
		linkListSub.SubscriptionType = &subscriptionType

		// Add to link list
		subscriptionLinkListLinks.Subscriptions = append(subscriptionLinkListLinks.Subscriptions, linkListSub)
	}
	subscriptionLinkList.Links = &subscriptionLinkListLinks

	// Send response
	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, convertSubscriptionLinkListToJson(subscriptionLinkList))
	fmt.Fprint(w, string(jsonResponse))
}

func individualSubscriptionGET(w http.ResponseWriter, r *http.Request) {