From 80102c7bf93bae5f3f46592e66d899fb3e88eb09 Mon Sep 17 00:00:00 2001 From: "h.hein" <26-h-kyaw-sakuracommunication@it-college.co.jp> Date: Tue, 13 Oct 2026 14:00:13 +0900 Subject: [PATCH] stept 1 done em spring --- .gitignore | 1 + .settings/org.eclipse.wst.common.component | 10 - .../app/domain/service/DeleteDepartment.java | 6 + .../app/domain/service/SearchDepartment.java | 12 +- .../domain/service/SearchDepartmentImpl.java | 42 ----- .../app/domain/service/UpdateDepartment.java | 7 + .../service/impl/DeleteDepartmentImpl.java | 20 ++ .../service/impl/SearchDepartmentImpl.java | 30 ++- .../service/impl/UpdateDepartmentImpl.java | 26 +++ .../DeleteDepartmentController.java | 47 +++++ .../SelectDepartmentController.java | 6 +- .../UpdateDepartmentController.java | 89 +++++++++ .../templates/insertDepartmentInput.html | 10 + src/main/resources/templates/menu.html | 176 ++++++++++-------- .../resources/templates/selectDepartment.html | 172 ++++++++++------- .../templates/updateDepartmentInput.html | 85 +++++++++ 16 files changed, 527 insertions(+), 212 deletions(-) delete mode 100644 .settings/org.eclipse.wst.common.component create mode 100644 src/main/java/com/example/rhizome/app/domain/service/DeleteDepartment.java delete mode 100644 src/main/java/com/example/rhizome/app/domain/service/SearchDepartmentImpl.java create mode 100644 src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java create mode 100644 src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java create mode 100644 src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java create mode 100644 src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java create mode 100644 src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java create mode 100644 src/main/resources/templates/insertDepartmentInput.html create mode 100644 src/main/resources/templates/updateDepartmentInput.html diff --git a/.gitignore b/.gitignore index b83d222..0f63015 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target/ +/bin/ diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component deleted file mode 100644 index 5517781..0000000 --- a/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/main/java/com/example/rhizome/app/domain/service/DeleteDepartment.java b/src/main/java/com/example/rhizome/app/domain/service/DeleteDepartment.java new file mode 100644 index 0000000..f48ce08 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/DeleteDepartment.java @@ -0,0 +1,6 @@ +package com.example.rhizome.app.domain.service; + +public interface DeleteDepartment { + void delete(Integer idDepartment); + +} diff --git a/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java b/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java index 572dcee..9534d57 100644 --- a/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java +++ b/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java @@ -1,14 +1,16 @@ package com.example.rhizome.app.domain.service; +import java.util.List; + import com.example.rhizome.app.domain.model.Department; import com.example.rhizome.app.domain.model.SearchConditionDepartment; -import java.util.List; - public interface SearchDepartment { - List selectAll(); + List selectAll(); - List searchBy(SearchConditionDepartment searchConditionDepartment); + List searchBy(SearchConditionDepartment searchConditionDepartment); - List searchByWithLike(SearchConditionDepartment searchConditionDepartment); + List searchByWithLike(SearchConditionDepartment searchConditionDepartment); + + Department searchById(Integer idDepartment); } diff --git a/src/main/java/com/example/rhizome/app/domain/service/SearchDepartmentImpl.java b/src/main/java/com/example/rhizome/app/domain/service/SearchDepartmentImpl.java deleted file mode 100644 index 60d6c23..0000000 --- a/src/main/java/com/example/rhizome/app/domain/service/SearchDepartmentImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.example.rhizome.app.domain.service; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.stereotype.Service; - -import com.example.rhizome.app.domain.model.Department; -import com.example.rhizome.app.domain.model.SearchConditionDepartment; -import com.example.rhizome.app.infra.entity.DepartmentEntity; -import com.example.rhizome.app.infra.repository.DepartmentRepository; - -@Service -public class SearchDepartmentImpl implements SearchDepartment { - - @Autowired - private DepartmentRepository departmentRepository; - - @Override - public List selectAll() { - return DepartmentEntity.createDepartmentList(departmentRepository.findAll()); - } - - @Override - public List searchBy(SearchConditionDepartment searchConditionDepartment) { - Specification spec = Specification - .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment())) - .and(DepartmentRepository.nmDepartmentEqual(searchConditionDepartment.getNmDepartment())); - - return DepartmentEntity.createDepartmentList(departmentRepository.findAll(spec)); - } - - @Override - public List searchByWithLike(SearchConditionDepartment searchConditionDepartment) { - Specification spec = Specification - .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment())) - .and(DepartmentRepository.nmDepartmentLike(searchConditionDepartment.getNmDepartment())); - - return DepartmentEntity.createDepartmentList(departmentRepository.findAll(spec)); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java b/src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java new file mode 100644 index 0000000..c77d4bb --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java @@ -0,0 +1,7 @@ +package com.example.rhizome.app.domain.service; + +import com.example.rhizome.app.domain.model.Department; + +public interface UpdateDepartment { + void update(Department department); +} \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java new file mode 100644 index 0000000..4f9ef07 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java @@ -0,0 +1,20 @@ +package com.example.rhizome.app.domain.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.example.rhizome.app.domain.service.DeleteDepartment; +import com.example.rhizome.app.infra.repository.DepartmentRepository; + +@Service +public class DeleteDepartmentImpl implements DeleteDepartment { + + @Autowired + private DepartmentRepository departmentRepository; + + @Override + public void delete(Integer idDepartment) { + // JpaRepository တွင်ပါရှိသော deleteById ကို အသုံးပြု၍ ဖယ်ရှားရန် + departmentRepository.deleteById(idDepartment); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java b/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java index feb6b37..1bd429f 100644 --- a/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java @@ -1,17 +1,18 @@ package com.example.rhizome.app.domain.service.impl; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import com.example.rhizome.app.domain.model.Department; import com.example.rhizome.app.domain.model.SearchConditionDepartment; import com.example.rhizome.app.domain.service.SearchDepartment; import com.example.rhizome.app.infra.entity.DepartmentEntity; import com.example.rhizome.app.infra.repository.DepartmentRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; /** * 部署情報検索系の機能を集約させるサービスクラスです。 @@ -79,4 +80,21 @@ public class SearchDepartmentImpl implements SearchDepartment { ); } + + @Override + public Department searchById(Integer idDepartment) { + // TODO 自動生成されたメソッド・スタブ + if (idDepartment == null) { + return null; + } + + return departmentRepository.findById(idDepartment) + .map(entity -> { + List list = DepartmentEntity.createDepartmentList(List.of(entity)); + return list.isEmpty() ? null : list.get(0); + }) + .orElse(null); + + + } } diff --git a/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java b/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java new file mode 100644 index 0000000..9717aad --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java @@ -0,0 +1,26 @@ +package com.example.rhizome.app.domain.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.example.rhizome.app.domain.model.Department; +import com.example.rhizome.app.domain.service.UpdateDepartment; +import com.example.rhizome.app.infra.entity.DepartmentEntity; +import com.example.rhizome.app.infra.repository.DepartmentRepository; + +@Service +public class UpdateDepartmentImpl implements UpdateDepartment { + + @Autowired + private DepartmentRepository departmentRepository; + + @Override + public void update(Department department) { + // Model မှ Entity သို့ ပြောင်းလဲခြင်း သို့မဟုတ် သက်ဆိုင်ရာ update ကို save ဖြင့် လုပ်ဆောင်ရန် + DepartmentEntity entity = new DepartmentEntity(); + entity.setIdDepartment(department.getIdDepartment()); + entity.setNmDepartment(department.getNmDepartment()); + + departmentRepository.save(entity); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java new file mode 100644 index 0000000..7f2f6fa --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java @@ -0,0 +1,47 @@ +package com.example.rhizome.app.presentation.controller; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import com.example.rhizome.aop.aspect.SessionCheck; +import com.example.rhizome.app.domain.service.DeleteDepartment; +import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.MessageForm; + +@Controller +public class DeleteDepartmentController { + + HttpSession httpSession; + DeleteDepartment deleteDepartment; + + @Autowired + public DeleteDepartmentController(HttpSession httpSession, DeleteDepartment deleteDepartment) { + this.httpSession = httpSession; + this.deleteDepartment = deleteDepartment; + } + + @SessionCheck + @PostMapping("/deleteDepartmentInput") + public String deleteDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) { + final String DELETE_COMPLETE = "削除しました。"; + + try { + // ဌာန ဖယ်ရှားခြင်း လုပ်ဆောင်ချက် + deleteDepartment.delete(idDepartment); + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE)); + return "forward:/selectDepartment"; + + } catch (Exception e) { + httpSession.invalidate(); + e.printStackTrace(); + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java b/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java index bde8694..0110891 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; +import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.app.domain.model.Department; import com.example.rhizome.app.domain.service.SearchDepartment; import com.example.rhizome.app.presentation.form.DepartmentForm; @@ -21,9 +22,10 @@ public class SelectDepartmentController { private SearchDepartment searchDepartment; /** 部署検索画面の初期表示 */ + @SessionCheck @GetMapping("/showSelectDepartment") public String showSelectDepartment(@ModelAttribute SearchConditionDepartmentForm searchConditionDepartmentForm) { - return "department/selectDepartment"; + return "selectDepartment"; } /** 部署検索処理 */ @@ -34,6 +36,6 @@ public class SelectDepartmentController { ); model.addAttribute("departmentFormList", DepartmentForm.convertFrom(departmentList)); - return "department/selectDepartment"; + return "selectDepartment"; } } \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java new file mode 100644 index 0000000..b3ab1b1 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java @@ -0,0 +1,89 @@ +package com.example.rhizome.app.presentation.controller; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.example.rhizome.aop.aspect.SessionCheck; +import com.example.rhizome.app.domain.model.Department; +import com.example.rhizome.app.domain.service.SearchDepartment; +import com.example.rhizome.app.domain.service.UpdateDepartment; +import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.DepartmentForm; +import com.example.rhizome.app.presentation.form.MessageForm; + +@Controller +public class UpdateDepartmentController { + + private final static Logger LOGGER = Logger.getLogger(UpdateDepartmentController.class.getName()); + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + HttpSession httpSession; + SearchDepartment searchDepartment; + UpdateDepartment updateDepartment; // 追加 + + @Autowired + public UpdateDepartmentController(HttpSession httpSession, SearchDepartment searchDepartment, UpdateDepartment updateDepartment) { + this.httpSession = httpSession; + this.searchDepartment = searchDepartment; + this.updateDepartment = updateDepartment; // 追加 + } + + @SessionCheck + @PostMapping("/updateDepartmentInput") + public String showUpdateDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) { + final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。"; + + try { + Department department = searchDepartment.searchById(idDepartment); + + if (department == null) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UPDATE_TARGET_ID_NOT_FOUND)); + return "forward:/selectDepartment"; + } + + model.addAttribute("departmentForm", DepartmentForm.convertFrom(department)); + return "updateDepartmentInput"; + + } catch (Exception e) { + httpSession.invalidate(); + e.printStackTrace(); + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } + + /** + * 部署情報の更新を実行する + */ + @SessionCheck + @RequestMapping(value = "/updateDepartmentResult", method = RequestMethod.POST) + public String updateDepartmentResult(@ModelAttribute("departmentForm") DepartmentForm departmentForm, Model model) { + final String UPDATE_COMPLETE = "更新しました。"; + + try { + Department department = new Department(departmentForm.getIdDepartment(), departmentForm.getNmDepartment()); + updateDepartment.update(department); + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(UPDATE_COMPLETE)); + return "forward:/selectDepartment"; + + } catch (Exception e) { + httpSession.invalidate(); + e.printStackTrace(); + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } +} \ No newline at end of file diff --git a/src/main/resources/templates/insertDepartmentInput.html b/src/main/resources/templates/insertDepartmentInput.html new file mode 100644 index 0000000..2571001 --- /dev/null +++ b/src/main/resources/templates/insertDepartmentInput.html @@ -0,0 +1,10 @@ + + + + +Insert title here + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/menu.html b/src/main/resources/templates/menu.html index 6d0ee4a..743a0f4 100644 --- a/src/main/resources/templates/menu.html +++ b/src/main/resources/templates/menu.html @@ -3,115 +3,129 @@ - - - - - - - メニュー + + + + + + + メニュー -

- メインメニュー    -
- ログイン者名: - -
-

- - - - - +

+ メインメニュー    +
+ ログイン者名: + +
+

+ + + + + - - - - + + + + + + + + + - + + + 部署登録 + + 新規で部署追加を行います。 + + + + \ No newline at end of file diff --git a/src/main/resources/templates/selectDepartment.html b/src/main/resources/templates/selectDepartment.html index 339a7eb..c523fea 100644 --- a/src/main/resources/templates/selectDepartment.html +++ b/src/main/resources/templates/selectDepartment.html @@ -1,78 +1,118 @@ + - - - - - 部署検索 + + + + + 部署検索 + -

- 部署検索条件入力 -
- ログイン者名: - -
-

+

部署検索条件入力 +
+ ログイン者名: + +
+

-
- - - - - - - - - - - - - -
部署ID - -
部署名 - -
- - - -
-
+
+ + + + + + + + + + + + + +
部署ID + +
部署名 + +
+ + + +
+
-
-メニューに戻る -
-

検索結果

-
+
+ メニューに戻る +
+

検索結果

+
- - - - - - - - - - - - - - -
部署ID部署名
-
+ + + + + + + + + + + + + + + + +
部署ID部署名操作
+ + +
+
- - 検索結果はありません。 - + + 検索結果はありません。 + - + + \ No newline at end of file diff --git a/src/main/resources/templates/updateDepartmentInput.html b/src/main/resources/templates/updateDepartmentInput.html new file mode 100644 index 0000000..e708568 --- /dev/null +++ b/src/main/resources/templates/updateDepartmentInput.html @@ -0,0 +1,85 @@ + + + + + + + + + + + 部署情報更新 + + + +

+ 部署情報更新 +
+ ログイン者名: + +
+

+
+
+ +
+ + + + + + + + + + + + +
部署ID + +
部署名 + +
+ +
+
+一覧に戻る + + + + \ No newline at end of file