From f8f489f565d97ee28910ce562a19b287c190e7f5 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 18:07:24 +0700 Subject: [PATCH] add api forgot password --- .../controller/AuthenticationController.java | 12 +++++- .../model/request/ForgotPasswordRequest.java | 17 ++++++++ .../authentication/ForgotPasswordService.java | 40 +++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index 438ddd2..b642974 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -2,10 +2,12 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyRequest; import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.ForgotPasswordRequest; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.request.RefreshTokenRequest; import com.iconplus.smartproc.model.response.LoginResponse; import com.iconplus.smartproc.model.response.RefreshTokenResponse; +import com.iconplus.smartproc.service.authentication.ForgotPasswordService; import com.iconplus.smartproc.service.authentication.LoginService; import com.iconplus.smartproc.service.authentication.LogoutService; import com.iconplus.smartproc.service.authentication.TokenManagementService; @@ -19,13 +21,16 @@ public class AuthenticationController { private LoginService loginService; private TokenManagementService tokenManagementService; private LogoutService logoutService; + private ForgotPasswordService forgotPasswordService; public AuthenticationController(LoginService loginService, TokenManagementService tokenManagementService, - LogoutService logoutService) { + LogoutService logoutService, + ForgotPasswordService forgotPasswordService) { this.loginService = loginService; this.tokenManagementService = tokenManagementService; this.logoutService = logoutService; + this.forgotPasswordService = forgotPasswordService; } @PostMapping("/login") @@ -44,4 +49,9 @@ public class AuthenticationController { } + @PostMapping("/forgot-password") + public EmptyResponse forgotPassword(@RequestBody ForgotPasswordRequest forgotPasswordRequest) { + return forgotPasswordService.execute(forgotPasswordRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java new file mode 100644 index 0000000..7c29ff4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ForgotPasswordRequest extends BaseRequest { + private String currentPassword; + private String newPassword; + private String confirmationPassword; +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java new file mode 100644 index 0000000..070de1f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.context.ApiContext; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.ForgotPasswordRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +@Service +public class ForgotPasswordService implements BaseService { + + private ApiContext apiContext; + private UsersRepository usersRepository; + public ForgotPasswordService(UsersRepository usersRepository, + ApiContext apiContext) { + this.usersRepository = usersRepository; + this.apiContext = apiContext; + } + + @Override + public EmptyResponse execute(ForgotPasswordRequest input) { + + Long id = Long.valueOf(apiContext.getUserId()); + var users = usersRepository.findByIdAndIsDeleteFalse(id).orElseThrow(() -> new BusinessException("err", "err", "err")); + + if (!StringUtils.equalsIgnoreCase(input.getCurrentPassword(), users.getPassword()) || + StringUtils.equalsIgnoreCase(input.getNewPassword(), users.getPassword()) || + !StringUtils.equalsIgnoreCase(input.getConfirmationPassword(), input.getNewPassword())) { + throw new BusinessException("err", "err", "err"); + } + + users.setPassword(input.getNewPassword()); + usersRepository.save(users); + + return new EmptyResponse(); + } +}