From 0dfa03d87e6889316b285c62a3abf8e2d12c5ae3 Mon Sep 17 00:00:00 2001 From: arvindyadav108 Date: Wed, 25 Oct 2017 15:40:52 +0530 Subject: [PATCH] Issue # SB-303 Developement : Skill tag endorsement. --- .../actors/skill/SkillmanagementActor.java | 133 ++++++++++-------- .../skill/SkillmanagementActorTest.java | 14 +- 2 files changed, 84 insertions(+), 63 deletions(-) diff --git a/actors/src/main/java/org/sunbird/learner/actors/skill/SkillmanagementActor.java b/actors/src/main/java/org/sunbird/learner/actors/skill/SkillmanagementActor.java index 7cf51ee2a..8b72bb069 100644 --- a/actors/src/main/java/org/sunbird/learner/actors/skill/SkillmanagementActor.java +++ b/actors/src/main/java/org/sunbird/learner/actors/skill/SkillmanagementActor.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArraySet; import org.sunbird.cassandra.CassandraOperation; import org.sunbird.common.ElasticSearchUtil; import org.sunbird.common.exception.ProjectCommonException; @@ -136,7 +137,8 @@ private void endorseSkill(Request actorMessage) { ProjectLogger.log("SkillmanagementActor-endorseSkill called"); String endoresedUserId = (String) actorMessage.getRequest().get(JsonKey.ENDORSED_USER_ID); - String skillName = (String) actorMessage.getRequest().get(JsonKey.SKILL_NAME); + List list = (List) actorMessage.getRequest().get(JsonKey.SKILL_NAME); + CopyOnWriteArraySet skillset = new CopyOnWriteArraySet<>(list); String requestedByUserId = (String) actorMessage.getRequest().get(JsonKey.REQUESTED_BY); Response response1=cassandraOperation.getRecordById(userDbInfo.getKeySpace(), userDbInfo.getTableName(), endoresedUserId); @@ -144,95 +146,114 @@ private void endorseSkill(Request actorMessage) { List> endoresedList = (List>) response1.get(JsonKey.RESPONSE); List> requestedUserList = (List>) response2.get(JsonKey.RESPONSE); - // check whether both userid exist or not if not throw exception - if(endoresedList.isEmpty() || requestedUserList.isEmpty()){ + if (endoresedList.isEmpty() || requestedUserList.isEmpty()) { throw new ProjectCommonException(ResponseCode.invalidUserId.getErrorCode(), ResponseCode.invalidUserId.getErrorMessage(), ResponseCode.CLIENT_ERROR.getResponseCode()); } - Map endoresedMap = endoresedList.get(0); - Map requestedUserMap = requestedUserList.get(0); + Map endoresedMap = endoresedList.get(0); + Map requestedUserMap = requestedUserList.get(0); // check whether both belongs to same org or not(check root or id of both users) , if not then throw exception --- - if(! compareStrings((String)endoresedMap.get(JsonKey.ROOT_ORG_ID) , (String)requestedUserMap.get(JsonKey.ROOT_ORG_ID))){ + if (!compareStrings((String) endoresedMap.get(JsonKey.ROOT_ORG_ID), + (String) requestedUserMap.get(JsonKey.ROOT_ORG_ID))) { throw new ProjectCommonException(ResponseCode.canNotEndorse.getErrorCode(), ResponseCode.canNotEndorse.getErrorMessage(), ResponseCode.CLIENT_ERROR.getResponseCode()); } - // check whether user have already this skill or not - - String id = OneWayHashing.encryptVal(endoresedUserId + JsonKey.PRIMARY_KEY_DELIMETER + skillName.toLowerCase()); - Response response = cassandraOperation.getRecordById(userSkillDbInfo.getKeySpace() , userSkillDbInfo.getTableName(), id); - List> responseList = (List>) response.get(JsonKey.RESPONSE); - - if(responseList.isEmpty()){ - // means this is first time skill coming so add this one - Map skillMap = new HashMap<>(); - skillMap.put(JsonKey.ID , id); - skillMap.put(JsonKey.USER_ID , endoresedUserId); - skillMap.put(JsonKey.SKILL_NAME , skillName); - skillMap.put(JsonKey.SKILL_NAME_TO_LOWERCASE , skillName.toLowerCase()); - skillMap.put(JsonKey.ADDED_BY ,requestedByUserId ); - skillMap.put(JsonKey.ADDED_AT , format.format(new Date())); - Map endoresers = new HashMap<>(); - endoresers.put(requestedByUserId , format.format(new Date())); - skillMap.put(JsonKey.ENDORSERS , endoresers); - skillMap.put(JsonKey.ENDORSEMENT_COUNT,1); - cassandraOperation.insertRecord(userSkillDbInfo.getKeySpace() , userSkillDbInfo.getTableName(), skillMap); - - updateEs(endoresedUserId); - }else{ - // skill already exist for user simply update the then check if it is already added by same user then dont do anything - // otherwise update the existing one ... - - Map responseMap = responseList.get(0); - // check whether requested user has already endoresed to that user or not - Map endoresersMap = (Map) responseMap.get(JsonKey.ENDORSERS); - if(endoresersMap.containsKey(requestedByUserId)){ - // donot do anything.. - ProjectLogger.log(requestedByUserId + " has already endorsed the "+endoresedUserId); + for(String skillName : skillset) { + + if (!ProjectUtil.isStringNullOREmpty(skillName)) { + + // check whether user have already this skill or not - + String id = OneWayHashing + .encryptVal(endoresedUserId + JsonKey.PRIMARY_KEY_DELIMETER + skillName.toLowerCase()); + Response response = cassandraOperation + .getRecordById(userSkillDbInfo.getKeySpace(), userSkillDbInfo.getTableName(), id); + List> responseList = (List>) response + .get(JsonKey.RESPONSE); + + if (responseList.isEmpty()) { + // means this is first time skill coming so add this one + Map skillMap = new HashMap<>(); + skillMap.put(JsonKey.ID, id); + skillMap.put(JsonKey.USER_ID, endoresedUserId); + skillMap.put(JsonKey.SKILL_NAME, skillName); + skillMap.put(JsonKey.SKILL_NAME_TO_LOWERCASE, skillName.toLowerCase()); + skillMap.put(JsonKey.ADDED_BY, requestedByUserId); + skillMap.put(JsonKey.ADDED_AT, format.format(new Date())); + Map endoresers = new HashMap<>(); + endoresers.put(requestedByUserId, format.format(new Date())); + skillMap.put(JsonKey.ENDORSERS, endoresers); + skillMap.put(JsonKey.ENDORSEMENT_COUNT, 0); + cassandraOperation + .insertRecord(userSkillDbInfo.getKeySpace(), userSkillDbInfo.getTableName(), + skillMap); + + updateEs(endoresedUserId); + } else { + // skill already exist for user simply update the then check if it is already added by same user then dont do anything + // otherwise update the existing one ... + + Map responseMap = responseList.get(0); + // check whether requested user has already endoresed to that user or not + Map endoresersMap = (Map) responseMap + .get(JsonKey.ENDORSERS); + if (endoresersMap.containsKey(requestedByUserId)) { + // donot do anything.. + ProjectLogger.log(requestedByUserId + " has already endorsed the " + endoresedUserId); + } else { + Integer endoresementCount = (Integer) responseMap.get(JsonKey.ENDORSEMENT_COUNT) + 1; + endoresersMap.put(requestedByUserId, format.format(new Date())); + responseMap.put(JsonKey.ENDORSERS, endoresersMap); + responseMap.put(JsonKey.ENDORSEMENT_COUNT, endoresementCount); + cassandraOperation + .updateRecord(userSkillDbInfo.getKeySpace(), userSkillDbInfo.getTableName(), + responseMap); + updateEs(endoresedUserId); + } + } }else{ - Integer endoresementCount = (Integer)responseMap.get(JsonKey.ENDORSEMENT_COUNT)+1; - endoresersMap.put(requestedByUserId , format.format(new Date())); - responseMap.put(JsonKey.ENDORSERS , endoresersMap); - responseMap.put(JsonKey.ENDORSEMENT_COUNT , endoresementCount); - cassandraOperation.updateRecord(userSkillDbInfo.getKeySpace(), userSkillDbInfo.getTableName(), responseMap); - updateEs(endoresedUserId); + skillset.remove(skillName); } } + Response response3 = new Response(); response3.getResult().put(JsonKey.RESULT, "SUCCESS"); sender().tell(response3 , self()); - updateSkillsList(skillName); + updateSkillsList(skillset); } - private void updateSkillsList(String skillName) { + private void updateSkillsList(CopyOnWriteArraySet skillset) { Map skills = new HashMap<>(); + List skillsList = new ArrayList<>(); Response skilldbresponse=cassandraOperation.getRecordById(skillsListDbInfo.getKeySpace(), skillsListDbInfo.getTableName(), REF_SKILLS_DB_ID); List> list = (List>) skilldbresponse.get(JsonKey.RESPONSE); if(! list.isEmpty()){ skills = list.get(0); - List skillsList = (List) skills.get(JsonKey.SKILLS); - if(!skillsList.contains(skillName.toLowerCase())){ - skillsList.add(skillName.toLowerCase()); - skills.put(JsonKey.SKILLS , skillsList); - cassandraOperation.updateRecord(skillsListDbInfo.getKeySpace(), skillsListDbInfo.getTableName() ,skills); - } + skillsList = (List) skills.get(JsonKey.SKILLS); }else{ // craete new Entry into the - skills.put(JsonKey.ID , REF_SKILLS_DB_ID); - List skilllist = new ArrayList<>(); - skilllist.add(skillName.toLowerCase()); - skills.put(JsonKey.SKILLS , skilllist); - cassandraOperation.insertRecord(skillsListDbInfo.getKeySpace(), skillsListDbInfo.getTableName() , skills); + skillsList = new ArrayList<>(); + } + + for(String skillName : skillset){ + if(!skillsList.contains(skillName.toLowerCase())) { + skillsList.add(skillName.toLowerCase()); + } } + skills.put(JsonKey.ID , REF_SKILLS_DB_ID); + skills.put(JsonKey.SKILLS , skillsList); + cassandraOperation.updateRecord(skillsListDbInfo.getKeySpace(), skillsListDbInfo.getTableName() ,skills); + } private void updateEs(String userId) { diff --git a/actors/src/test/java/org/sunbird/learner/actors/skill/SkillmanagementActorTest.java b/actors/src/test/java/org/sunbird/learner/actors/skill/SkillmanagementActorTest.java index 3ccb96c67..fdc4dd59d 100644 --- a/actors/src/test/java/org/sunbird/learner/actors/skill/SkillmanagementActorTest.java +++ b/actors/src/test/java/org/sunbird/learner/actors/skill/SkillmanagementActorTest.java @@ -7,7 +7,9 @@ import akka.actor.Props; import akka.testkit.TestActorRef; import akka.testkit.javadsl.TestKit; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -47,11 +49,13 @@ public class SkillmanagementActorTest { private static final String ROOT_ORG_ID = "7838hhucy83"; private static final String ENDORSED_USER_ID = "nmnkfiiuvcehuy"; private static final String SKILL_NAME="Java"; + private static List skillsList = new ArrayList<>(); @BeforeClass public static void setUp(){ system = ActorSystem.create("system"); + skillsList.add("Java"); Util.checkCassandraDbConnections(); insertUserDataInCassandraAndEs(); @@ -83,7 +87,7 @@ public void testaAddSkill(){ Request actorMessage = new Request(); actorMessage.put(JsonKey.REQUESTED_BY , USER_ID); actorMessage.put(JsonKey.ENDORSED_USER_ID , ENDORSED_USER_ID); - actorMessage.put(JsonKey.SKILL_NAME, SKILL_NAME); + actorMessage.put(JsonKey.SKILL_NAME, skillsList); actorMessage.setOperation(ActorOperations.ADD_SKILL.getValue()); subject.tell(actorMessage, probe.getRef()); @@ -100,7 +104,7 @@ public void testabAddSkillAgain(){ Request actorMessage = new Request(); actorMessage.put(JsonKey.REQUESTED_BY , USER_ID); actorMessage.put(JsonKey.ENDORSED_USER_ID , ENDORSED_USER_ID); - actorMessage.put(JsonKey.SKILL_NAME, SKILL_NAME); + actorMessage.put(JsonKey.SKILL_NAME, skillsList); actorMessage.setOperation(ActorOperations.ADD_SKILL.getValue()); subject.tell(actorMessage, probe.getRef()); @@ -117,7 +121,7 @@ public void testbAddSkillWithInvalidUserId(){ Request actorMessage = new Request(); actorMessage.put(JsonKey.REQUESTED_BY , USER_ID); actorMessage.put(JsonKey.ENDORSED_USER_ID , ENDORSED_USER_ID+1123); - actorMessage.put(JsonKey.SKILL_NAME, SKILL_NAME); + actorMessage.put(JsonKey.SKILL_NAME, skillsList); actorMessage.setOperation(ActorOperations.ADD_SKILL.getValue()); subject.tell(actorMessage, probe.getRef()); @@ -196,10 +200,6 @@ public void testwithUnSupportedMsg(){ } - - - - @AfterClass public static void destroy(){ cassandraOperation.deleteRecord(userDbInfo.getKeySpace(), userDbInfo.getTableName(),USER_ID);