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..3a80a81 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/DeleteDepartment.java @@ -0,0 +1,5 @@ +package com.example.rhizome.app.domain.service; + +public interface DeleteDepartment { + void deleteDepartment(Integer idDepartment); +} \ 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..a0b1357 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java @@ -0,0 +1,27 @@ +package com.example.rhizome.app.domain.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.rhizome.app.domain.service.DeleteDepartment; +import com.example.rhizome.app.infra.repository.DepartmentRepository; + +//@Srviceをつけ忘れるとControllerで使うときに起動時エラーになってしまう +@Service +@Transactional +public class DeleteDepartmentImpl implements DeleteDepartment { + + DepartmentRepository departmentRepository; + + @Autowired + public DeleteDepartmentImpl(DepartmentRepository departmentRepository) { + this.departmentRepository = departmentRepository; + } + + public void deleteDepartment(Integer idDepartment) { + // ★考える:Repository のどのメソッドで「IDを指定して削除」できる? + // (お手本の DeleteEmployeeImpl を見る) + departmentRepository.deleteById(idDepartment); + } +} \ 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..86d89f8 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java @@ -0,0 +1,79 @@ +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.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.example.rhizome.app.domain.model.SearchConditionDepartment; +import com.example.rhizome.app.domain.service.DeleteDepartment; +import com.example.rhizome.app.domain.service.SearchDepartment; +import com.example.rhizome.app.domain.service.SearchEmployee; +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 { + + private final static Logger LOGGER = Logger.getLogger(DeleteDepartmentController.class.getName()); + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + HttpSession httpSession; + DeleteDepartment deleteDepartment; + SearchDepartment searchDepartment; + SearchEmployee searchEmployee; // 所属社員の確認に使う(既存) + + @Autowired + public DeleteDepartmentController(HttpSession httpSession, DeleteDepartment deleteDepartment, + SearchDepartment searchDepartment, SearchEmployee searchEmployee) { + this.httpSession = httpSession; + this.deleteDepartment = deleteDepartment; + this.searchDepartment = searchDepartment; + this.searchEmployee = searchEmployee; + } + + @RequestMapping(value = TransitionTargetPageNameKeyword.DELETE_DEPARTMENT, method = RequestMethod.POST) + public String deleteDepartment(@RequestParam(value = "idDepartment", required = false) Integer idDepartment, + Model model) { + + final String UNKNOWN_ID = "削除対象のIDが不明です。"; + final String HAS_EMPLOYEE = "1名以上が所属している部署は削除出来ません。"; + final String DELETE_COMPLETE = "削除しました。"; + + try { + // ★① idDepartment が null、または searchDepartment.searchBy(new SearchConditionDepartment(idDepartment, null)) が空 + // → MESSAGE_ERROR に UNKNOWN_ID を載せて一覧へ + if (idDepartment == null + || searchDepartment.searchBy(new SearchConditionDepartment(idDepartment, null)).isEmpty()) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UNKNOWN_ID)); + return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; + } + // ★② searchEmployee.searchEmployeeByIdDepartment(idDepartment) が空でない + // → MESSAGE_ERROR に HAS_EMPLOYEE を載せて一覧へ + if (!searchEmployee.searchEmployeeByIdDepartment(idDepartment).isEmpty()) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UNKNOWN_ID)); + return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; + } + // ★③ deleteDepartment.deleteDepartment(idDepartment) → MESSAGE_INFO に DELETE_COMPLETE を載せて一覧へ + deleteDepartment.deleteDepartment(idDepartment); + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UNKNOWN_ID)); + + //以下がメッセージの載せ方 + //model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UNKNOWN_ID)); + return "一覧へ戻る(ステップ 2-5 で決める)"; + } catch (Exception e) { + httpSession.invalidate(); + e.printStackTrace(); + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } +} 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 effc20b..63bef84 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 @@ -62,4 +62,18 @@ public class SelectDepartmentController { return TransitionTargetPageNameKeyword.ERROR_HTML; } } + + @RequestMapping(value = TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_FORM_EMPTY, method = RequestMethod.POST) + public String select(Model model) { + try { + // ★全件取得 → DepartmentForm に変換 → DEPARTMENT_FORM_LIST で model へ + return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; + } 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/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java index 68eae5d..014702c 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java @@ -50,6 +50,8 @@ public class TransitionTargetPageNameKeyword { public static final String SELECT_DEPARTMENT_HTML = "selectDepartment"; // Controller public static final String SELECT_DEPARTMENT = "/selectDepartment"; + public static final String DELETE_DEPARTMENT = "/deleteDepartment"; + public static final String SELECT_DEPARTMENT_FORM_EMPTY = "/selectDepartmentAll"; /** * 管理者向けのページリストを返す