From 4df0736d310468bbab540ce26b9692552306c07d Mon Sep 17 00:00:00 2001
From: Darshan Nagesh <darshan.nagesh@tarento.com>
Date: Tue, 22 Feb 2022 11:44:37 +0530
Subject: [PATCH] Adding the User Role Dashboard API

---
 .../retail/controller/UserController.java     |  5 ++++
 .../java/com/tarento/retail/dao/UserDao.java  |  3 +++
 .../tarento/retail/dao/impl/UserDaoImpl.java  | 12 ++++++++++
 .../com/tarento/retail/model/KeyValue.java    | 24 +++++++++++++++++++
 .../tarento/retail/model/KeyValueList.java    | 19 +++++++++++++++
 .../retail/model/mapper/SqlDataMapper.java    | 10 ++++++++
 .../tarento/retail/service/UserService.java   |  6 ++---
 .../retail/service/impl/UserServiceImpl.java  |  6 +++++
 .../com/tarento/retail/util/PathRoutes.java   |  1 +
 .../java/com/tarento/retail/util/Sql.java     |  1 +
 10 files changed, 84 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/com/tarento/retail/model/KeyValue.java
 create mode 100644 src/main/java/com/tarento/retail/model/KeyValueList.java

diff --git a/src/main/java/com/tarento/retail/controller/UserController.java b/src/main/java/com/tarento/retail/controller/UserController.java
index 404ccbf..084976e 100644
--- a/src/main/java/com/tarento/retail/controller/UserController.java
+++ b/src/main/java/com/tarento/retail/controller/UserController.java
@@ -144,6 +144,11 @@ public class UserController {
 	public String getNumberOfRoles() throws JsonProcessingException {
 		return ResponseGenerator.successResponse(userService.getNumberOfRoles());
 	}
+	
+	@RequestMapping(value = PathRoutes.UserRoutes.NUMBER_OF_USERS_ROLES_GET, method = RequestMethod.GET)
+	public String getNumberOfUserAndRoles() throws JsonProcessingException {
+		return ResponseGenerator.successResponse(userService.getNumberOfUsersAndRoles());
+	}
 
 	@RequestMapping(value = PathRoutes.UserRoutes.USER_BY_ID_GET, method = RequestMethod.GET)
 	public String getOne(@RequestParam(value = "id", required = true) Long id,
diff --git a/src/main/java/com/tarento/retail/dao/UserDao.java b/src/main/java/com/tarento/retail/dao/UserDao.java
index 216f2e6..40fa9a9 100644
--- a/src/main/java/com/tarento/retail/dao/UserDao.java
+++ b/src/main/java/com/tarento/retail/dao/UserDao.java
@@ -10,6 +10,7 @@ import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.SearchRequest;
 import com.tarento.retail.model.User;
 import com.tarento.retail.model.UserAuthentication;
@@ -254,5 +255,7 @@ public interface UserDao {
 	UserProfile getUserProfile(String username);
 
 	public UserProfileMapper findAll(SearchRequest searchRequest);
+	
+	public List<KeyValue> getNumberOfUsersAndRoles();
 
 }
diff --git a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
index 11ac9e0..1d7b0ca 100644
--- a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
+++ b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
@@ -32,6 +32,7 @@ import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.SearchRequest;
 import com.tarento.retail.model.User;
@@ -961,4 +962,15 @@ public class UserDaoImpl implements UserDao {
 		}
 		return Boolean.TRUE;
 	}
+
+	@Override
+	public List<KeyValue> getNumberOfUsersAndRoles() {
+		List<KeyValue> userList = new ArrayList<>(); 
+		try {
+			userList = jdbcTemplate.query(UserQueries.GET_NUMBER_USER_ROLES, new SqlDataMapper().new UserRoleCountMapper());
+		} catch (Exception e) {
+			LOGGER.error("Encountered an Exception while fetching the User by Username : " + e);
+		}
+		return userList;
+	}
 }
diff --git a/src/main/java/com/tarento/retail/model/KeyValue.java b/src/main/java/com/tarento/retail/model/KeyValue.java
new file mode 100644
index 0000000..3add5f8
--- /dev/null
+++ b/src/main/java/com/tarento/retail/model/KeyValue.java
@@ -0,0 +1,24 @@
+package com.tarento.retail.model;
+
+public class KeyValue {
+	
+	private String key; 
+	private Object value;
+	public String getKey() {
+		return key;
+	}
+	public void setKey(String key) {
+		this.key = key;
+	}
+	public Object getValue() {
+		return value;
+	}
+	public void setValue(Object value) {
+		this.value = value;
+	} 
+	
+	
+	
+	
+
+}
diff --git a/src/main/java/com/tarento/retail/model/KeyValueList.java b/src/main/java/com/tarento/retail/model/KeyValueList.java
new file mode 100644
index 0000000..0d835fa
--- /dev/null
+++ b/src/main/java/com/tarento/retail/model/KeyValueList.java
@@ -0,0 +1,19 @@
+package com.tarento.retail.model;
+
+import java.util.List;
+
+public class KeyValueList {
+	
+	private List<KeyValue> keyValues;
+
+	public List<KeyValue> getKeyValues() {
+		return keyValues;
+	}
+
+	public void setKeyValues(List<KeyValue> keyValues) {
+		this.keyValues = keyValues;
+	} 
+	
+	
+
+}
diff --git a/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java b/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java
index f6b26d5..adce2fa 100644
--- a/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java
+++ b/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java
@@ -18,6 +18,7 @@ import com.tarento.retail.dto.UserDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.ActionRole;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.User;
 import com.tarento.retail.model.UserAuthentication;
@@ -310,6 +311,15 @@ public class SqlDataMapper {
 			return action;
 		}
 	}
+	
+	public class UserRoleCountMapper implements RowMapper<KeyValue> {
+		public KeyValue mapRow(ResultSet rs, int rowNum) throws SQLException {
+			KeyValue keyValue = new KeyValue(); 
+			keyValue.setKey(rs.getString("roleName"));
+			keyValue.setValue(rs.getObject("numberOfUsers"));
+			return keyValue;
+		}
+	}
 
 	public class RoleMapper implements RowMapper<Role> {
 		public Role mapRow(ResultSet rs, int rowNum) throws SQLException {
diff --git a/src/main/java/com/tarento/retail/service/UserService.java b/src/main/java/com/tarento/retail/service/UserService.java
index 693ab53..aef7ea5 100644
--- a/src/main/java/com/tarento/retail/service/UserService.java
+++ b/src/main/java/com/tarento/retail/service/UserService.java
@@ -10,12 +10,10 @@ import com.tarento.retail.dto.MasterRoleDto;
 import com.tarento.retail.dto.UserCountryDto;
 import com.tarento.retail.dto.UserDto;
 import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
-import com.tarento.retail.dto.UserMasterRoleDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
-import com.tarento.retail.model.LoginAuthentication;
-import com.tarento.retail.model.LoginDto;
+import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.SearchRequest;
 import com.tarento.retail.model.User;
@@ -236,5 +234,7 @@ public interface UserService {
 	Boolean validateUserOTP(String username, String otp);
 
 	public List<UserProfile> findAll(SearchRequest searchRequest);
+	
+	List<KeyValue> getNumberOfUsersAndRoles();
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
index cba7d19..6851834 100644
--- a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
@@ -38,6 +38,7 @@ import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.LoginAuthentication;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.SearchRequest;
@@ -590,4 +591,9 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 		return profileList;
 	}
 
+	@Override
+	public List<KeyValue> getNumberOfUsersAndRoles() {
+		return userDao.getNumberOfUsersAndRoles();
+	}
+
 }
diff --git a/src/main/java/com/tarento/retail/util/PathRoutes.java b/src/main/java/com/tarento/retail/util/PathRoutes.java
index d6a9b81..204f14e 100644
--- a/src/main/java/com/tarento/retail/util/PathRoutes.java
+++ b/src/main/java/com/tarento/retail/util/PathRoutes.java
@@ -38,6 +38,7 @@ public interface PathRoutes {
 		final String GET_USERS_BY_MASTER_ROLE = "getUsersByMasterRole";
 		final String MAP_USER_MASTER_ROLE_COUNTRY_ORG = "mapUserMasterRoleCountryOrg";
 		final String REQUEST_OTP = "/requestOTP";
+		final String NUMBER_OF_USERS_ROLES_GET = "/getNumberOfUsersAndRoles";
 	}
 
 	public interface AuthenticationRoutes {
diff --git a/src/main/java/com/tarento/retail/util/Sql.java b/src/main/java/com/tarento/retail/util/Sql.java
index d333696..d8d008d 100644
--- a/src/main/java/com/tarento/retail/util/Sql.java
+++ b/src/main/java/com/tarento/retail/util/Sql.java
@@ -174,6 +174,7 @@ public interface Sql {
 
 		final String GET_USER_ID = "SELECT id FROM user WHERE username = ? OR email_id = ? OR phone_no = ?";
 		final String GET_USER_PROFILE = "SELECT user.id, user.username, user.email_id as emailId, user.phone_no as phoneNo, user.avatar_url  as avatarUrl, user_profile.first_name, user_profile.last_name, user_profile.dob FROM user LEFT JOIN user_profile on user_profile.user_id = user.id WHERE (user.username = ? or user.email_id = ? ) and is_active is TRUE";
+		final String GET_NUMBER_USER_ROLES = "SELECT count(*) as 'numberOfUsers', r.role_name as 'roleName' from user usr LEFT JOIN user_role ur ON usr.id = ur.user_id LEFT JOIN role r ON ur.role_id = r.id where r.id > 2090 group by r.role_name "; 
 	}
 
 	public interface NamedUserQueries {
-- 
GitLab