chessta0126 / festivalBooking

0 stars 0 forks source link

book - 예매 관련 #7

Open chessta0126 opened 1 year ago

chessta0126 commented 1 year ago

BookRestController

예매 내역 추가

BookBO

예매 내역 객체 형태로 보내기(insert)

BookDAO

chessta0126 commented 1 year ago

boolean 값이 AJAX로 넘어갈 때 String으로 변환되어, 타입 에러가 발생하는 문제

isTimeOver (예매 중 / 만료) 값이 파라미터로 보내질 때 @ModelAttribute에 의해 객체 형태로 맞춰지는데,

객체에서는 boolean으로 되어있지만 AJAX가 전송할 때 true는 'true'로, String 형태로 간다. -> DB에서 설정한 타입과 다르므로 매치가 안 된다.

if(isMember){ isMember = 1; } else{ isMember = 0; }


-> 이것도 결국 String으로 보내지므로, 적용이 안 된다. 
**따라서 MultipartFile 처리할 때처럼, @ModelAttribute 이외에도 따로 String 형태로 보내어 boolean으로 변환 후 setting한다.**

// String 형태의 isTimeOver >> boolean으로 setting boolean isTimeOverBoolean = false; if(isTimeOver.equals("true")) { isTimeOverBoolean = true; } festival.setTimeOver(isTimeOverBoolean);

chessta0126 commented 1 year ago

예약자 수 / 명단을 볼 수 있게 해야 함

chessta0126 commented 1 year ago

script 내 예매 정보 변수 선언

chessta0126 commented 1 year ago

script에서 EL문법으로 받아올 경우, 값이 없을 때 script 전체가 먹통이 되는 현상

FestivalController에서 공연 상세 페이지에 예약 여부 model을 내려줄 때, 비로그인일 경우 session 자체가 없어 userId가 없으니 try-catch로 예외 처리했다.

// 예매 여부(회원 / 비회원)
// 비로그인 시 아예 session이 없으므로 에러-> 예외처리
try{ // 회원(로그인)
    int userId = (int)session.getAttribute("userId");
    boolean isBooked = bookBO.isBookedByUserIdFestivalId(userId, festivalId);
    model.addAttribute("isBooked",isBooked);

    BookView bookView = bookBO.generateBookViewByUserIdFestivalId(userId, festivalId);
    model.addAttribute("bookView",bookView);
}catch(Exception e){
    // 비회원(비로그인)일 때는 예매 완료 버튼은 띄우지 않는다(false)
    model.addAttribute("isBooked",false);           
}

로그인 상태(회원) -> 예약 여부 / 공연-예약 정보 묶음을 내려주고 비로그인 상태(비회원) -> 예매 완료 버튼을 띄우지는 않지만

를 쓰기 위해서는 값이 비면 안 되므로, false를 할당한다. * **동일 예매자 중복 insert 방지** 한 공연에 이미 예매한 사람이 여러 번 예매하게 되면 1. DB 공간을 쓸데없이 많이 차지 2. 한번에 보기 어려움(다른 행으로 처리되므로) -> 따라서 예매를 눌렀을 때 이미 예매 기록이 있으면, update로 넘어가게 한다. 기존 예매 정보${bookView}를 EL문법으로 받아와서 예매 매수를 추가하고 AJAX로 전송하여 DB update를 한다. * **기존 예매 내역이 없으면 ${bookView}가 없어 script 작동이 멈춤** -> **따옴표 ""로 EL문법을 감싸면 된다.** ``` let alreadyHeadCount = "${bookView.book.headCount}"; ``` -> 값이 있을 경우 : "${bookView.book.headCount}" / 없을 경우 : " "가 된다. https://goldswan.tistory.com/8
chessta0126 commented 1 year ago
chessta0126 commented 1 year ago

예매 완료 시 버튼 내용 변경 (예매하기 -> 추가 예매)

if(${isBooked}){
    let memberBookingBtn = document.getElementById("memberBookingBtn");
    memberBookingBtn.innerText = "추가 예매";
}
chessta0126 commented 1 year ago

포스터와 공연 정보 여백을 맞추기 위한 공백 추가

<h3 class="bold">&nbsp;</h3>
chessta0126 commented 1 year ago

기간 내 예매 내역

-> startDate, endDate를 비필수 파라미터(쿼리스트링)로 받아서, 파라미터가 존재할 경우에만 조건에 맞는 myBookingList로 오버라이딩

if(!ObjectUtils.isEmpty(startDate) && !ObjectUtils.isEmpty(endDate)) {
    myBookingList = festivalBO.generateBookViewListByLimit(startDate, endDate, userId);
}

-> 하지만 공연 등록 및 검색에 제한을 두는 것은

  1. 사용자 자유도를 너무 제한하는 서비스가 되는 것 같고
  2. 한 달은 기한이 너무 짧아서

-> maxDate : 31 을 제거했다. $('#endDate').datepicker({ }); 까지 제거하면 datepicker가 작동을 안 하므로, 이건 살려두었다.