diff --git a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java index ce416f9..985411d 100644 --- a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java +++ b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java @@ -1,16 +1,17 @@ package com.example.rhizome.aop.aspect; -import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; -import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; -import com.example.rhizome.app.presentation.form.LoginUserForm; -import com.example.rhizome.exception.InsufficientPermissionException; +import javax.servlet.http.HttpServletRequest; + import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; +import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.LoginUserForm; +import com.example.rhizome.exception.InsufficientPermissionException; /** * 権限チェック用のAOP @@ -19,96 +20,95 @@ import javax.servlet.http.HttpServletRequest; @Component public class PermissionCheckAspect { - HttpServletRequest request; + HttpServletRequest request; - @Autowired - public PermissionCheckAspect(HttpServletRequest request) { - this.request = request; - } + @Autowired + public PermissionCheckAspect(HttpServletRequest request) { + this.request = request; + } - // Aspectのフックを定義(今回はPermissionCheckアノテーションが定義されているメソッドが動作するタイミング) - @Pointcut("@annotation(com.example.rhizome.aop.aspect.PermissionCheck)") - public void permissionCheckMethod() { - } + // Aspectのフックを定義(今回はPermissionCheckアノテーションが定義されているメソッドが動作するタイミング) + @Pointcut("@annotation(com.example.rhizome.aop.aspect.PermissionCheck)") + public void permissionCheckMethod() { + } - /** - * 権限チェック - */ - @Before("permissionCheckMethod()") - public void checkPermission() { - // ログインユーザの取得 - LoginUserForm loginUserForm = (LoginUserForm) request.getSession().getAttribute(SessionKeyword.LOGIN_USER); + /** + * 権限チェック + */ + @Before("permissionCheckMethod()") + public void checkPermission() { + // ログインユーザの取得 + LoginUserForm loginUserForm = (LoginUserForm) request.getSession().getAttribute(SessionKeyword.LOGIN_USER); - // ログインユーザが取得できない場合、または権限がない場合はエラー画面に遷移 - if (loginUserForm == null || !hasRequiredPermission(request.getRequestURI(), loginUserForm)) { - throw new InsufficientPermissionException("不正な遷移です"); - } + // ログインユーザが取得できない場合、または権限がない場合はエラー画面に遷移 + if (loginUserForm == null || !hasRequiredPermission(request.getRequestURI(), loginUserForm)) { + throw new InsufficientPermissionException("不正な遷移です"); + } - } + } - /** - * 遷移先のURLとログインユーザの権限から、遷移可否を判定する - * - * @param targetURL 遷移したいURL - * @param loginUserForm リクエスト元のユーザ - * @return true:遷移可 false:遷移不可 - */ - private boolean hasRequiredPermission(String targetURL, LoginUserForm loginUserForm) { + /** + * 遷移先のURLとログインユーザの権限から、遷移可否を判定する + * + * @param targetURL 遷移したいURL + * @param loginUserForm リクエスト元のユーザ + * @return true:遷移可 false:遷移不可 + */ + private boolean hasRequiredPermission(String targetURL, LoginUserForm loginUserForm) { - // 管理者権限 - if (isAdminTransition(targetURL, loginUserForm)) { - return true; - } + // 管理者権限 + if (isAdminTransition(targetURL, loginUserForm)) { + return true; + } - // 一般権限 - if (isUserTransition(targetURL, loginUserForm)) { - return true; - } + // 一般権限 + if (isUserTransition(targetURL, loginUserForm)) { + return true; + } - // アクセス不許可の場合の処理(不正アクセス画面に遷移) - return false; + // アクセス不許可の場合の処理(不正アクセス画面に遷移) + return false; - } + } - /** - * 管理者用のアカウントで管理者向けのページアクセスか - * - * @param targetURL 遷移したいURL - * @param loginUserForm リクエスト元のユーザ - * @return true:遷移可 false:遷移不可 - */ - private boolean isAdminTransition(String targetURL, LoginUserForm loginUserForm) { + /** + * 管理者用のアカウントで管理者向けのページアクセスか + * + * @param targetURL 遷移したいURL + * @param loginUserForm リクエスト元のユーザ + * @return true:遷移可 false:遷移不可 + */ + private boolean isAdminTransition(String targetURL, LoginUserForm loginUserForm) { - // 管理者か - if (!loginUserForm.isAdminUser()) { - return false; - } + // 管理者か + if (!loginUserForm.isAdminUser()) { + return false; + } - // 管理者向けのページ遷移か - if (!TransitionTargetPageNameKeyword.getAdminPageList().contains(targetURL)) { - return false; - } + // 管理者向けのページ遷移か + if (!TransitionTargetPageNameKeyword.getAdminPageList().contains(targetURL)) { + return false; + } - return true; - } + return true; + } - /** - * 一般ユーザ用のアカウントで一般ユーザ向けのページアクセスか - * - * @param targetURL 遷移したいURL - * @param loginUserForm リクエスト元のユーザ - * @return true:遷移可 false:遷移不可 - */ - private boolean isUserTransition(String targetURL, LoginUserForm loginUserForm) { + /** + * 一般ユーザ用のアカウントで一般ユーザ向けのページアクセスか + * + * @param targetURL 遷移したいURL + * @param loginUserForm リクエスト元のユーザ + * @return true:遷移可 false:遷移不可 + */ + private boolean isUserTransition(String targetURL, LoginUserForm loginUserForm) { - // 管理者か - if (loginUserForm.isAdminUser()) { - return false; - } + // 管理者か + if (loginUserForm.isAdminUser()) { + return false; + } - // 一般ユーザ向けのページ遷移か - return TransitionTargetPageNameKeyword.getUserPageList().contains(targetURL); + // 一般ユーザ向けのページ遷移か + return TransitionTargetPageNameKeyword.getUserPageList().contains(targetURL); - } + } } - 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..e075b30 --- /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 deleteDepartment(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..88ddd50 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,18 @@ package com.example.rhizome.app.domain.service; +import java.util.List; +import java.util.Optional; + 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); + + Optional searchDepartmentByIdDepartment(Integer idDepartment); - List searchByWithLike(SearchConditionDepartment searchConditionDepartment); } 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..dd1e8d1 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java @@ -0,0 +1,33 @@ +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; + +/** + * Employee レコード削除関連の機能を持つサービス + */ +@Service +@Transactional +public class DeleteDepartmentImpl implements DeleteDepartment { + + DepartmentRepository departmentRepository; + + @Autowired + public DeleteDepartmentImpl(DepartmentRepository departmentRepository) { + this.departmentRepository = departmentRepository; + } + + /** + * idEmployee を元に employee データを削除 + * + * @param idEmployee 削除対象のidEmployee + */ + public void deleteDepartment(Integer idDepartment) { + departmentRepository.deleteById(idDepartment); + } + +} 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..8bf9d6a 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 java.util.Optional; + +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; /** * 部署情報検索系の機能を集約させるサービスクラスです。 @@ -20,63 +21,67 @@ import java.util.List; @Transactional public class SearchDepartmentImpl implements SearchDepartment { - DepartmentRepository departmentRepository; + DepartmentRepository departmentRepository; - /** - * コンストラクタ - * - * @param departmentRepository DI対象 - */ - @Autowired - public SearchDepartmentImpl(DepartmentRepository departmentRepository) { - this.departmentRepository = departmentRepository; - } + /** + * コンストラクタ + * + * @param departmentRepository DI対象 + */ + @Autowired + public SearchDepartmentImpl(DepartmentRepository departmentRepository) { + this.departmentRepository = departmentRepository; + } - /** - * 部署情報を全件取得する - * - * @return 取得した部署情報レコード全件 - */ - public List selectAll() { - return DepartmentEntity.createDepartmentList(departmentRepository.findAll()); - } + /** + * 部署情報を全件取得する + * + * @return 取得した部署情報レコード全件 + */ + public List selectAll() { + return DepartmentEntity.createDepartmentList(departmentRepository.findAll()); + } - /** - * searchConditionDepartment の情報を元に Department のレコードを取得 - * - * @param searchConditionDepartment 検索条件 - * @return 検索結果のレコード - */ - public List searchBy(SearchConditionDepartment searchConditionDepartment) { - // 動的に検索条件を絞り込む - // Specification は Criteria API の Predicate をラップしたもの - return DepartmentEntity - .createDepartmentList( - departmentRepository.findAll(Specification - .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment())) - .and(DepartmentRepository.nmDepartmentEqual(searchConditionDepartment.getNmDepartment())) - ) - ); + /** + * searchConditionDepartment の情報を元に Department のレコードを取得 + * + * @param searchConditionDepartment 検索条件 + * @return 検索結果のレコード + */ + public List searchBy(SearchConditionDepartment searchConditionDepartment) { + // 動的に検索条件を絞り込む + // Specification は Criteria API の Predicate をラップしたもの + return DepartmentEntity + .createDepartmentList( + departmentRepository.findAll(Specification + .where(DepartmentRepository + .idDepartmentEqual(searchConditionDepartment.getIdDepartment())) + .and(DepartmentRepository + .nmDepartmentEqual(searchConditionDepartment.getNmDepartment())))); - } + } - /** - * searchConditionDepartment の情報を元に Department のレコードを取得 - * 部分一致検索 - * - * @param searchConditionDepartment 検索条件 - * @return 検索結果のレコード - */ - public List searchByWithLike(SearchConditionDepartment searchConditionDepartment) { - // 動的に検索条件を絞り込む - // Specification は Criteria API の Predicate をラップしたもの - return DepartmentEntity - .createDepartmentList( - departmentRepository.findAll(Specification - .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment())) - .and(DepartmentRepository.nmDepartmentLike(searchConditionDepartment.getNmDepartment())) - ) - ); + /** + * searchConditionDepartment の情報を元に Department のレコードを取得 + * 部分一致検索 + * + * @param searchConditionDepartment 検索条件 + * @return 検索結果のレコード + */ + public List searchByWithLike(SearchConditionDepartment searchConditionDepartment) { + // 動的に検索条件を絞り込む + // Specification は Criteria API の Predicate をラップしたもの + return DepartmentEntity + .createDepartmentList( + departmentRepository.findAll(Specification + .where(DepartmentRepository + .idDepartmentEqual(searchConditionDepartment.getIdDepartment())) + .and(DepartmentRepository + .nmDepartmentLike(searchConditionDepartment.getNmDepartment())))); - } + } + + public Optional searchDepartmentByIdDepartment(Integer idDepartment) { + return DepartmentEntity.createDepartmentList(departmentRepository.findById(idDepartment)); + } } diff --git a/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java b/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java index fc043e1..18c6923 100644 --- a/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java +++ b/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java @@ -6,15 +6,22 @@ */ package com.example.rhizome.app.infra.entity; +import java.util.List; +import java.util.Optional; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; import com.example.rhizome.app.domain.model.Department; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.*; -import java.util.List; - /** * Department テーブルの Entity * @@ -27,46 +34,52 @@ import java.util.List; @AllArgsConstructor public class DepartmentEntity { - /** - * 部署ID - */ - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id_department", nullable = false) - private Integer idDepartment; - /** - * 部署名 - */ - @Column(name = "nm_department", nullable = false) - private String nmDepartment; + /** + * 部署ID + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id_department", nullable = false) + private Integer idDepartment; + /** + * 部署名 + */ + @Column(name = "nm_department", nullable = false) + private String nmDepartment; - /** - * DepartmentEntity(DataAccess層依存)から Department(BusinessLogic層依存型)に変換します。 - * - * @param departmentEntityList department Table のリスト - * @return List リスト - */ - public static List createDepartmentList(List departmentEntityList) { + /** + * DepartmentEntity(DataAccess層依存)から Department(BusinessLogic層依存型)に変換します。 + * + * @param departmentEntityList department Table のリスト + * @return List リスト + */ + public static List createDepartmentList(List departmentEntityList) { - // Stream API を利用するとこうなります。 - return departmentEntityList - .stream() - .map(departmentEntity -> new Department( - departmentEntity.getIdDepartment(), - departmentEntity.getNmDepartment() - )).toList(); - } + // Stream API を利用するとこうなります。 + return departmentEntityList + .stream() + .map(departmentEntity -> new Department( + departmentEntity.getIdDepartment(), + departmentEntity.getNmDepartment())) + .toList(); + } + + /** + * Department(BusinessLogic層依存型) から DepartmentEntity(DataAccess層依存)に変換します。 + * + * @param department department モデルの値 + * @return DepartmentEntity に変換したインスタンス + */ + public static DepartmentEntity convertFrom(Department department) { + return new DepartmentEntity( + department.getIdDepartment(), + department.getNmDepartment()); + } + + public static Optional createDepartmentList(Optional departmentEntityList) { + + return departmentEntityList.map(departmentEntity -> new Department(departmentEntity.getIdDepartment(), + departmentEntity.getNmDepartment())); + } - /** - * Department(BusinessLogic層依存型) から DepartmentEntity(DataAccess層依存)に変換します。 - * - * @param department department モデルの値 - * @return DepartmentEntity に変換したインスタンス - */ - public static DepartmentEntity convertFrom(Department department) { - return new DepartmentEntity( - department.getIdDepartment(), - department.getNmDepartment() - ); - } } diff --git a/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java b/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java index cdb8877..49af35d 100644 --- a/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java +++ b/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java @@ -1,11 +1,11 @@ package com.example.rhizome.app.infra.repository; -import com.example.rhizome.app.infra.entity.DepartmentEntity; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; +import com.example.rhizome.app.infra.entity.DepartmentEntity; /** * Specification: @@ -20,31 +20,32 @@ import org.springframework.stereotype.Repository; * 戻り値はクエリを格納しているPredicateオブジェクトとなります。 */ @Repository -public interface DepartmentRepository extends JpaRepository, JpaSpecificationExecutor { +public interface DepartmentRepository + extends JpaRepository, JpaSpecificationExecutor { + static Specification idDepartmentEqual(Integer idDepartment) { + return idDepartment == null ? null : + // 戻り値の型 Specification にキャスト + (Specification) + // ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)" + // を作成している + (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idDepartment"), idDepartment); + } - static Specification idDepartmentEqual(Integer idDepartment) { - return idDepartment == null ? - null : - // 戻り値の型 Specification にキャスト - (Specification) - // ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)" - // を作成している - (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idDepartment"), idDepartment); - } + static Specification nmDepartmentEqual(String nmDepartment) { + return (nmDepartment == null || nmDepartment.isEmpty()) ? null + : (Specification) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder + .like(root.get("nmDepartment"), nmDepartment); + } - static Specification nmDepartmentEqual(String nmDepartment) { - return (nmDepartment == null || nmDepartment.isEmpty()) ? - null : - (Specification) - (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("nmDepartment"), nmDepartment); - } + static Specification nmDepartmentLike(String nmDepartment) { + return (nmDepartment == null || nmDepartment.isEmpty()) ? null + : (Specification) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder + .like(root.get("nmDepartment"), "%" + nmDepartment + "%"); + } + static void deleteBy(Integer id) { + + } - static Specification nmDepartmentLike(String nmDepartment) { - return (nmDepartment == null || nmDepartment.isEmpty()) ? - null : - (Specification) - (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("nmDepartment"), "%" + nmDepartment + "%"); - } } 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..48075e6 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java @@ -0,0 +1,125 @@ +package com.example.rhizome.app.presentation.controller; + +import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; + +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; +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.SessionKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.DepartmentForm; +import com.example.rhizome.app.presentation.form.LoginUserForm; +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(DeleteDepartment deleteDepartment, SearchDepartment searchDepartment, + HttpSession httpSession, SearchEmployee searchEmployee) { + this.httpSession = httpSession; + this.deleteDepartment = deleteDepartment; + this.searchDepartment = searchDepartment; + this.searchEmployee = searchEmployee; + } + + /** + * 削除処理のコントローラ + * + * @param idEmployee 削除対象のemployeeId + * @param model ビューにデータを渡すためのコンテナ + * @return 遷移先の画面 + */ + @PermissionCheck + @SessionCheck + @RequestMapping(value = DELETE_DEPARTMENT, method = RequestMethod.POST) + public String deleteDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) { + try { + // 部署一覧を取得し、画面に返す用のクラスに詰め替える + // 作成した部署一覧をセット + model.addAttribute( + PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, + DepartmentForm.convertFrom(searchDepartment.selectAll())); + + // 削除処理実施 + deleteExec( + model, + idDepartment, + LoginUserForm.convertTo((LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER))); + + // 検索画面に遷移 + return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_INFO_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 削除対象のemployeeId + * @param loginUser ログインユーザー情報 + */ + private void deleteExec(Model model, Integer idDepartment, LoginUser loginUser) { + + final String DELETE_COMPLETE = "削除しました。"; + final String ID_TO_DELETED_IS_UNKNOWN = "削除対象のIDが不明です。"; + final String YOU_CANNOT_DELETE_A_DEPARTMENT_THAT_HAS_ONE_OR_MORE_MEMBERS_ASSIGNED_TO_IT = "1名以上が所属している部署は削除出来ません。"; + + if (searchDepartment.searchDepartmentByIdDepartment(idDepartment).isEmpty()) { + // エラーメッセージをセット + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(ID_TO_DELETED_IS_UNKNOWN)); + return; + } + + if (!searchEmployee.searchEmployeeByIdDepartment(idDepartment).isEmpty()) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, + new MessageForm(YOU_CANNOT_DELETE_A_DEPARTMENT_THAT_HAS_ONE_OR_MORE_MEMBERS_ASSIGNED_TO_IT)); + 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/pageproperty/TransitionTargetPageNameKeyword.java b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java index a8bfb5d..bf65469 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 @@ -51,7 +51,7 @@ public class TransitionTargetPageNameKeyword { // Controller public static final String SELECT_DEPARTMENT_INFO = "/selectDepartmentInfo"; public static final String SELECT_DEPARTMENT_INFO_FORM_EMPTY = "/departmentAll"; - public static final String DELETE_DEPARTMENT = "a"; + public static final String DELETE_DEPARTMENT = "/deleteDepartment"; public static final String INSERT_DEPARTMENT_INPUT = "i"; public static final String INSERT_DEPARTMENT_CONFIRM = "u"; public static final String INSERT_DEPARTMENT = "e"; @@ -81,7 +81,8 @@ public class TransitionTargetPageNameKeyword { SHOW_UPDATE_EMPLOYEE, UPDATE_EMPLOYEE_RESULT, SELECT_DEPARTMENT_INFO, - SELECT_DEPARTMENT_INFO_FORM_EMPTY); + SELECT_DEPARTMENT_INFO_FORM_EMPTY, + DELETE_DEPARTMENT); } /**