diff --git a/src/main/java/com/example/demo/app/domain/model/AuthenticationModel.java b/src/main/java/com/example/demo/app/domain/model/AuthenticationModel.java new file mode 100644 index 0000000..ec8db4b --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/model/AuthenticationModel.java @@ -0,0 +1,10 @@ +package com.example.demo.app.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AuthenticationModel { + private Long userId; +} diff --git a/src/main/java/com/example/demo/app/domain/model/UserModel.java b/src/main/java/com/example/demo/app/domain/model/UserModel.java index bb34609..1f79b0c 100644 --- a/src/main/java/com/example/demo/app/domain/model/UserModel.java +++ b/src/main/java/com/example/demo/app/domain/model/UserModel.java @@ -8,10 +8,9 @@ import lombok.Getter; @Getter @AllArgsConstructor public class UserModel { - private Long userId; private String userName; - private String emailAddress; + private String mailAddress; private String password; private Integer secretQuestionId; private String secretAnswer; @@ -19,7 +18,7 @@ public class UserModel { private Integer saving; private Integer annualIncome; private Integer monthlyBudget; - private Integer goalId; - private Integer courseId; + private Long goalId; + private Long courseId; private Integer deleteFlag; } diff --git a/src/main/java/com/example/demo/app/domain/service/AuthenticationService.java b/src/main/java/com/example/demo/app/domain/service/AuthenticationService.java new file mode 100644 index 0000000..824c752 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/AuthenticationService.java @@ -0,0 +1,9 @@ +package com.example.demo.app.domain.service; + +import com.example.demo.app.domain.model.AuthenticationModel; +import com.example.demo.app.presentation.form.AuthenticationForm; + +public interface AuthenticationService { + + AuthenticationModel authenticate(AuthenticationForm authenticationForm); +} diff --git a/src/main/java/com/example/demo/app/domain/service/impl/AuthenticationServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/AuthenticationServiceImpl.java new file mode 100644 index 0000000..89ac9f4 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/AuthenticationServiceImpl.java @@ -0,0 +1,42 @@ +package com.example.demo.app.domain.service.impl; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.model.AuthenticationModel; +import com.example.demo.app.domain.service.AuthenticationService; +import com.example.demo.app.infra.entity.UserEntity; +import com.example.demo.app.infra.repository.UserRepository; +import com.example.demo.app.presentation.form.AuthenticationForm; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class AuthenticationServiceImpl implements AuthenticationService { + + private final UserRepository userRepository; + + @Override + public AuthenticationModel authenticate(AuthenticationForm authenticationForm) { + + UserEntity userEntity = userRepository.findByMailAddress( + authenticationForm.getMailAddress()) + .orElse(null); + + if (userEntity == null) { + return null; + } + + if (!userEntity.getQuestionEntity().getSecretQuestionId() + .equals(authenticationForm.getSecretQuestionId())) { + return null; + } + + if (!userEntity.getSecretQuestionAnswer() + .equals(authenticationForm.getSecretAnswer())) { + return null; + } + + return new AuthenticationModel(userEntity.getUserId()); + } +} diff --git a/src/main/java/com/example/demo/app/presentation/controller/AuthenticationController.java b/src/main/java/com/example/demo/app/presentation/controller/AuthenticationController.java new file mode 100644 index 0000000..5cf8569 --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/controller/AuthenticationController.java @@ -0,0 +1,56 @@ +package com.example.demo.app.presentation.controller; + +import jakarta.servlet.http.HttpSession; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; + +import com.example.demo.app.domain.model.AuthenticationModel; +import com.example.demo.app.domain.service.AuthenticationService; +import com.example.demo.app.infra.repository.QuestionRepository; +import com.example.demo.app.presentation.form.AuthenticationForm; + +import lombok.RequiredArgsConstructor; + +@Controller +@RequiredArgsConstructor +public class AuthenticationController { + + private final AuthenticationService authenticationService; + private final QuestionRepository questionRepository; + + @GetMapping("/authentication") + public String showAuthentication(Model model) { + + model.addAttribute("authenticationForm", new AuthenticationForm()); + model.addAttribute("questionList", questionRepository.findAll()); + + return "authentication"; + } + + @PostMapping("/authentication") + public String authenticate( + AuthenticationForm authenticationForm, + Model model, + HttpSession session) { + + AuthenticationModel authenticationModel = + authenticationService.authenticate(authenticationForm); + + if (authenticationModel == null) { + model.addAttribute("errorMessage", "認証情報が正しくありません。"); + model.addAttribute("questionList", questionRepository.findAll()); + + return "authentication"; + } + + session.setAttribute( + "passwordResetUserId", + authenticationModel.getUserId()); + + return "password_reset"; + + } +} diff --git a/src/main/java/com/example/demo/app/presentation/form/AuthenticationForm.java b/src/main/java/com/example/demo/app/presentation/form/AuthenticationForm.java new file mode 100644 index 0000000..2c27a5d --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/form/AuthenticationForm.java @@ -0,0 +1,14 @@ +package com.example.demo.app.presentation.form; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AuthenticationForm { + private String mailAddress; + private Integer secretQuestionId; + private String secretAnswer; +} diff --git a/src/main/resources/templates/Authentication.html b/src/main/resources/templates/Authentication.html new file mode 100644 index 0000000..336b3cc --- /dev/null +++ b/src/main/resources/templates/Authentication.html @@ -0,0 +1,53 @@ + + + +
+ +