Kim VamPa

[Spring][쇼핑몰 프로젝트][23] 작가 정보 삭제 구현 본문

스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][23] 작가 정보 삭제 구현

Kim VamPa 2021. 4. 30. 10:52
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

목표

작가 정보 삭제 구현

 '작가 수정 페이지'에서 '삭제' 버튼을 추가하여 클릭 시 해당 상품 정보의 삭제를 수행하는 기능 구현을 목표로 합니다.

 

 

 

순서

1. Mapper

2. Service

3. Controller

4. View 처리

 

 

 

1.  Mapper

AuthorMapper.java

 

 상품 정보 삭제 쿼리를 수행하는 메서드를 AuthorMapper.java 인터페이스에 추가합니다.

 

	/* 작가 정보 삭제 */
	public int authorDelete(int authorId);

 

그림 1-1

 

 

 

 

AuthorMapper.xml

 

 앞서 선언한 메서드가 실행해야 할 태그와 쿼리문을 작성합니다.

 

  	<!-- 작가 정보 삭제 -->
  	<delete id="authorDelete">
  	
  		delete from vam_author where authorId = #{authorId}
  	
  	</delete>

 

 

 

 

 

AuthorMapperTests.java

 

 작성한 Mapper 메서드가 정상적으로 동작하는지 Junit 테스트합니다.

 

	/* 작가 정보 삭제 */
	@Test
	public void authorDeleteTest() {
		
		
		int authorId = 44;
		
		int result = mapper.authorDelete(authorId);
		
		if(result == 1) {
			System.out.println("삭제 성공");
		}
		
	}

 

그림 1-3

 

그림 1-4

 

 

 

 

2. Service

AuthorService.java

 

 삭제 Mappper 메서드를 호출하는 Service 메서드를 작성하겠습니다. AuthorService.java에 아래의 메서드 선언부를 추가합니다.

 

	/* 작가 정보 삭제 */
	public int authorDelete(int authorId);

 

그림 2-1

 

 

 

AuthorServiceImpl.java

 

 오버라이딩 하여 앞서 선언한 메서드의 구현부를 작성합니다.

 

	/* 작가 정보 삭제 */
	@Override
	public int authorDelete(int authorId) {
		
		log.info("authorDelete..........");
		
		return authorMapper.authorDelete(authorId);
	}

 

그림 2-2

 

 

 

3. Controller

 AdminController.java에 상품 정보 삭제 기능을 수행하는 url 매핑 메서드를 작성합니다.

 

 앞의 포스팅의 Controller와는 다르게 신경 써줘야 할 부분이 있습니다. 우리가 삭제하고자 하는 데이터는 작가 테이블(vam_author)의 데이터입니다. 문제는 외래 키 조건으로 인해 작가 테이블을 참조(reference) 하고 있는  상품 테이블(vam_book)이 있다는 점입니다. 참조되지 않고 있는 행을 지운다면 문제가 없지만 만약 참조되고 있는 행을 지우려고 시도를 한다면 '무결성 제약 조건을 위반' 한다는 경고와 함께 SQLIntegrityConstraintViolationException 예외가 발생합니다.

 

 따라서 try catch 문을 사용하여 참조되지 않는 행을 지울땐 삭제를 수행하고 '작가 목록' 페이지로 1을 전성하도록 하고, 예외가 발생한 상황에는 '작가 목록' 페이지로 2를 전송하도록 작성하였습니다. 

 

	/* 작가 정보 삭제 */
	@PostMapping("/authorDelete")
	public String authorDeletePOST(int authorId, RedirectAttributes rttr) {
		
		logger.info("authorDeletePOST..........");
		
		int result = 0;
		
		try {
			
			result = authorService.authorDelete(authorId);
			
		} catch (Exception e) {
			
			e.printStackTrace();
			result = 2;
			rttr.addFlashAttribute("delete_result", result);
			
			return "redirect:/admin/authorManage";
			
		}
		
		
		rttr.addFlashAttribute("delete_result", result);
		
		return "redirect:/admin/authorManage";
		
	}	

 

그림 3-1

 

 

 

4. View 처리

authorModify.jsp

 

 goodsModify.jsp 의 버튼이 모여있는 태그에 아래의 버튼 태그를 추가해줍니다.

 

<button id="deleteBtn" class="btn delete_btn">삭 제</button>

 

그림 4-1

 

 

 

 추가해준 버튼이 동작하도록 <script> 태그 내부에 아래의 Javascript코드를 추가합니다.

 

	/* 삭제 버튼 */
	$("#deleteBtn").on("click", function(e){
		e.preventDefault();
		moveForm.find("input").remove();
		moveForm.append('<input type="hidden" name="authorId" value="${authorInfo.authorId}">');
		moveForm.attr("action", "/admin/authorDelete");
		moveForm.attr("method", "post");
		moveForm.submit();
	});

 

그림 4-2

 

 

 

authorModify.css

 

 추가해준 버튼의 css 설정을 해주기 위해 authorModify.css 파일에 아래의 코드를 추가하였습니다.

 

.delete_btn{
	background-color: #efcdcd;
}
.delete_btn:hover{
	background-color : #e4a7a7;
}

 

그림 4-3

 

 

 

authorManage.jsp

 

 삭제 기능 수행 후 서버에서 전송받은 데이터에 따라 경고 문구가 출력되도록 <script> 코드의 doucment ready 메서드 내에 아래의 코드를 추가합니다. 서버로부터 1을 전달받았으면 정상적으로 삭제를 했다는 의미이기 때문에 '삭제 완료' 경고창을, 2를 전달받을 경우 실패하였다는 경고창이 뜨도록 작성을 하였습니다.

 

	/* 삭제 결과 경고창 */
	let delete_result = '${delete_result}';
	
	if(delete_result == 1){
		alert("삭제 완료");
	} else if(delete_result == 2){
		alert("해당 작가 데이터를 사용하고 있는 데이터가 있어서 삭제 할 수 없습니다.")
	}	

 

그림 4-4

 

 

 

 

테스트

 

 삭제 기능이 정상적으로 수행되는지, 작가 목록 페이지에서 상황에 따라 경고창이 정상적으로 출력되는지 확인합니다.

 

 

그림 5-1

 

그림 5-2

 

그림 5-3

 

 

 

REFERENCE

 

 

DATE

  • 2020.04.30
728x90
반응형
Comments