Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed the Array_type_property_fix_in_attestation_flow #319

Closed
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package dev.sunbirdrc.registry.dao;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.jsonldjava.utils.Obj;
import dev.sunbirdrc.registry.exception.RecordNotFoundException;
import dev.sunbirdrc.registry.middleware.util.Constants;
import dev.sunbirdrc.registry.middleware.util.JSONUtil;
Expand Down Expand Up @@ -346,6 +348,12 @@ private ArrayNode expandChildObject(ObjectNode entityNode, List<String> processe
if (ovalue != null) {
resultArr.add(ovalue);
} else {
if (node.isObject()) {
Map<String, Object> deletedNodeRef = JSONUtil.convertJsonNodeToMap(node);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what are these 4 lines for? these looks similar to JsonNode refactorNode = JsonNodeFactory.instance.objectNode().put(uuidPropertyName, uuidPropertyValue);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the current logic :

step 1: we map all the uuids which are not deleted - uuidReferenceMap (uuid ---> referenceNode)
Note: ( this excludes the nodes which are deleted or status as false )
Step 2: we recursively traverse from the root node and keep expanding the children based on the depth.

While expanding the children we always have the reference node as an object in the form ---> {osid : value }. Weather you are trying to expand an array or object. The reference is always an objectNode (cause we are using an arrayNode table where we store the internal array mappings).

And when all the child nodes are deleted the logic returns the reference node itself while fetching. To avoid this we have to either return [null, null ] or [ {osid : deltedNode}, {osid, deletedNode}] to resolve this issue. The above four lines return the deleted referenceNode in the array.

deletedNodeRef.put(uuidPropertyName , osidVal);
JsonNode refactorNode = new ObjectMapper().convertValue(deletedNodeRef , JsonNode.class);
resultArr.add(refactorNode);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding the deleted object is not expected, we should we able to return empty array instead.

   ...
   "educations": [
        {
            "osid": "1-df55d012-cbfe-4548-ad1c-b7fc114d1161"
        }
    ],
    ...

Also it is returning unexpected response after attested

    ...
    "educations": [
        {
            "osid": "1-"
        }
    ],
    ...

logger.info("Field {} Array items not found in map", field);
}
}
Expand Down
Loading