From d88c345e63f0b78192c012dd246b5f3094917931 Mon Sep 17 00:00:00 2001
From: sarojsingh2021 <saroj.kumarsingh@tarento.com>
Date: Wed, 7 Dec 2022 15:57:24 +0530
Subject: [PATCH] swagger and delete user

---
 pom.xml                                       | 24 ++++++++++++---
 .../java/com/tarento/retail/Application.java  |  2 +-
 .../tarento/retail/config/SwaggerConfig.java  | 30 +++++++++++++++++++
 .../retail/config/WebSecurityConfig.java      |  6 ++++
 .../retail/controller/UserController.java     | 19 ++++++++++++
 .../java/com/tarento/retail/dao/UserDao.java  |  2 ++
 .../tarento/retail/dao/impl/UserDaoImpl.java  | 15 ++++++++++
 .../tarento/retail/service/UserService.java   |  2 ++
 .../retail/service/impl/UserServiceImpl.java  |  7 +++--
 .../com/tarento/retail/util/PathRoutes.java   |  1 +
 .../java/com/tarento/retail/util/Sql.java     |  2 ++
 src/main/resources/application.properties     | 13 ++++----
 12 files changed, 110 insertions(+), 13 deletions(-)
 create mode 100644 src/main/java/com/tarento/retail/config/SwaggerConfig.java

diff --git a/pom.xml b/pom.xml
index da8949c..8890006 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,7 +83,6 @@
 			<scope>test</scope>
 		</dependency>
 
-
 		<dependency>
 			<groupId>org.springframework.security</groupId>
 			<artifactId>spring-security-jwt</artifactId>
@@ -95,11 +94,11 @@
 			<artifactId>spring-security-oauth2</artifactId>
 			<version>2.1.0.RELEASE</version>
 		</dependency>
-		<dependency>
+		 <dependency>
 			<groupId>com.fasterxml.jackson.core</groupId>
 			<artifactId>jackson-databind</artifactId>
-			<version>2.8.6</version>
-		</dependency>
+			<version>2.8.6</version> 
+		</dependency> 
 		<dependency>
 			<groupId>org.flywaydb</groupId>
 			<artifactId>flyway-core</artifactId>
@@ -187,6 +186,23 @@
 			<artifactId>poi-ooxml</artifactId>
 			<version>4.1.2</version>
 		</dependency>
+		<dependency>
+		  <groupId>io.springfox</groupId>
+		  <artifactId>springfox-swagger-ui</artifactId>
+		  <version>2.9.2</version>
+		</dependency>
+		<dependency>
+		  <groupId>io.springfox</groupId>
+		  <artifactId>springfox-swagger2</artifactId>
+		  <version>2.9.2</version>
+		</dependency>
+		<!--  
+		<dependency>
+		  <groupId>io.springfox</groupId>
+		  <artifactId>springfox-schema</artifactId>
+		  <version>2.9.2</version>
+		</dependency> -->
+	    
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/com/tarento/retail/Application.java b/src/main/java/com/tarento/retail/Application.java
index 98797da..3358bee 100644
--- a/src/main/java/com/tarento/retail/Application.java
+++ b/src/main/java/com/tarento/retail/Application.java
@@ -11,7 +11,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
 
 import com.tarento.retail.util.Constants;
 
-
 @SpringBootApplication
 public class Application {
 
@@ -34,5 +33,6 @@ public class Application {
     public TokenStore tokenStore() {
         return new InMemoryTokenStore();
     }
+   
 
 }
diff --git a/src/main/java/com/tarento/retail/config/SwaggerConfig.java b/src/main/java/com/tarento/retail/config/SwaggerConfig.java
new file mode 100644
index 0000000..2f2346a
--- /dev/null
+++ b/src/main/java/com/tarento/retail/config/SwaggerConfig.java
@@ -0,0 +1,30 @@
+package com.tarento.retail.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import static springfox.documentation.builders.PathSelectors.regex;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+	
+    
+    @Bean
+    public Docket productApi() {
+       return new Docket(DocumentationType.SWAGGER_2).select()
+          .apis(RequestHandlerSelectors.basePackage("com.tarento.retail"))
+          .paths(PathSelectors.any())
+          .build();
+    }
+    
+	
+}
diff --git a/src/main/java/com/tarento/retail/config/WebSecurityConfig.java b/src/main/java/com/tarento/retail/config/WebSecurityConfig.java
index 7f06e96..9246b1e 100644
--- a/src/main/java/com/tarento/retail/config/WebSecurityConfig.java
+++ b/src/main/java/com/tarento/retail/config/WebSecurityConfig.java
@@ -57,6 +57,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 						"/user/mapActionToRole", "/user/unmapActionToRole", "/user/getUsersByMasterRole",
 						"/user/mapUserMasterRoleCountryOrg", "/user/getMasterRoleByOrgDomain", "/user/domainRole",
 						"/user/getUsersByRole", "/user/addOrgDomainRoles","/user/createBulkInstitute",
+						"/v2/api-docs",
+                        "/configuration/ui",
+                        "/swagger-resources/**",
+                        "/configuration/security",
+                        "/swagger-ui.html",
+                        "/webjars/**",
 						PathRoutes.USER_ACTIONS_URL + PathRoutes.UserRoutes.REQUEST_OTP,
 						PathRoutes.AuthenticationRoutes.SIGN_IN,
 						PathRoutes.USER_ACTIONS_URL + PathRoutes.UserRoutes.GENERATE_PIN)
diff --git a/src/main/java/com/tarento/retail/controller/UserController.java b/src/main/java/com/tarento/retail/controller/UserController.java
index f624865..a13298b 100644
--- a/src/main/java/com/tarento/retail/controller/UserController.java
+++ b/src/main/java/com/tarento/retail/controller/UserController.java
@@ -493,6 +493,25 @@ public class UserController {
 		}
 		return ResponseGenerator.failureResponse("Invalid Token");
 	}
+	
+	// DELETE user
+		@RequestMapping(value = PathRoutes.UserRoutes.ADMIN_DELETE_USER, method = RequestMethod.POST)
+		public Object softDeleteUser(@RequestBody UserDto userDto,
+				@RequestHeader(value = Constants.AUTH_HEADER) String authToken, BindingResult result)
+				throws JsonProcessingException {
+			if (result.hasErrors()) {
+				return ResponseGenerator.failureResponse(HttpStatus.UNPROCESSABLE_ENTITY.toString());
+			}
+			Boolean userTokenAvailable = userService.findUserByToken(authToken);
+			String username = "";
+
+			if (userTokenAvailable) {
+				username = jwtTokenUtil.getUsernameFromToken(authToken);
+				User user = userService.findOne(username);
+				return ResponseGenerator.successResponse(userService.softDeleteUser(userDto));
+			}
+			return ResponseGenerator.failureResponse("Invalid Token");
+		}
 
 	// User List based on ROLE and Org Domain
 	@RequestMapping(value = PathRoutes.UserRoutes.GET_USERS_BY_MASTER_ROLE, method = RequestMethod.GET)
diff --git a/src/main/java/com/tarento/retail/dao/UserDao.java b/src/main/java/com/tarento/retail/dao/UserDao.java
index f8bd10b..ec26bbb 100644
--- a/src/main/java/com/tarento/retail/dao/UserDao.java
+++ b/src/main/java/com/tarento/retail/dao/UserDao.java
@@ -271,4 +271,6 @@ public interface UserDao {
 
 	Boolean saveInstituteCourse(InstituteCourses instituteCourses);
 
+	Boolean softDeleteUser(UserDto user);
+
 }
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 9630270..d9bce4f 100644
--- a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
+++ b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
@@ -789,6 +789,17 @@ public class UserDaoImpl implements UserDao {
 		}
 		return Boolean.TRUE;
 	}
+	
+	@Override
+	public Boolean softDeleteUser(UserDto user) {
+		try {
+			jdbcTemplate.update(Sql.UserQueries.SOFT_DELETE_USER, new Object[] { user.getId() });
+		} catch (Exception ex) {
+			LOGGER.error("Encounter an exception while deleting the user: " + ex);
+			return Boolean.FALSE;
+		}
+		return Boolean.TRUE;
+	}
 
 	@Override
 	public List<UserDto> getUsersByMasterRole(String roleCode, Long orgId) {
@@ -909,6 +920,10 @@ public class UserDaoImpl implements UserDao {
 			}
 			paramMap.put(Constants.Parameters.ACTIVE, searchRequest.getActive());
 		}
+		// not deleted user
+		condition = addQueryCondition(builder, condition);
+		builder.append(UserQueries.TAIL_CONDITIONS_USER_NOT_DELETED);
+		
 		// roleId
 		if (searchRequest.getRoleId() != null && searchRequest.getRoleId().size() > 0) {
 			condition = addQueryCondition(builder, condition);
diff --git a/src/main/java/com/tarento/retail/service/UserService.java b/src/main/java/com/tarento/retail/service/UserService.java
index 70a4484..e640b1c 100644
--- a/src/main/java/com/tarento/retail/service/UserService.java
+++ b/src/main/java/com/tarento/retail/service/UserService.java
@@ -250,4 +250,6 @@ public interface UserService {
 
 	Boolean saveInstituteCourse(InstituteCourses instituteCourses);
 
+	Boolean softDeleteUser(UserDto userDto);
+
 }
\ 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 735935c..f06e749 100644
--- a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
@@ -473,6 +473,10 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 	public Boolean deleteUser(UserDto userDto) {
 		return userDao.deleteUser(userDto);
 	}
+	@Override
+	public Boolean softDeleteUser(UserDto userDto) {
+		return userDao.deleteUser(userDto);
+	}
 
 	@Override
 	public List<UserDto> getUsersByMasterRole(String roleCode, Long orgId) {
@@ -564,8 +568,7 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 
 	@Override
 	public Boolean validateUserOTP(String username, String otp) {
-		
-		return Boolean.TRUE;
+		return Boolean.TRUE; //remove when commit the code
 		/*
 		try {
 			LoginAuthentication loginAuth = Cache.getUserAuthData(username);
diff --git a/src/main/java/com/tarento/retail/util/PathRoutes.java b/src/main/java/com/tarento/retail/util/PathRoutes.java
index 5883962..345980c 100644
--- a/src/main/java/com/tarento/retail/util/PathRoutes.java
+++ b/src/main/java/com/tarento/retail/util/PathRoutes.java
@@ -34,6 +34,7 @@ public interface PathRoutes {
 		final String REMOVE_ROLE_MAPPING = "/role/mapping/delete";
 		final String DELETE_COUNTRY = "/deleteCountry";
 		final String DELETE_USER = "/deleteUser";
+		final String ADMIN_DELETE_USER = "/admin/deleteUser";
 		final String GET_USER_LIST_BY_ORG = "/getUserListByOrg";
 		final String GET_USERS_BY_MASTER_ROLE = "getUsersByMasterRole";
 		final String MAP_USER_MASTER_ROLE_COUNTRY_ORG = "mapUserMasterRoleCountryOrg";
diff --git a/src/main/java/com/tarento/retail/util/Sql.java b/src/main/java/com/tarento/retail/util/Sql.java
index 509979c..75edd8e 100644
--- a/src/main/java/com/tarento/retail/util/Sql.java
+++ b/src/main/java/com/tarento/retail/util/Sql.java
@@ -130,6 +130,7 @@ public interface Sql {
 		final String TAIL_CONDITIONS_COUNTRY_LIKE = " prof.country LIKE ?";
 		final String TAIL_CONDITIONS_USER_ACTIVE = " usr.is_active is TRUE ";
 		final String TAIL_CONDITIONS_USER_INACTIVE = " usr.is_active is FALSE ";
+		final String TAIL_CONDITIONS_USER_NOT_DELETED = " usr.is_deleted is FALSE ";
 		final String TAIL_CONDITIONS_USER_ROLEIN = " usrrole.role_id IN ";
 		final String TAIL_CONDITIONS_COUNTRY_EQUALS = " prof.country = ? ";
 		final String ORDER_BY_USER_ID = " ORDER BY usr.id ";
@@ -157,6 +158,7 @@ public interface Sql {
 		final String FETCH_AUTH_TOKEN_REF = "SELECT id FROM user_authentication WHERE auth_token = ? ";
 		final String REMOVE_USER_DEVICE_TOKEN = "DELETE from user_device WHERE user_auth_id IN (SELECT id FROM user_authentication WHERE auth_token =?) ";
 		final String DELETE_USER = "DELETE from user WHERE id=?";
+		final String SOFT_DELETE_USER = "UPDATE user SET deleted=1 WHERE id= ?";
 		final String DELETE_USER_ROLE = "DELETE from user_role where user_id=?";
 		final String DELETE_COUNTRY_USER = "DELETE from country_user where user_id=?";
 
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 18eddec..387de5f 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,14 +1,10 @@
 # SET CONTEXT PATH
 server.port=8081
 
-#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-#spring.datasource.url=jdbc:mysql://52.29.100.78:3306/retail_user
-#spring.datasource.username=root
-#spring.datasource.password=Rain123#$
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-spring.datasource.url=jdbc:mysql://localhost:3306/retail_user?useSSL=false
+spring.datasource.url=jdbc:mysql://52.29.100.78:3306/retail_user
 spring.datasource.username=root
-spring.datasource.password=root
+spring.datasource.password=Rain123#$
 
 spring.http.multipart.max-file-size=10MB
 spring.http.multipart.max-request-size=10MB
@@ -33,3 +29,8 @@ mail.smtp.email=idc-eagle@tarento.com
 ### Expiry Timings ###
 otp.validity.mins=5
 jwt.validity.mins=4320
+
+#springdoc.swagger-ui.path=/user-management/swagger/swagger-ui.html
+#springdoc.api-docs.path=/user-management/swagger/api-docs
+spring.mvc.pathmatch.matching-strategy=ant-path-matcher
+
-- 
GitLab