New API version with additional structures and params
[ric-plt/xapp-frame.git] / pkg / xapp / subscription.go
index 2090123..ffc34fb 100755 (executable)
@@ -31,7 +31,7 @@ import (
        "time"
 
        apiclient "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientapi"
-       apicontrol "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientapi/control"
+       apicommon "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientapi/common"
        apipolicy "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientapi/policy"
        apireport "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientapi/report"
        apimodel "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
@@ -39,14 +39,15 @@ import (
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi/operations"
-       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi/operations/control"
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi/operations/common"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi/operations/policy"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi/operations/query"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/restapi/operations/report"
 )
 
-type SubscriptionHandler func(models.SubscriptionType, interface{}) (models.SubscriptionResult, error)
+type SubscriptionHandler func(models.SubscriptionType, interface{}) (models.SubscriptionResponse, error)
 type SubscriptionQueryHandler func() (models.SubscriptionList, error)
+type SubscriptionDeleteHandler func(string) error
 
 type Subscriber struct {
        localAddr  string
@@ -77,7 +78,7 @@ func NewSubscriber(host string, timo int) *Subscriber {
 }
 
 // Server interface: listen and receive subscription requests
-func (r *Subscriber) Listen(subHandler SubscriptionHandler, queryHandler SubscriptionQueryHandler) error {
+func (r *Subscriber) Listen(add SubscriptionHandler, get SubscriptionQueryHandler, del SubscriptionDeleteHandler) error {
        swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
        if err != nil {
                return err
@@ -88,7 +89,7 @@ func (r *Subscriber) Listen(subHandler SubscriptionHandler, queryHandler Subscri
        // Subscription: query
        api.QueryGetAllSubscriptionsHandler = query.GetAllSubscriptionsHandlerFunc(
                func(p query.GetAllSubscriptionsParams) middleware.Responder {
-                       if resp, err := queryHandler(); err == nil {
+                       if resp, err := get(); err == nil {
                                return query.NewGetAllSubscriptionsOK().WithPayload(resp)
                        }
                        return query.NewGetAllSubscriptionsInternalServerError()
@@ -97,30 +98,30 @@ func (r *Subscriber) Listen(subHandler SubscriptionHandler, queryHandler Subscri
        // SubscriptionType: Report
        api.ReportSubscribeReportHandler = report.SubscribeReportHandlerFunc(
                func(p report.SubscribeReportParams) middleware.Responder {
-                       if resp, err := subHandler(models.SubscriptionTypeReport, p.ReportParams); err == nil {
+                       if resp, err := add(models.SubscriptionTypeReport, p.ReportParams); err == nil {
                                return report.NewSubscribeReportCreated().WithPayload(resp)
                        }
                        return report.NewSubscribeReportInternalServerError()
                })
 
-       // SubscriptionType: Control
-       api.ControlSubscribeControlHandler = control.SubscribeControlHandlerFunc(
-               func(p control.SubscribeControlParams) middleware.Responder {
-                       if resp, err := subHandler(models.SubscriptionTypeControl, p.ControlParams); err == nil {
-                               return control.NewSubscribeControlCreated().WithPayload(resp)
-                       }
-                       return control.NewSubscribeControlInternalServerError()
-               })
-
        // SubscriptionType: policy
        api.PolicySubscribePolicyHandler = policy.SubscribePolicyHandlerFunc(
                func(p policy.SubscribePolicyParams) middleware.Responder {
-                       if resp, err := subHandler(models.SubscriptionTypePolicy, p.PolicyParams); err == nil {
+                       if resp, err := add(models.SubscriptionTypePolicy, p.PolicyParams); err == nil {
                                return policy.NewSubscribePolicyCreated().WithPayload(resp)
                        }
                        return policy.NewSubscribePolicyInternalServerError()
                })
 
+       // SubscriptionType: delete
+       api.CommonUnsubscribeHandler = common.UnsubscribeHandlerFunc(
+               func(p common.UnsubscribeParams) middleware.Responder {
+                       if err := del(p.SubscriptionID); err == nil {
+                               return common.NewUnsubscribeNoContent()
+                       }
+                       return common.NewUnsubscribeInternalServerError()
+               })
+
        server := restapi.NewServer(api)
        defer server.Shutdown()
        server.Host = r.localAddr
@@ -134,38 +135,35 @@ func (r *Subscriber) Listen(subHandler SubscriptionHandler, queryHandler Subscri
 }
 
 // Subscription interface for xApp: REPORT
-func (r *Subscriber) SubscribeReport(p *apimodel.ReportParams) (apimodel.SubscriptionResult, error) {
+func (r *Subscriber) SubscribeReport(p *apimodel.ReportParams) (apimodel.SubscriptionResponse, error) {
        params := apireport.NewSubscribeReportParamsWithTimeout(r.timeout).WithReportParams(p)
        result, err := r.CreateTransport().Report.SubscribeReport(params)
        if err != nil {
-               return apimodel.SubscriptionResult{}, err
-       }
-
-       return result.Payload, err
-}
-
-// Subscription interface for xApp: CONTROL
-func (r *Subscriber) SubscribeControl(p *apimodel.ControlParams) (apimodel.SubscriptionResult, error) {
-       params := apicontrol.NewSubscribeControlParamsWithTimeout(r.timeout).WithControlParams(p)
-       result, err := r.CreateTransport().Control.SubscribeControl(params)
-       if err != nil {
-               return apimodel.SubscriptionResult{}, err
+               return apimodel.SubscriptionResponse{}, err
        }
 
        return result.Payload, err
 }
 
 // Subscription interface for xApp: POLICY
-func (r *Subscriber) SubscribePolicy(p *apimodel.PolicyParams) (apimodel.SubscriptionResult, error) {
+func (r *Subscriber) SubscribePolicy(p *apimodel.PolicyParams) (apimodel.SubscriptionResponse, error) {
        params := apipolicy.NewSubscribePolicyParamsWithTimeout(r.timeout).WithPolicyParams(p)
        result, err := r.CreateTransport().Policy.SubscribePolicy(params)
        if err != nil {
-               return apimodel.SubscriptionResult{}, err
+               return apimodel.SubscriptionResponse{}, err
        }
 
        return result.Payload, err
 }
 
+// Subscription interface for xApp: DELETE
+func (r *Subscriber) UnSubscribe(subId string) error {
+       params := apicommon.NewUnsubscribeParamsWithTimeout(r.timeout).WithSubscriptionID(subId)
+       _, err := r.CreateTransport().Common.Unsubscribe(params)
+
+       return err
+}
+
 // Subscription interface for xApp: QUERY
 func (r *Subscriber) QuerySubscriptions() (models.SubscriptionList, error) {
        resp, err := http.Get(fmt.Sprintf("http://%s/%s/subscriptions", r.remoteHost, r.remoteUrl))