[add] 部署削除機能を追加
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
package com.example.rhizome.app.domain.service;
|
||||
|
||||
public interface DeleteDepartment {
|
||||
void deleteDepartment(Integer idDepartment);
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
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;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class DeleteDepartmentImpl implements DeleteDepartment {
|
||||
|
||||
DepartmentRepository departmentReposirtory;
|
||||
|
||||
@Autowired
|
||||
public DeleteDepartmentImpl(DepartmentRepository departmentReposirtory) {
|
||||
this.departmentReposirtory = departmentReposirtory;
|
||||
}
|
||||
|
||||
/**
|
||||
* idDepartment を元に Department データを削除
|
||||
*
|
||||
* @param idDepartment 削除対象のidDepartment
|
||||
*/
|
||||
public void deleteDepartment(Integer idDepartment) {
|
||||
departmentReposirtory.deleteById(idDepartment);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
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.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(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, SearchEmployee searchEmployee, HttpSession httpSession) {
|
||||
this.httpSession = httpSession;
|
||||
this.deleteDepartment = deleteDepartment;
|
||||
this.searchDepartment = searchDepartment;
|
||||
this.searchEmployee = searchEmployee;
|
||||
}
|
||||
|
||||
/**
|
||||
* 削除処理のコントローラ
|
||||
*
|
||||
* @param idDepartment 削除対象のdepartmentId
|
||||
* @param model ビューにデータを渡すためのコンテナ
|
||||
* @return 遷移先の画面
|
||||
*/
|
||||
@PermissionCheck
|
||||
@SessionCheck
|
||||
@RequestMapping(value = DELETE_DEPARTMENT, method = RequestMethod.POST)
|
||||
public String deleteDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) {
|
||||
|
||||
try {
|
||||
|
||||
// 削除処理実施
|
||||
deleteExec(
|
||||
model,
|
||||
idDepartment);
|
||||
|
||||
// 検索画面に遷移
|
||||
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 idDepartment 削除対象のdepartmentId
|
||||
*/
|
||||
private void deleteExec(Model model, Integer idDepartment) {
|
||||
|
||||
final String DELETE_TARGET_ID_NOT_FIND = "削除対象のIDが不明です。";
|
||||
final String DELETE_TARGET_HAS_MEMBERS = "1名以上が所属している部署は削除できません。";
|
||||
final String DELETE_COMPLETE = "削除しました。";
|
||||
|
||||
// 削除対象の部署IDが存在するかチェック
|
||||
if (searchDepartment.searchDepartmentById(idDepartment)==null) {
|
||||
// 削除対象だった場合
|
||||
// エラーメッセージをセット
|
||||
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DELETE_TARGET_ID_NOT_FIND));
|
||||
// 検索画面に遷移
|
||||
return;
|
||||
}
|
||||
|
||||
// 削除対象の部署に所属している社員が1人以上いるか確認
|
||||
if (searchEmployee.searchEmployeeByIdDepartment(idDepartment).size() > 0) {
|
||||
// 削除対象だった場合
|
||||
// エラーメッセージをセット
|
||||
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DELETE_TARGET_HAS_MEMBERS));
|
||||
// 検索画面に遷移
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 削除を実施
|
||||
deleteDepartment.deleteDepartment(idDepartment);
|
||||
|
||||
// 削除完了したメッセージをセット
|
||||
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE));
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user