From 91823240da5db9932c167f440dc26b6eb1cf5f2d Mon Sep 17 00:00:00 2001 From: s-morimoto Date: Thu, 17 Sep 2026 10:35:32 +0900 Subject: [PATCH 1/5] [ADD]test --- src/main/java/com/example/demo/app/domain/model/test.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/example/demo/app/domain/model/test.java diff --git a/src/main/java/com/example/demo/app/domain/model/test.java b/src/main/java/com/example/demo/app/domain/model/test.java new file mode 100644 index 0000000..4a4afe9 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/model/test.java @@ -0,0 +1,5 @@ +package com.example.demo.app.domain.model; + +public class test { + +} From c21e90185b83f5f30ad3047d8cd9adfb09005476 Mon Sep 17 00:00:00 2001 From: s-morimoto Date: Thu, 17 Sep 2026 10:41:19 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[DELETE]test=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/app/domain/model/test.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/main/java/com/example/demo/app/domain/model/test.java diff --git a/src/main/java/com/example/demo/app/domain/model/test.java b/src/main/java/com/example/demo/app/domain/model/test.java deleted file mode 100644 index 4a4afe9..0000000 --- a/src/main/java/com/example/demo/app/domain/model/test.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.demo.app.domain.model; - -public class test { - -} From 3d857952c90c9ec1f8ba57fe70c1355b8ec447d6 Mon Sep 17 00:00:00 2001 From: s-morimoto Date: Thu, 17 Sep 2026 10:59:59 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[ADD]=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/app/domain/service/LoginService.java | 9 +++ .../domain/service/impl/LoginServiceImpl.java | 25 ++++++ .../demo/app/infra/entity/UserEntity.java | 76 +++++++++++++++++++ .../app/infra/repository/UserRepository.java | 15 ++++ .../controller/LoginController.java | 55 ++++++++++++++ .../demo/app/presentation/form/LoginForm.java | 15 ++++ src/main/resources/templates/login.html | 47 ++++++++++++ 7 files changed, 242 insertions(+) create mode 100644 src/main/java/com/example/demo/app/domain/service/LoginService.java create mode 100644 src/main/java/com/example/demo/app/domain/service/impl/LoginServiceImpl.java create mode 100644 src/main/java/com/example/demo/app/infra/entity/UserEntity.java create mode 100644 src/main/java/com/example/demo/app/infra/repository/UserRepository.java create mode 100644 src/main/java/com/example/demo/app/presentation/controller/LoginController.java create mode 100644 src/main/java/com/example/demo/app/presentation/form/LoginForm.java create mode 100644 src/main/resources/templates/login.html diff --git a/src/main/java/com/example/demo/app/domain/service/LoginService.java b/src/main/java/com/example/demo/app/domain/service/LoginService.java new file mode 100644 index 0000000..4908194 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/LoginService.java @@ -0,0 +1,9 @@ +package com.example.demo.app.domain.service; + +import com.example.demo.app.infra.entity.UserEntity; + +public interface LoginService { + + UserEntity login(String mailAddress, String password); +} + diff --git a/src/main/java/com/example/demo/app/domain/service/impl/LoginServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..ac41c21 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/LoginServiceImpl.java @@ -0,0 +1,25 @@ +package com.example.demo.app.domain.service.impl; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.service.LoginService; +import com.example.demo.app.infra.entity.UserEntity; +import com.example.demo.app.infra.repository.UserRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class LoginServiceImpl implements LoginService { + + private final UserRepository userRepository; + + @Override + public UserEntity login(String mailAddress, String password) { + + return userRepository.findByMailAddressAndPassword( + mailAddress, + password).orElse(null); + } +} + diff --git a/src/main/java/com/example/demo/app/infra/entity/UserEntity.java b/src/main/java/com/example/demo/app/infra/entity/UserEntity.java new file mode 100644 index 0000000..332fb61 --- /dev/null +++ b/src/main/java/com/example/demo/app/infra/entity/UserEntity.java @@ -0,0 +1,76 @@ +package com.example.demo.app.infra.entity; + +import java.time.LocalDate; +import java.util.List; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "user_t") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long userId; + + @Column(name = "user_name", nullable = false) + private String userName; + + @Column(name = "mail_address", nullable = false) + private String mailAddress; + + @Column(name = "password", nullable = false) + private String password; + + @Column(name = "secret_answer", nullable = false) + private String secretQuestionAnswer; + + @Column(name = "birth_date", nullable = false) + private LocalDate birthDate; + + @Column(name = "saving", nullable = false) + private Integer saving; + + @Column(name = "annual_income", nullable = false) + private Integer annualIncome; + + @Column(name = "monthly_budget", nullable = false) + private Integer monthlyBudget; + + @Column(name = "delete_flag", nullable = false) + private Integer deleteFlag; + + @OneToMany(mappedBy = "userEntity") + private List transactionEntityList; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "secret_question_id") + private QuestionEntity questionEntity; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "goal_id") + private GoalEntity goalEntity; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "course_id") + private CourseEntity courseEntity; + +} diff --git a/src/main/java/com/example/demo/app/infra/repository/UserRepository.java b/src/main/java/com/example/demo/app/infra/repository/UserRepository.java new file mode 100644 index 0000000..4627b38 --- /dev/null +++ b/src/main/java/com/example/demo/app/infra/repository/UserRepository.java @@ -0,0 +1,15 @@ +package com.example.demo.app.infra.repository; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.example.demo.app.infra.entity.UserEntity; + +@Repository +public interface UserRepository extends JpaRepository { + + Optional findByMailAddressAndPassword(String mailAddress, String password); +} + diff --git a/src/main/java/com/example/demo/app/presentation/controller/LoginController.java b/src/main/java/com/example/demo/app/presentation/controller/LoginController.java new file mode 100644 index 0000000..2e1439f --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/controller/LoginController.java @@ -0,0 +1,55 @@ +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.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; + +import com.example.demo.app.domain.service.LoginService; +import com.example.demo.app.infra.entity.UserEntity; +import com.example.demo.app.presentation.form.LoginForm; + +import lombok.RequiredArgsConstructor; + +@Controller +@RequiredArgsConstructor +public class LoginController { + + private final LoginService loginService; + + @GetMapping("/login") + public String showLogin(Model model) { + + model.addAttribute( + "loginForm", + new LoginForm()); + + return "login"; + } + + @PostMapping("/login") + public String login( + @ModelAttribute LoginForm loginForm, + Model model, HttpSession session) { + + UserEntity loginUser = loginService.login( + loginForm.getMailAddress(), + loginForm.getPassword()); + + if (loginUser == null) { + model.addAttribute( + "errorMessage", + "Email address or password is incorrect."); + + return "login"; + } + + session.setAttribute("loginUser", loginUser); + + return "menu"; + } +} + diff --git a/src/main/java/com/example/demo/app/presentation/form/LoginForm.java b/src/main/java/com/example/demo/app/presentation/form/LoginForm.java new file mode 100644 index 0000000..c2f7a92 --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/form/LoginForm.java @@ -0,0 +1,15 @@ +package com.example.demo.app.presentation.form; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LoginForm { + + private String mailAddress; + private String password; +} + diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..7050ca1 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,47 @@ + + + + +ログイン + + +
+ +
+

ログイン

+ +
+
+
+ + + +
+ +
+ + + +
+ +
+ +
+
+ + + + +
+ + \ No newline at end of file From 6c24eba7bfba23a2d3e5651ee2f61319b7f74cd9 Mon Sep 17 00:00:00 2001 From: s-morimoto Date: Thu, 17 Sep 2026 11:08:44 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[ADD]UserModel=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/app/domain/model/UserModel.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/example/demo/app/domain/model/UserModel.java 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 new file mode 100644 index 0000000..bb34609 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/model/UserModel.java @@ -0,0 +1,25 @@ +package com.example.demo.app.domain.model; + +import java.time.LocalDate; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class UserModel { + + private Long userId; + private String userName; + private String emailAddress; + private String password; + private Integer secretQuestionId; + private String secretAnswer; + private LocalDate brithDate; + private Integer saving; + private Integer annualIncome; + private Integer monthlyBudget; + private Integer goalId; + private Integer courseId; + private Integer deleteFlag; +} From 073ed5e8647fbada895fc7ddc8853a754d3f30a1 Mon Sep 17 00:00:00 2001 From: s-choi Date: Thu, 17 Sep 2026 12:36:35 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[STYLE]=20=E6=94=B9=E8=A1=8C=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/app/infra/repository/TransactionRepository.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/app/infra/repository/TransactionRepository.java b/src/main/java/com/example/demo/app/infra/repository/TransactionRepository.java index 933aa4f..478a3c0 100644 --- a/src/main/java/com/example/demo/app/infra/repository/TransactionRepository.java +++ b/src/main/java/com/example/demo/app/infra/repository/TransactionRepository.java @@ -21,5 +21,6 @@ public interface TransactionRepository extends JpaRepository