Delete Policy Type Api
[ric-plt/a1.git] / a1-go / pkg / resthooks / resthooks.go
index 45c3928..8d30b3d 100644 (file)
@@ -30,6 +30,7 @@ import (
 
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/a1"
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/models"
+       "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/rmr"
        "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
        "github.com/santhosh-tekuri/jsonschema/v5"
        "gopkg.in/yaml.v2"
@@ -49,6 +50,11 @@ var typeMismatchError = errors.New("Policytype Mismatch")
 var invalidJsonSchema = errors.New("Invalid Json ")
 var policyInstanceNotFoundError = errors.New("Policy Instance Not Found")
 var policyTypeNotFoundError = errors.New("Policy Type Not Found")
+var policyTypeCanNotBeDeletedError = errors.New("tried to delete a type that isn't empty")
+
+func (rh *Resthook) CanPolicyTypeBeDeleted(err error) bool {
+       return err == policyTypeCanNotBeDeletedError
+}
 
 func (rh *Resthook) IsPolicyTypePresent(err error) bool {
        return err == policyTypeNotFoundError
@@ -72,12 +78,13 @@ func (rh *Resthook) IsValidJson(err error) bool {
        return err == invalidJsonSchema
 }
 func NewResthook() *Resthook {
-       return createResthook(sdlgo.NewSyncStorage())
+       return createResthook(sdlgo.NewSyncStorage(), rmr.NewRMRSender())
 }
 
-func createResthook(sdlInst iSdl) *Resthook {
+func createResthook(sdlInst iSdl, rmrSenderInst rmr.IRmrSender) *Resthook {
        return &Resthook{
-               db: sdlInst,
+               db:             sdlInst,
+               iRmrSenderInst: rmrSenderInst,
        }
 }
 
@@ -363,6 +370,13 @@ func (rh *Resthook) CreatePolicyInstance(policyTypeId models.PolicyTypeID, polic
                if iscreated {
                        a1.Logger.Debug("policy instance metadata created")
                }
+               isSent := rh.iRmrSenderInst.RmrSendToXapp(httpBodyString)
+               if isSent {
+                       a1.Logger.Debug("rmrSendToXapp : message sent")
+               } else {
+                       a1.Logger.Debug("rmrSendToXapp : message not sent")
+               }
+
        } else {
                a1.Logger.Error("%+v", invalidJsonSchema)
                return invalidJsonSchema
@@ -445,3 +459,28 @@ func (rh *Resthook) GetAllPolicyInstance(policyTypeId models.PolicyTypeID) ([]mo
        a1.Logger.Debug("return : %+v", policyTypeInstances)
        return policyTypeInstances, nil
 }
+
+func (rh *Resthook) DeletePolicyType(policyTypeId models.PolicyTypeID) error {
+       a1.Logger.Debug("DeletePolicyType")
+
+       policyinstances, err := rh.GetAllPolicyInstance(policyTypeId)
+       if err != nil {
+               a1.Logger.Error("error in retrieving policy. err: %v", err)
+               return err
+       }
+
+       var keys [1]string
+       key := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
+       keys[0] = key
+       if len(policyinstances) == 0 {
+               err := rh.db.Remove(a1MediatorNs, keys[:])
+               if err != nil {
+                       a1.Logger.Error("error in deleting policy type err: %v", err)
+                       return err
+               }
+       } else {
+               a1.Logger.Error("tried to delete a type that isn't empty")
+               return policyTypeCanNotBeDeletedError
+       }
+       return nil
+}