Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Assumptions/Decisions

...

#

Issue

Notes/Jira

DecsionDecision

1There are 2 separate query objects defined in OpenAPI
Combine them into one 'Conditions' has the better structure but 'cmHandleQueryRestParameters' is a better  name
2Exact format of  'legacy' Conditions unclear and maybe not generic enoughStudy demo: https://wiki.onap.org/download/attachments/93000392/CPS644.mkv?version=1&modificationDate=1636566033000&api=v2
3Definition of 'Conditions' is not Generic enough

$ref: '#/components/schemas/ModuleNamesAsJsonArray

Should be something like '#/components/ConditionParametersNameValuePairs 


4Agree backward incompatibilityDiscuss with stakeholders


Implementation Proposal

...

Merge 2 'query' end points in one

#LayerProposed Changes
1REST Layer
  1. openapi.yaml
    1. change /v1/data/ch/searches to  /v1/ch/id-searches
  2. ncmp.yaml
    1. change queryCmHandles method to executeCmHandleIdSearch
    2. Use the CmHandleQueryRestParameters schema to both of them
  3. components.yaml
    1. merge Conditions schema to CmHandleQueryRestParameters schema
    2. delete Conditions schema
2Controller Layer
  1. NetworkCmProxyController
    1. Update controller methods to use the new schema
    2. Both component method call separated service method
    3. Rename queryCmHandles method to executeCmHandleIdSearch
3Service Layer
  1. NetworkCmProxyDataService
    1. Create new method for query cmHandles
    2. Keep queryCmHandles method and rename it to queryCmHandleIds
    3. Both method should be
called a same method in CpsAdminService
    1. calling separate methods in CpsDataService
    2. Validation logic should be moved to an separated method and call it from both method
CpsAdminService
  1. CpsDataService
    1. Update queryCmHandles method return type to Set<CmHandles>
    2. Use separate methods to CmHandlesId search to just return a collection of CmHandleIds (extract from DataNode Objects) 
  2. CpsAdminPersistenceService
    1. Update queryCmHandles
method return type to Set<CmHandles>
  • Use separate methods to CmHandlesId search
      1. will always return complet DataNode object(s). No updates can be done
    4Persistence Layer
    1. ModuleReferenceQuery
      1. Update queryCmHandles method return type to Set<CmHandles>
      2. Update queryCmHandles method to handle both filtering parameters
      3. Create to separete method for
    CmHandles and CmHandlesId searches

    Test

      1. CmHandlesId searches with new filtering parameters (use the original queryCmHandles method code)

    New Rest Request Input Format

    Assumed Current Request Format:
    See Issue #3, it need to be confirmed

    Code Block
     {  "conditions": [
        {
          "name": "hasAllModules",
          "conditionParameters": [ {"moduleName": "module1"} ,{ "moduleName": "module2" } }      
        }
      ]
    }


    Action 1: Rename query new top element name

    After 'Merge' it should also support (public Properties conditions like so

    Code Block
     {  "cmHandleQueryRestParameters": [
        {
          "name": "hasAllModules",
          "conditionParameters": [ {"moduleName": "module1"} ,{ "moduleName": "module2" } ]     
        }
      ]
    }


    Action 2: Support (public' Properties condition using the same format

    Code Block
     {  "cmHandleQueryRestParameters": [
        {
          "name": "hasAllProperties",
          "conditionParameters": [ {"Colour": "Green"} ,{ "Size": "Small" } ]
        }
      ]
    }

    Action 2:  Verify combinations of conditions are supported (AND is assumed)

    Code Block
     {  "cmHandleQueryRestParameters": [
        {
          "name": "hasAllProperties",
          "conditionParameters": [ {"Colour": "Green"} ,{ "Size": "Small" } ]
        },
        {
          "name": "hasAllModules",
          "conditionParameters": [ {"moduleName": "module1"} ,{ "moduleName": "module2" } }]     
        } 
      ]
    }

    Test

    • update existing tests to the new endpoint (groovy and CSIT)update existing test to the new endpoint
    • create new tests for new filtering scenarios (combine the two existing filter) in CSIT tests


    References

    ...