diff --git a/pom.xml b/pom.xml index da8949c8c14d6e2cf878b04adcff8c78bb20a6f7..8890006cdf6779fa84efb9a72ed33337549e8abb 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 98797da333498a5be50f11101c92c154750e72ea..3358bee54194681139488ba01fa27f4c15d46116 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 0000000000000000000000000000000000000000..2f2346a236749a2d66d1df5af8e72f00fa8e2275 --- /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 7f06e9645158649168ce1440f602f415ab7c56fc..9246b1e2a1f8c73b509324c7796fda80eb87de50 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 f62486513dd7eb9bebecd51cec34ba29cfc4262a..a13298bdd9059e551f86e90746896495f031e3d6 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 f8bd10b7f8642e04f621036db1bbd9bab5f9db5b..ec26bbb40eba9d4210cbf0cbd21ee6c4d4bb9597 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 9630270d67a4859d05f6868dac0bc0e4a43b150a..d9bce4f23ea13a1a34a153ba1925853f7b005c1b 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 70a44844dc4aada0a0b5665c81074bb92a8ccab2..e640b1c9d4fac2e9377cdcbaebf964c56e3ac789 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 735935c5645a742461f95ba55f9c9a397911d5eb..f06e7496e2500ad1b4e75f5c9ecf8e85f1759ebd 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 58839629da70b076a40be185b8f73df91ed281a8..345980c60a5be23bb84d488ca5e2047793a4bbcf 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 509979cd8565ddc09fa54e3cda8497de1ace3211..75edd8e2d285af1b3470a0befa2881f5139f0144 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 18eddec301d17154ff12a922222f2258b6bee3e3..387de5f7401d1a97910dc2aefcd3678c0ea4796c 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 +