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..3c6ce34 --- /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); +} 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..fdbcd8e --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java @@ -0,0 +1,32 @@ +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; + +/** + * Department レコード削除関連の機能を持つサービス + */ +@Service +@Transactional +public class DeleteDepartmentImpl implements DeleteDepartment { + + DepartmentRepository departmentRepository; + + @Autowired + public DeleteDepartmentImpl(DepartmentRepository departmentRepository) { + this.departmentRepository = departmentRepository; + } + + /** + * idDepartment を元に department データを削除 + * + * @param idDepartment 削除対象のidDepartmnet + */ + public void deleteDepartment(Integer idDepartment) { + departmentRepository.deleteById(idDepartment); + } +} 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..480b395 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java @@ -0,0 +1,120 @@ +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.DepartmentForm; +import com.example.rhizome.app.presentation.form.MessageForm; + +/** + * 削除処理のコントロータ + */ +@Controller +public class DeleteDepartmentController { + // ログ出力用インスタンス + private final static Logger LOGGER = Logger.getLogger(DeleteEmployeeController.class.getName()); + + // エラーメッセージ用の定数フィールド + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + HttpSession httpSession; + DeleteDepartment deleteDepartment; + SearchDepartment searchDepartment; + SearchEmployee searchEmployee; // 所属社員の確認に使う(既存) + + @Autowired + public DeleteDepartmentController(DeleteDepartment deleteDepartment, SearchDepartment searchDepartment, + HttpSession httpSession, SearchEmployee searchEmployee) { + this.httpSession = httpSession; + this.deleteDepartment = deleteDepartment; + this.searchDepartment = searchDepartment; + this.searchEmployee = searchEmployee; + } + + /** + * 削除処理のコントローラ + * + * @param idDepartment 削除対象のdepartmentId + * @param model ビューにデータを渡すためのコンテナ + * @return 遷移先の画面 + */ + + @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が不明です。"; + + try { + // 部署一覧を取得し、画面に返す用のクラスに詰め替える + // 作成した部署一覧をセット + model.addAttribute( + PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, + DepartmentForm.convertFrom(searchDepartment.selectAll())); + + if (idDepartment == null + || searchDepartment.searchBy(new SearchConditionDepartment(idDepartment, null)) == null) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UNKNOWN_ID)); + } + + // 削除処理実施 + deleteExec(model, idDepartment); + + // 検索画面に遷移 + return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_FORM_EMPTY; + + } catch (Exception e) { + // ログイン情報の破棄 + httpSession.invalidate(); + e.printStackTrace(); + // エラーログ出力 + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + // エラー画面遷移 + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } + + /** + * 削除処理実施 + * + * @param model ビューにデータを渡すためのコンテナ + * @param idEmployee 削除対象のDepartmentId + */ + private void deleteExec(Model model, Integer idDepartment) { + + final String DELETE_DPARTMENT_TARGET_ID_CAN_NOT_DELETE = "1名以上が所属している部署は削除出来ません。"; + final String DELETE_COMPLETE = "削除しました。"; + + // 削除対象部署が1名以上所属しているかチェック + if (!searchEmployee.searchEmployeeByIdDepartment(idDepartment).isEmpty()) { + // 削除対象だった場合 + // エラーメッセージをセット + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, + new MessageForm(DELETE_DPARTMENT_TARGET_ID_CAN_NOT_DELETE)); + // 検索画面に遷移 + return; + } + + // 削除を実施 + deleteDepartment.deleteDepartment(idDepartment); + + // 削除完了したメッセージをセット + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE)); + + } +} diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/DeleteEmployeeController.java b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteEmployeeController.java index 07982f7..5b3edf4 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/DeleteEmployeeController.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteEmployeeController.java @@ -1,6 +1,21 @@ package com.example.rhizome.app.presentation.controller; +import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; + +import java.util.Objects; +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.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.app.domain.model.LoginUser; @@ -12,22 +27,9 @@ import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTa import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.LoginUserForm; import com.example.rhizome.app.presentation.form.MessageForm; -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 javax.servlet.http.HttpSession; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; - -import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.DELETE_EMPLOYEE; /** - * 削除処理のコントロータ + * 削除処理のコントローラ */ @Controller public class DeleteEmployeeController { 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 c5c39f5..333ebbb 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 @@ -106,11 +106,11 @@ public class SelectDepartmentController { DepartmentForm.convertFrom(searchDepartment.selectAll())); // 検索条件を元に検索を実施 -// model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, -// DepartmentForm.convertFrom( -// searchDepartment.searchBy( -// SearchConditionDepartmentForm.convertTo(searchConditionDepartmentForm())))); - + // model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, + // DepartmentForm.convertFrom( + // searchDepartment.searchBy( + // SearchConditionDepartmentForm.convertTo(searchConditionDepartmentForm())))); + //部分一致検索 model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom( 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 7bd846a..d191c4b 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 @@ -56,6 +56,7 @@ public class TransitionTargetPageNameKeyword { public static final String SELECT_DEPARTMENT = "/selectDepartment"; public static final String SELECT_DEPARTMENT_FORM_EMPTY = "/selectAll2"; public static final String INSERT_DEPARTMENT_INPUT = "/insertDepartmentInput"; + public static final String DELETE_DEPARTMENT = "/deleteDepartment"; /** * 管理者向けのページリストを返す diff --git a/src/main/resources/templates/selectDepartment.html b/src/main/resources/templates/selectDepartment.html index fd242c6..f9519ea 100644 --- a/src/main/resources/templates/selectDepartment.html +++ b/src/main/resources/templates/selectDepartment.html @@ -57,6 +57,7 @@ alert([[${messageInfo.message}]]); +