본문 바로가기
💻 뚝딱뚝딱/팀내도서대여시스템(OBRS)

[개발일지#007] 책 수정 / 삭제 기능 수정 및 구현

by 뚜루리 2024. 4. 8.
728x90
320x100
책 정보를 수정하는 기능을 수정하고, 책 삭제 기능을 추가한다!

 

[개발목표]

  1. 책정보 수정 기능 수정
  2. 책 삭제 기능 구현

 


1. 책 정보 수정 기능 수정

이미 대여중인 책은 책의 소유자가 책 상태 여부를 수정할 수 없다.

 

 

bookEditForm.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{common/layout}"
      layout:fragment="content">
<head>
    <title>책 정보 수정</title>
    <script th:src="@{/js/book/bookEditForm.js}"></script>
</head>
<body>
<div class="container" style="max-width: 800px">
    <div class="py-5 text-center" >
        <h2>책 정보 수정</h2>
    </div>
    <form action="member.html" th:action th:object="${book}" method="post">
       /// 생략 ///

        <label for="bookStateCode">상태</label>
        <span style="color: red; display: none;" id="bookStateSpan">* 대여 중인 책은 상태를 변경할 수 없습니다.</span>
        <select id="bookStateCode" class="form-control" th:field="*{bookStateCode}">
            <option th:each="bookStateCode : ${bookStateCodes}" th:value="${bookStateCode.bookStateCode}" th:text="${bookStateCode.bookStateCodeName}"></option>
        </select>
       
       /// 생략 ///
        </div>
        <hr class="my-4">
        <div class="row">
            <div class="col">
                <button class="w-100 btn btn-primary btn-lg" type="submit">저장
                </button>
            </div>
            <div class="col">
                <button class="w-100 btn btn-secondary btn-lg" onclick="location.href='member.html'"
                        th:onclick="|location.href='@{/book/{bookId}(bookId=${book.bookId})}'|" type="button">취소</button>
            </div>
        </div>
    </form>
</div> <!-- /container -->
</body>
</html>

 

bookEditForm.js

function bookStateEditYn(){
    let selectedValue = document.getElementById("bookStateCode").value;
    if (selectedValue == 'UNABLE'){
        document.getElementById("bookStateCode").disabled = 'true';
        document.getElementById('bookStateSpan').style.display = 'block';
    }
}

document.addEventListener('DOMContentLoaded', function (){
    bookStateEditYn();
})
  • 책 상태가 대여 불가능일 때는 이미 대여중인 상태기 때문에 아무리 소유자라고 해도 책 상태를 수정할 수 없게끔 스크립트 작성. 

 

 


2. 책 삭제 기능 구현

책을 소유한 자가 등록한 책을 삭제하고 싶을 수도 있다. 다만 대여중일 때는 삭제가 불가능하다. 

bookMapper.xml

    <update id="deleteBook" parameterType="java.lang.String">
        UPDATE BOOK
          SET USE_AT = 'N'
        WHERE BOOK_ID =#{bookId}
    </update>

 

bookMapper.java

    void deleteBook(@Param("bookId") String bookId);

 

bookService, bookServiceImpl.java

 void deleteBook (String bookId);
    @Override
    public void deleteBook(String bookId) {
        bookMapper.deleteBook(bookId);
    }

 

bookController.java

    /**
     * 책 삭제 (논리삭제)
     * @param bookId
     * @return
     */
    @PostMapping("/{bookId}/deleteBook")
    public ResponseEntity<String> deleteBook (@PathVariable String bookId){
        bookService.deleteBook(bookId);
        return ResponseEntity.ok("삭제 완료");
    }

 

 

book.js


function deleteBtn(){
    let bookId = document.getElementById("bookId").value;
    let bookStateCode = document.getElementById("bookStateCode").value;

    if(bookStateCode == '대여불가능'){
        alert("대여중 일 때는 삭제가 불가능합니다.");
        return;
    }

    if (confirm("책을 삭제하시겠습니까?")){
        fetch("/book/" + bookId + "/deleteBook", {
            method : "POST"
        })
            .then(response => {
                if (response.ok){
                    alert("삭제가 완료되었습니다.");
                    window.location.href = "/book";
                } else {
                    console.log("삭제 실패");
                }
            })
            .catch(error => {console.error("Error : ", error)})
    }
}
document.addEventListener('DOMContentLoaded', function (){

    let deleteButton = document.getElementById("deleteBtn");

    if (deleteButton) {
        document.getElementById("deleteBtn").addEventListener('click', deleteBtn);
    }

})

 

  • 책 삭제 기능은 논리 삭제로 삭제 기능을 구현하였다. 
  • 책 삭제 버트는 보이게 해놨지만, 대여중일 때는 삭제할 수 없게끔 구현했다. 
728x90
320x100