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 1f79b0c..05cb388 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 @@ -2,6 +2,8 @@ package com.example.demo.app.domain.model; import java.time.LocalDate; +import com.example.demo.app.infra.entity.UserEntity; + import lombok.AllArgsConstructor; import lombok.Getter; @@ -12,7 +14,7 @@ public class UserModel { private String userName; private String mailAddress; private String password; - private Integer secretQuestionId; + private Long secretQuestionId; private String secretAnswer; private LocalDate brithDate; private Integer saving; @@ -21,4 +23,22 @@ public class UserModel { private Long goalId; private Long courseId; private Integer deleteFlag; + + public static UserModel convertFrom(UserEntity userEntity) { + return new UserModel( + userEntity.getUserId(), + userEntity.getUserName(), + userEntity.getMailAddress(), + userEntity.getPassword(), + userEntity.getQuestionEntity().getSecretQuestionId(), + userEntity.getSecretQuestionAnswer(), + userEntity.getBirthDate(), + userEntity.getSaving(), + userEntity.getAnnualIncome(), + userEntity.getMonthlyBudget(), + userEntity.getGoalEntity().getGoalId(), + userEntity.getCourseEntity().getCourseId(), + userEntity.getDeleteFlag() + ); + } } 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 index 6ad3c04..f61fa9e 100644 --- a/src/main/java/com/example/demo/app/domain/service/UserService.java +++ b/src/main/java/com/example/demo/app/domain/service/UserService.java @@ -1,5 +1,6 @@ package com.example.demo.app.domain.service; +import com.example.demo.app.domain.model.UserModel; import com.example.demo.app.presentation.form.UserForm; public interface UserService { @@ -7,4 +8,6 @@ public interface UserService { void register(UserForm userForm); public void updateCourse(Long userId, Long courseId); + + public UserModel findByUserId(Long userId); } 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 index d93f36b..00dad91 100644 --- 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 @@ -2,6 +2,7 @@ package com.example.demo.app.domain.service.impl; import org.springframework.stereotype.Service; +import com.example.demo.app.domain.model.UserModel; import com.example.demo.app.domain.service.UserService; import com.example.demo.app.infra.entity.CourseEntity; import com.example.demo.app.infra.entity.GoalEntity; @@ -69,6 +70,11 @@ public class UserServiceImpl implements UserService { userRepository.save(userEntity); } + + public UserModel findByUserId(Long userId) { + + return UserModel.convertFrom(userRepository.findById(userId).get()); + } } diff --git a/src/main/java/com/example/demo/app/presentation/controller/TransactionController.java b/src/main/java/com/example/demo/app/presentation/controller/TransactionController.java index 80735be..c75fc28 100644 --- a/src/main/java/com/example/demo/app/presentation/controller/TransactionController.java +++ b/src/main/java/com/example/demo/app/presentation/controller/TransactionController.java @@ -19,11 +19,15 @@ import org.springframework.web.bind.annotation.RequestParam; import com.example.demo.app.domain.model.LoginModel; import com.example.demo.app.domain.service.CategoryService; +import com.example.demo.app.domain.service.GoalService; import com.example.demo.app.domain.service.TransactionService; +import com.example.demo.app.domain.service.UserService; import com.example.demo.app.presentation.form.CategoryForm; import com.example.demo.app.presentation.form.Expense; +import com.example.demo.app.presentation.form.GoalForm; import com.example.demo.app.presentation.form.Income; import com.example.demo.app.presentation.form.TransactionForm; +import com.example.demo.app.presentation.form.UserForm; import lombok.RequiredArgsConstructor; @@ -33,6 +37,8 @@ public class TransactionController { private final TransactionService transactionService; private final CategoryService categoryService; + private final GoalService goalService; + private final UserService userService; // 一覧画面 @GetMapping("/transaction/list") @@ -222,50 +228,85 @@ public class TransactionController { @GetMapping("/menu") public String menu(HttpSession session, Model model, - @RequestParam(required = false, defaultValue = "0") String years, - @RequestParam(required = false, defaultValue = "0") String months) { + @RequestParam(required = false, defaultValue = "0") String years, + @RequestParam(required = false, defaultValue = "0") String months) { - LoginModel loginUser = (LoginModel) session.getAttribute("loginUser"); + LoginModel loginUser = (LoginModel) session.getAttribute("loginUser"); - LocalDate today = LocalDate.now(); + LocalDate today = LocalDate.now(); - int year = (years.equals("0")) ? today.getYear() : Integer.parseInt(years); - int month = (months.equals("0")) ? today.getMonthValue() : Integer.parseInt(months); + int year = (years.equals("0")) ? today.getYear() : Integer.parseInt(years); - System.out.println("year : " + year + "month : " + month); + int month = (months.equals("0")) ? today.getMonthValue() : Integer.parseInt(months); - YearMonth yearMonth = YearMonth.of(year, month); + YearMonth yearMonth = YearMonth.of(year, month); - int lastDay = yearMonth.lengthOfMonth(); + int lastDay = yearMonth.lengthOfMonth(); - int firstDayOfWeek = yearMonth.atDay(1).getDayOfWeek().getValue() % 7; + int firstDayOfWeek = yearMonth.atDay(1).getDayOfWeek().getValue() % 7; - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", today.getDayOfMonth()); + YearMonth previousYearMonth = yearMonth.minusMonths(1); - model.addAttribute("lastDay", lastDay); - model.addAttribute("firstDayOfWeek", firstDayOfWeek); + int previousYear = previousYearMonth.getYear(); + int previousMonth = previousYearMonth.getMonthValue(); - LocalDate startDate = LocalDate.now().withDayOfMonth(1); + YearMonth nextYearMonth = yearMonth.plusMonths(1); - LocalDate endDate = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth()); + int nextYear = nextYearMonth.getYear(); + int nextMonth = nextYearMonth.getMonthValue(); - List incomeList = transactionService.findTotalIncomeList(startDate, endDate, loginUser.getUserId()); - List expenseList = transactionService.findTotalExpenseList(startDate, endDate, loginUser.getUserId()); - model.addAttribute("incomeList", incomeList); + model.addAttribute("year", year); + model.addAttribute("month", month); + model.addAttribute("day", today.getDayOfMonth()); - model.addAttribute("expenseList", expenseList); + model.addAttribute("lastDay", lastDay); + model.addAttribute("firstDayOfWeek", firstDayOfWeek); - int totalIncome = transactionService.findTotalIncome(startDate, endDate, loginUser.getUserId()); + model.addAttribute("previousYear", previousYear); + model.addAttribute("previousMonth", previousMonth); - int totalExpense = transactionService.findTotalExpense(startDate, endDate, loginUser.getUserId()); + model.addAttribute("nextYear", nextYear); + model.addAttribute("nextMonth", nextMonth); - model.addAttribute("totalIncome", totalIncome); - model.addAttribute("totalExpense", totalExpense); + LocalDate startDate = yearMonth.atDay(1); + LocalDate endDate = yearMonth.atEndOfMonth(); - return "menu"; + + List incomeList = transactionService.findTotalIncomeList(startDate, endDate, loginUser.getUserId()); + + List expenseList = transactionService.findTotalExpenseList(startDate, endDate, loginUser.getUserId()); + + model.addAttribute("incomeList", incomeList); + model.addAttribute("expenseList", expenseList); + + + int totalIncome = transactionService.findTotalIncome(startDate, endDate, loginUser.getUserId()); + + int totalExpense = transactionService.findTotalExpense(startDate, endDate, loginUser.getUserId()); + + + model.addAttribute("totalIncome", totalIncome); + model.addAttribute("totalExpense", totalExpense); + + + + GoalForm goalForm = GoalForm.convertFrom(goalService.getGoalByUserId(loginUser.getUserId())); + + UserForm userForm = UserForm.convertFrom(userService.findByUserId(loginUser.getUserId())); + + model.addAttribute("achievementRate", goalForm.getAchievementRate()); + + model.addAttribute("targetAmount", goalForm.getTargetAmount()); + + model.addAttribute("saving", userForm.getSaving()); + + model.addAttribute("deadline", goalForm.getDeadline()); + + + + return "menu"; } + } 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 index dd8f655..f5401c6 100644 --- a/src/main/java/com/example/demo/app/presentation/form/UserForm.java +++ b/src/main/java/com/example/demo/app/presentation/form/UserForm.java @@ -2,6 +2,8 @@ package com.example.demo.app.presentation.form; import java.time.LocalDate; +import com.example.demo.app.domain.model.UserModel; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -21,4 +23,21 @@ public class UserForm { private Integer monthlyBudget; private Long goalId; private Long courseId; + + + public static UserForm convertFrom(UserModel userModel) { + return new UserForm( + userModel.getUserName(), + userModel.getMailAddress(), + userModel.getPassword(), + userModel.getSecretQuestionId(), + userModel.getSecretAnswer(), + userModel.getBrithDate(), + userModel.getSaving(), + userModel.getAnnualIncome(), + userModel.getMonthlyBudget(), + userModel.getGoalId(), + userModel.getCourseId() + ); + } } diff --git a/src/main/resources/static/css/menu.css b/src/main/resources/static/css/menu.css index 12d4ad2..f03042a 100644 --- a/src/main/resources/static/css/menu.css +++ b/src/main/resources/static/css/menu.css @@ -42,6 +42,22 @@ td:hover { background-color: bisque; } +.calendar-title { + display: flex; + justify-content: center; + align-items: center; + + gap: 30px; + + margin: 15px 10px; +} + +.calendar-date { + display: flex; + align-items: baseline; + gap: 10px; +} + .year { font-size: 20px; } @@ -51,8 +67,23 @@ td:hover { font-weight: bold; } -.calendar-title { - margin: 15px 10px; +.month-button { + display: flex; + justify-content: center; + align-items: center; + + width: 40px; + height: 40px; + + font-size: 28px; + text-decoration: none; + color: #333; + + border-radius: 50%; +} + +.month-button:hover { + background-color: #eee; } .date { diff --git a/src/main/resources/templates/menu.html b/src/main/resources/templates/menu.html index d7cd472..4afca1f 100644 --- a/src/main/resources/templates/menu.html +++ b/src/main/resources/templates/menu.html @@ -14,22 +14,30 @@ - +
- - + + ← + - - +
+ + +
+ + + → +
+ @@ -54,21 +62,25 @@
-
+
-
+
-
+
@@ -101,6 +113,30 @@
+
+ 目標貯金 + + 円 +
+
+ 貯金額 + + 円 +
+ +
+ +
+ 達成率 + + 円 +
+
+ 達成期限 + + 円 +
+