diff --git a/src/main/java/com/example/demo/app/domain/service/CourseInfoService.java b/src/main/java/com/example/demo/app/domain/service/CourseInfoService.java new file mode 100644 index 0000000..83cf4ab --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/CourseInfoService.java @@ -0,0 +1,10 @@ +package com.example.demo.app.domain.service; + +import java.util.List; + +import com.example.demo.app.domain.model.CourseInfoModel; + +public interface CourseInfoService { + + public List findAll(); +} diff --git a/src/main/java/com/example/demo/app/domain/service/CourseService.java b/src/main/java/com/example/demo/app/domain/service/CourseService.java new file mode 100644 index 0000000..4681860 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/CourseService.java @@ -0,0 +1,11 @@ +package com.example.demo.app.domain.service; + +import java.util.List; + +import com.example.demo.app.domain.model.CourseModel; + +public interface CourseService { + + public List findAll(); + +} diff --git a/src/main/java/com/example/demo/app/domain/service/PasswordResetService.java b/src/main/java/com/example/demo/app/domain/service/PasswordResetService.java new file mode 100644 index 0000000..ec1140e --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/PasswordResetService.java @@ -0,0 +1,8 @@ +package com.example.demo.app.domain.service; + +import com.example.demo.app.presentation.form.PasswordResetForm; + +public interface PasswordResetService { + + boolean resetPassword(Long userId, PasswordResetForm passwordResetForm); +} diff --git a/src/main/java/com/example/demo/app/domain/service/UserService.java b/src/main/java/com/example/demo/app/domain/service/UserService.java new file mode 100644 index 0000000..4a7a338 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/UserService.java @@ -0,0 +1,8 @@ +package com.example.demo.app.domain.service; + +import com.example.demo.app.presentation.form.UserForm; + +public interface UserService { + + void register(UserForm userForm); +} diff --git a/src/main/java/com/example/demo/app/domain/service/impl/CourseInfoServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/CourseInfoServiceImpl.java new file mode 100644 index 0000000..4658a18 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/CourseInfoServiceImpl.java @@ -0,0 +1,23 @@ +package com.example.demo.app.domain.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.model.CourseInfoModel; +import com.example.demo.app.domain.service.CourseInfoService; +import com.example.demo.app.infra.repository.AllocationRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CourseInfoServiceImpl implements CourseInfoService { + + private final AllocationRepository allocationRepository; + + @Override + public List findAll() { + return allocationRepository.findAllJoinedAllocation(); + } +} diff --git a/src/main/java/com/example/demo/app/domain/service/impl/CourseServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/CourseServiceImpl.java new file mode 100644 index 0000000..a4dec5f --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/CourseServiceImpl.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.CourseModel; +import com.example.demo.app.domain.service.CourseService; +import com.example.demo.app.infra.entity.CourseEntity; +import com.example.demo.app.infra.repository.CourseRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CourseServiceImpl implements CourseService { + + private final CourseRepository courseRepository; + + public List findAll(){ + return CourseEntity.createCourseModelList(courseRepository.findAll()); + } + +} diff --git a/src/main/java/com/example/demo/app/domain/service/impl/PasswordResetServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/PasswordResetServiceImpl.java new file mode 100644 index 0000000..2866cea --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/PasswordResetServiceImpl.java @@ -0,0 +1,41 @@ +package com.example.demo.app.domain.service.impl; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.service.PasswordResetService; +import com.example.demo.app.infra.entity.UserEntity; +import com.example.demo.app.infra.repository.UserRepository; +import com.example.demo.app.presentation.form.PasswordResetForm; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class PasswordResetServiceImpl implements PasswordResetService { + + private final UserRepository userRepository; + + @Override + public boolean resetPassword( + Long userId, + PasswordResetForm passwordResetForm) { + + if (!passwordResetForm.getPassword() + .equals(passwordResetForm.getPasswordConfirm())) { + return false; + } + + UserEntity userEntity = + userRepository.findById(userId).orElse(null); + + if (userEntity == null) { + return false; + } + + userEntity.setPassword(passwordResetForm.getPassword()); + + userRepository.save(userEntity); + + return true; + } +} diff --git a/src/main/java/com/example/demo/app/domain/service/impl/UserServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..a74f42b --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/UserServiceImpl.java @@ -0,0 +1,58 @@ +package com.example.demo.app.domain.service.impl; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.service.UserService; +import com.example.demo.app.infra.entity.CourseEntity; +import com.example.demo.app.infra.entity.GoalEntity; +import com.example.demo.app.infra.entity.QuestionEntity; +import com.example.demo.app.infra.entity.UserEntity; +import com.example.demo.app.infra.repository.CourseRepository; +import com.example.demo.app.infra.repository.GoalRepository; +import com.example.demo.app.infra.repository.QuestionRepository; +import com.example.demo.app.infra.repository.UserRepository; +import com.example.demo.app.presentation.form.UserForm; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class UserServiceImpl implements UserService { + + private final UserRepository userRepository; + private final QuestionRepository questionRepository; + private final GoalRepository goalRepository; + private final CourseRepository courseRepository; + + @Override + public void register(UserForm userForm) { + + UserEntity userEntity = new UserEntity(); + + userEntity.setUserName(userForm.getUserName()); + userEntity.setMailAddress(userForm.getMailAddress()); + userEntity.setPassword(userForm.getPassword()); + userEntity.setSecretQuestionAnswer(userForm.getSecretAnswer()); + userEntity.setBirthDate(userForm.getBirthDate()); + userEntity.setSaving(userForm.getSaving()); + userEntity.setAnnualIncome(userForm.getAnnualIncome()); + userEntity.setMonthlyBudget(userForm.getMonthlyBudget()); + + QuestionEntity questionEntity = + questionRepository.findById(userForm.getSecretQuestionId()).orElse(null); + + GoalEntity goalEntity = + goalRepository.findById(userForm.getGoalId()).orElse(null); + + CourseEntity courseEntity = + courseRepository.findById(userForm.getCourseId()).orElse(null); + + userEntity.setQuestionEntity(questionEntity); + userEntity.setGoalEntity(goalEntity); + userEntity.setCourseEntity(courseEntity); + + userEntity.setDeleteFlag(0); + + userRepository.save(userEntity); + } +} diff --git a/src/main/java/com/example/demo/app/infra/repository/GoalRepository.java b/src/main/java/com/example/demo/app/infra/repository/GoalRepository.java new file mode 100644 index 0000000..c66aa15 --- /dev/null +++ b/src/main/java/com/example/demo/app/infra/repository/GoalRepository.java @@ -0,0 +1,11 @@ +package com.example.demo.app.infra.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.example.demo.app.infra.entity.GoalEntity; + +@Repository +public interface GoalRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/app/presentation/controller/CourseController.java b/src/main/java/com/example/demo/app/presentation/controller/CourseController.java new file mode 100644 index 0000000..c9199af --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/controller/CourseController.java @@ -0,0 +1,52 @@ +package com.example.demo.app.presentation.controller; + +import java.util.logging.Logger; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +import com.example.demo.app.domain.service.CourseInfoService; +import com.example.demo.app.domain.service.CourseService; +import com.example.demo.app.presentation.form.CourseForm; +import com.example.demo.app.presentation.form.CourseInfoForm; + +import lombok.RequiredArgsConstructor; + + +@Controller +@RequiredArgsConstructor +public class CourseController { + + private final static Logger LOGGER = Logger.getLogger(CourseController.class.getName()); + // エラーメッセージ用の定数フィールド + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + // private final HttpSession httpSession; + private final CourseService courseService; + private final CourseInfoService courseInfoService; + + + + @GetMapping("/select-course") + public String select(Model model) { + + //try { + model.addAttribute("courseList", CourseForm.convertFrom(courseService.findAll())); + model.addAttribute("courseInfoList", CourseInfoForm.convertFrom(courseInfoService.findAll())); + + return "select-course"; + + //} catch (Exception e) { +// // ログイン情報の破棄 +// httpSession.invalidate(); +// +// e.printStackTrace(); +// +// // エラーログ出力 +// LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); +// // エラー画面遷移 +// return null; +// } + } +} diff --git a/src/main/java/com/example/demo/app/presentation/controller/PasswordResetController.java b/src/main/java/com/example/demo/app/presentation/controller/PasswordResetController.java new file mode 100644 index 0000000..b5fcfba --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/controller/PasswordResetController.java @@ -0,0 +1,61 @@ +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.service.PasswordResetService; +import com.example.demo.app.presentation.form.PasswordResetForm; + +import lombok.RequiredArgsConstructor; + +@Controller +@RequiredArgsConstructor +public class PasswordResetController { + + private final PasswordResetService passwordResetService; + + @GetMapping("/password_reset") + public String showPasswordReset(Model model) { + + model.addAttribute( + "passwordResetForm", + new PasswordResetForm()); + + return "password_reset"; + } + + @PostMapping("/password_reset") + public String resetPassword( + PasswordResetForm passwordResetForm, + Model model, + HttpSession session) { + + Long userId = + (Long) session.getAttribute("passwordResetUserId"); + + if (userId == null) { + return "redirect:/login"; + } + + boolean isReset = + passwordResetService.resetPassword( + userId, + passwordResetForm); + + if (!isReset) { + model.addAttribute( + "errorMessage", + "パスワードが一致していません。"); + + return "password_reset"; + } + + session.removeAttribute("passwordResetUserId"); + + return "redirect:/login"; + } +} diff --git a/src/main/java/com/example/demo/app/presentation/controller/UserController.java b/src/main/java/com/example/demo/app/presentation/controller/UserController.java new file mode 100644 index 0000000..2914032 --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/controller/UserController.java @@ -0,0 +1,35 @@ +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.presentation.form.UserForm; + +import lombok.RequiredArgsConstructor; + +@Controller +@RequiredArgsConstructor +public class UserController { + + @GetMapping("/user/register") + public String showRegister(Model model) { + model.addAttribute("userForm", new UserForm()); + return "user_register"; + } + + @PostMapping("/user/register/confirm") + public String confirmRegister( + @ModelAttribute UserForm userForm, + HttpSession session) { + + session.setAttribute("userForm", userForm); + + return "user_register_confirm"; + } + +} diff --git a/src/main/java/com/example/demo/app/presentation/form/PasswordResetForm.java b/src/main/java/com/example/demo/app/presentation/form/PasswordResetForm.java new file mode 100644 index 0000000..3213e1b --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/form/PasswordResetForm.java @@ -0,0 +1,13 @@ +package com.example.demo.app.presentation.form; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PasswordResetForm { + private String password; + private String passwordConfirm; +} diff --git a/src/main/java/com/example/demo/app/presentation/form/UserForm.java b/src/main/java/com/example/demo/app/presentation/form/UserForm.java new file mode 100644 index 0000000..e51f23f --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/form/UserForm.java @@ -0,0 +1,24 @@ +package com.example.demo.app.presentation.form; + +import java.time.LocalDate; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserForm { + private String userName; + private String mailAddress; + private String password; + private Long secretQuestionId; + private String SecretAnswer; + private LocalDate birthDate; + private Integer saving; + private Integer annualIncome; + private Integer monthlyBudget; + private Long goalId; + private Long courseId; +} diff --git a/src/main/resources/templates/password_reset.html b/src/main/resources/templates/password_reset.html new file mode 100644 index 0000000..522fd4b --- /dev/null +++ b/src/main/resources/templates/password_reset.html @@ -0,0 +1,42 @@ + + + + +パスワード再設定 + + +
+ +
+

パスワード再設定

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+

+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/select_course.html b/src/main/resources/templates/select_course.html new file mode 100644 index 0000000..6718ef4 --- /dev/null +++ b/src/main/resources/templates/select_course.html @@ -0,0 +1,35 @@ + + + + +コース選択 + + + +
+
+

+ +

+
+
+ + + + 配分(%) + + + + + +
カテゴリ名
+
+
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/user_register_confirm.html b/src/main/resources/templates/user_register_confirm.html index aad56dd..2b35041 100644 --- a/src/main/resources/templates/user_register_confirm.html +++ b/src/main/resources/templates/user_register_confirm.html @@ -1,5 +1,5 @@ - + 新規会員登録確認