From f955667682040961a972b0107053018dccd41543 Mon Sep 17 00:00:00 2001 From: kkazuya Date: Fri, 18 Sep 2026 11:00:02 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=E3=81=84=E3=82=8D=E3=81=84=E3=82=8D?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/domain/model/AuthenticationModel.java | 10 ++++ .../demo/app/domain/model/GoalModel.java | 24 ++++++++ .../demo/app/domain/model/UserModel.java | 7 +-- .../app/domain/service/AllocationService.java | 11 ++++ .../domain/service/AuthenticationService.java | 9 +++ .../service/impl/AllocationServiceImpl.java | 24 ++++++++ .../impl/AuthenticationServiceImpl.java | 42 ++++++++++++++ .../controller/AuthenticationController.java | 56 +++++++++++++++++++ .../app/presentation/form/AllocationForm.java | 28 ++++++++++ .../presentation/form/AuthenticationForm.java | 14 +++++ .../resources/templates/Authentication.html | 53 ++++++++++++++++++ 11 files changed, 274 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/example/demo/app/domain/model/AuthenticationModel.java create mode 100644 src/main/java/com/example/demo/app/domain/model/GoalModel.java create mode 100644 src/main/java/com/example/demo/app/domain/service/AllocationService.java create mode 100644 src/main/java/com/example/demo/app/domain/service/AuthenticationService.java create mode 100644 src/main/java/com/example/demo/app/domain/service/impl/AllocationServiceImpl.java create mode 100644 src/main/java/com/example/demo/app/domain/service/impl/AuthenticationServiceImpl.java create mode 100644 src/main/java/com/example/demo/app/presentation/controller/AuthenticationController.java create mode 100644 src/main/java/com/example/demo/app/presentation/form/AllocationForm.java create mode 100644 src/main/java/com/example/demo/app/presentation/form/AuthenticationForm.java create mode 100644 src/main/resources/templates/Authentication.html 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/GoalModel.java b/src/main/java/com/example/demo/app/domain/model/GoalModel.java new file mode 100644 index 0000000..7764281 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/model/GoalModel.java @@ -0,0 +1,24 @@ +package com.example.demo.app.domain.model; + +import java.time.LocalDate; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class GoalModel { + + private Long goalId; + + private String goalTitle; + + private String goalSubtitle; + + private Integer targetAmount; + + private LocalDate deadline; + + private Integer goalComplete; + +} \ No newline at end of file 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/AllocationService.java b/src/main/java/com/example/demo/app/domain/service/AllocationService.java new file mode 100644 index 0000000..240c1fd --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/AllocationService.java @@ -0,0 +1,11 @@ +package com.example.demo.app.domain.service; + +import java.util.List; + +import com.example.demo.app.domain.model.AllocationModel; + +public interface AllocationService { + + public List findAll(); + +} 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/AllocationServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/AllocationServiceImpl.java new file mode 100644 index 0000000..fa287d4 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/AllocationServiceImpl.java @@ -0,0 +1,24 @@ +package com.example.demo.app.domain.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.model.AllocationModel; +import com.example.demo.app.domain.service.AllocationService; +import com.example.demo.app.infra.entity.AllocationEntity; +import com.example.demo.app.infra.repository.AllocationRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class AllocationServiceImpl implements AllocationService { + + AllocationRepository allocationRepository; + + public List findAll(){ + return AllocationEntity.createAllocationModelList(allocationRepository.findAll()); + } + +} 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/AllocationForm.java b/src/main/java/com/example/demo/app/presentation/form/AllocationForm.java new file mode 100644 index 0000000..6c28c9b --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/form/AllocationForm.java @@ -0,0 +1,28 @@ +package com.example.demo.app.presentation.form; + +import java.util.List; + +import com.example.demo.app.domain.model.AllocationModel; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AllocationForm { + + private Long categoryId; + private Long courseId; + private Integer allocationRatio; + + public static AllocationForm convertFrom(AllocationModel allocationModel) { + return new AllocationForm(allocationModel.getCategoryId(), allocationModel.getCourseId(), allocationModel.getAllocationRatio()); + } + + public static List convertFrom(List allocationModelList){ + return allocationModelList.stream().map(AllocationForm::convertFrom).toList(); + } + +} 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 @@ + + + + + + 認証 + + + +
+

本人認証確認

+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+ +
+ +
+
+ + + + + + \ No newline at end of file