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..94a57d2 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/model/GoalModel.java @@ -0,0 +1,58 @@ +package com.example.demo.app.domain.model; + +import java.time.LocalDate; + +import com.example.demo.app.infra.entity.GoalEntity; +import com.example.demo.app.presentation.form.GoalForm; + +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; + + public static GoalModel convertFrom(GoalEntity goalEntity) { + return new GoalModel( + goalEntity.getGoalId(), + goalEntity.getGoalTitle(), + goalEntity.getGoalSubtitle(), + goalEntity.getTargetAmount(), + goalEntity.getDeadline(), + goalEntity.getGoalComplete()); + } + + public static GoalEntity convertTo(GoalModel goalModel) { + return new GoalEntity( + goalModel.getGoalId(), + goalModel.getGoalTitle(), + goalModel.getGoalSubtitle(), + goalModel.getTargetAmount(), + goalModel.getDeadline(), + goalModel.getGoalComplete(), + null); + } + + public static GoalModel convertFrom(GoalForm goalForm) { + return new GoalModel( + goalForm.getGoalId(), + goalForm.getGoalTitle(), + goalForm.getGoalSubtitle(), + goalForm.getTargetAmount(), + goalForm.getDeadline(), + goalForm.getGoalComplete()); + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/app/domain/service/GoalService.java b/src/main/java/com/example/demo/app/domain/service/GoalService.java new file mode 100644 index 0000000..ea2c3b7 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/GoalService.java @@ -0,0 +1,15 @@ +package com.example.demo.app.domain.service; + +import com.example.demo.app.domain.model.GoalModel; + +public interface GoalService { + + GoalModel getGoalById(Long goalId); + + GoalModel createGoal(GoalModel goalModel); + + GoalModel updateGoal(GoalModel goalModel); + +// void deleteGoal(Long goalId); + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/app/domain/service/impl/GoalServiceImpl.java b/src/main/java/com/example/demo/app/domain/service/impl/GoalServiceImpl.java new file mode 100644 index 0000000..c7063f3 --- /dev/null +++ b/src/main/java/com/example/demo/app/domain/service/impl/GoalServiceImpl.java @@ -0,0 +1,49 @@ +package com.example.demo.app.domain.service.impl; + +import org.springframework.stereotype.Service; + +import com.example.demo.app.domain.model.GoalModel; +import com.example.demo.app.domain.service.GoalService; +import com.example.demo.app.infra.entity.GoalEntity; +import com.example.demo.app.infra.repository.GoalRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class GoalServiceImpl implements GoalService { + + private final GoalRepository goalRepository; + + @Override + public GoalModel getGoalById(Long goalId) { + + GoalEntity goalEntity = goalRepository.findById(goalId).orElse(null); + + return GoalModel.convertFrom(goalEntity); + + } + + @Override + public GoalModel createGoal(GoalModel goalModel) { + + GoalEntity goalEntity = GoalModel.convertTo(goalModel); + + GoalEntity savedGoalEntity = goalRepository.save(goalEntity); + + return GoalModel.convertFrom(savedGoalEntity); + + } + + @Override + public GoalModel updateGoal(GoalModel goalModel) { + + GoalEntity goalEntity = GoalModel.convertTo(goalModel); + + GoalEntity updatedGoalEntity = goalRepository.save(goalEntity); + + return GoalModel.convertFrom(updatedGoalEntity); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/app/presentation/controller/GoalController.java b/src/main/java/com/example/demo/app/presentation/controller/GoalController.java new file mode 100644 index 0000000..96fe4ac --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/controller/GoalController.java @@ -0,0 +1,61 @@ +package com.example.demo.app.presentation.controller; + +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.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.example.demo.app.domain.model.GoalModel; +import com.example.demo.app.domain.service.GoalService; +import com.example.demo.app.presentation.form.GoalForm; + +import lombok.RequiredArgsConstructor; + +@Controller +@RequiredArgsConstructor +@RequestMapping("/goal") +public class GoalController { + + private final GoalService goalService; + + @GetMapping("/{goalId}") + public String getGoal(@PathVariable Long goalId, Model model) { + + GoalModel goalModel = goalService.getGoalById(goalId); + + GoalForm goalForm = GoalForm.convertFrom(goalModel); + + model.addAttribute("goalForm", goalForm); + + return "goal_view"; + + } + + @GetMapping("/{goalId}/edit") + public String editGoal(@PathVariable Long goalId, Model model) { + + GoalModel goalModel = goalService.getGoalById(goalId); + + GoalForm goalForm = GoalForm.convertFrom(goalModel); + + model.addAttribute("goalForm", goalForm); + + return "goal_edit"; + + } + + @PostMapping("/update") + public String updateGoal(@ModelAttribute GoalForm goalForm) { + + GoalModel goalModel = GoalModel.convertFrom(goalForm); + + goalService.updateGoal(goalModel); + + return "redirect:/goal/" + goalForm.getGoalId(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/app/presentation/form/GoalForm.java b/src/main/java/com/example/demo/app/presentation/form/GoalForm.java new file mode 100644 index 0000000..42e5368 --- /dev/null +++ b/src/main/java/com/example/demo/app/presentation/form/GoalForm.java @@ -0,0 +1,42 @@ +package com.example.demo.app.presentation.form; + +import java.time.LocalDate; + +import com.example.demo.app.domain.model.GoalModel; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GoalForm { + + private Long goalId; + + private String goalTitle; + + private String goalSubtitle; + + private Integer targetAmount; + + private LocalDate deadline; + + private Integer goalComplete; + + public static GoalForm convertFrom(GoalModel goalModel) { + return new GoalForm( + goalModel.getGoalId(), + goalModel.getGoalTitle(), + goalModel.getGoalSubtitle(), + goalModel.getTargetAmount(), + goalModel.getDeadline(), + goalModel.getGoalComplete()); + } + +// public static List convertFrom(List goalModelList) { +// return goalModelList.stream().map(GoalForm::convertFrom).toList(); +// } + +} \ No newline at end of file diff --git a/src/main/resources/templates/goal_edit.html b/src/main/resources/templates/goal_edit.html new file mode 100644 index 0000000..bfe55db --- /dev/null +++ b/src/main/resources/templates/goal_edit.html @@ -0,0 +1,41 @@ + + + + + 目標編集 + + + +

目標編集

+ +
+ + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/goal_view.html b/src/main/resources/templates/goal_view.html new file mode 100644 index 0000000..78bf40b --- /dev/null +++ b/src/main/resources/templates/goal_view.html @@ -0,0 +1,33 @@ + + + + + 目標詳細 + + + +

目標詳細

+ + + + + + + + + + + + + + + + + + +
目標名
目標補足説明
目標金額
目標達成期限
+ + 編集する + + + \ No newline at end of file