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