sehyeogi365 / ChoongMoTour

0 stars 0 forks source link

정렬모달 #38

Open sehyeogi365 opened 4 months ago

sehyeogi365 commented 4 months ago

@GetMapping("/main/view") public String mainPage(Model model, LodgingDetail lodgingDetail) {

    int id = lodgingDetail.getId();

    List<Lodging> lodgingList = lodgingBO.getLodgingList(id);
    model.addAttribute("lodgingList", lodgingList);

    return "admin/main";
}

이렇게 dto 선언후 adminId를 파라미터로 하는게 아닌 id로 숙소리스트 조회하게끔 변경

sehyeogi365 commented 4 months ago

정렬모달/필터모달 버튼

필터 정렬
sehyeogi365 commented 4 months ago

정렬모달/필터모달 모달창

sehyeogi365 commented 4 months ago

lodgingDTO에다가 가격, 평점 이런것도 추가해보기 댓글갯수라던가

sehyeogi365 commented 4 months ago

한마디로 그거랑 똑같다. 시스템 셀렉터로 무슨 시스템 조회할건지 선택하는거랑 다를게 없다. 매퍼에서도 if문 넣어서

그렇게 조회하고 조인하고 그렇게

sehyeogi365 commented 4 months ago

lodgingDTO 에다가 각 변수별로 게터세터 추가및 모달창도 꾸미는중이다. 그리고 숙소카드에 가격, 평점, 리뷰 갯수 이런것도 표시가 되어야 그렇게 정렬 모달 사용이 가능하다.

sehyeogi365 commented 4 months ago

거기다가 정렬 타입도 컨트롤러로 요청해야 하니 그렇게 dto에 추가해야할듯 싶다.

sehyeogi365 commented 4 months ago

로징비오에서 숙소리스트 반복문내 LodgingDetail lodgingDetail = new LodgingDetail(); 없애고 dto 파라미터로 선언시 왜 같은 숙소가 뜨는지 파악해보기

sehyeogi365 commented 4 months ago

일단 모달창에서 라디오 박스 선택후 적용 되었을시 요청이 되어야 함 거기부터 되게 해보기

sehyeogi365 commented 4 months ago

int userId = (Integer)session.getAttribute("userId"); //dibs detail 이랑 자꾸 헷갈려서 그런듯.

    String sortType = lodgingDetail.getSortType();

컨트롤러서부터 sortType이 안들어온다는것은

js딴에 문제가 있다는 뜻

sehyeogi365 commented 4 months ago

bo, dao, mapper를 각각 생성했다.

그런데 starpoint만 널이 뜨는데 예외처리도 안되는 상황..

for(LodgingDetail lodging:lodgingList) {

        //숙소카드 한장에 유저정보가 들어갈일은 없다.

        boolean isDibs = dibsCheckBO.isDibs(userId, lodging.getId());
        //이거와 관련된 비오 하나를 차라리 더 팔것.
        //댓글갯수,평점,가격, 정렬 방식 비오를 파기,
        //int commentCount = //댓글 갯수
        int price = lodgingDAO.selectSingleRoomPrice(lodging.getId());//싱글룸 가격

        CommentDetail commentDetail = new CommentDetail();
        Integer commentCount = commentDAO.selectCommentCount(commentDetail);// 댓글 갯수
        Double startPoint = commentDAO.selectStarPoint(commentDetail);//댓글 평점

        if(commentCount == null){
            commentCount = 0;
        }
        /*
        if(startPoint == null){
            startPoint = "0";
        }*/

        lodgingDetail = new LodgingDetail(); // 이것을 반복문 밖에 파라미터로 선언 하면 자꾸 같은 숙소가 나옴

        //현재 뜨는 500에러 여기서 로징아이디가 안불러와지고 있단뜻인듯.

        //그 숙소리스팅에 들어갈 것들.
        //lodgingDetail.setUserId(user.getId());//유저아이디?
        lodgingDetail.setId(lodging.getId());//로징아이디
        lodgingDetail.setRoomName(lodging.getRoomName());// 숙소명
        lodgingDetail.setAreaName(lodging.getAreaName()); // 지역명
        lodgingDetail.setLevel(lodging.getLevel());//성급
        lodgingDetail.setImagePath(lodging.getImagePath());// 숙소 사진
        lodgingDetail.setDibs(isDibs);// 찜여부
        //로징아이디 로징 룸네임 성급이미지 그리고찜여부
        //여기서 dto로 댓글갯수,평점,가격, 정렬 타입 추가
        lodgingDetail.setCommentCount(commentCount);
        //lodgingDetail.setAvgStarPoint(startPoint);
        lodgingDetail.setPrice(price);
        lodgingDetail.setSortType(lodgingDetail.getSortType());
        //nullpointException이 뜬다. 여 값이 널값이란뜻 왜 널일까

        lodgingDetailList.add(lodgingDetail);
    }

    return lodgingDetailList;

}   
sehyeogi365 commented 4 months ago

이젠 price만 지운상태서 하니 잘 뜨는듯.

public List getLodgingListByArea(String areaName, int userId, LodgingDetail lodgingDetail){

    List<LodgingDetail> lodgingList = lodgingDAO.selectLodgingListByArea(areaName, lodgingDetail.getSortType());

    List<LodgingDetail> lodgingDetailList = new ArrayList<>();

    for(LodgingDetail lodging:lodgingList) {

        //숙소카드 한장에 유저정보가 들어갈일은 없다.

        boolean isDibs = dibsCheckBO.isDibs(userId, lodging.getId());
        //이거와 관련된 비오 하나를 차라리 더 팔것.
        //댓글갯수,평점,가격, 정렬 방식 비오를 파기,
        //int commentCount = //댓글 갯수
        //int price = lodgingDAO.selectSingleRoomPrice(lodging.getId());//싱글룸 가격

        CommentDetail commentDetail = new CommentDetail();
        Integer commentCount = commentDAO.selectCommentCount(commentDetail);// 댓글 갯수
        Double startPoint = commentDAO.selectStarPoint(commentDetail);//댓글 평점

        if(commentCount == null){
            commentCount = 0;
        }

        if(startPoint == null){
            startPoint = 0.0;
        }

        lodgingDetail = new LodgingDetail(); // 이것을 반복문 밖에 파라미터로 선언 하면 자꾸 같은 숙소가 나옴

        //현재 뜨는 500에러 여기서 로징아이디가 안불러와지고 있단뜻인듯.

        //그 숙소리스팅에 들어갈 것들.
        //lodgingDetail.setUserId(user.getId());//유저아이디?
        lodgingDetail.setId(lodging.getId());//로징아이디
        lodgingDetail.setRoomName(lodging.getRoomName());// 숙소명
        lodgingDetail.setAreaName(lodging.getAreaName()); // 지역명
        lodgingDetail.setLevel(lodging.getLevel());//성급
        lodgingDetail.setImagePath(lodging.getImagePath());// 숙소 사진
        lodgingDetail.setDibs(isDibs);// 찜여부
        //로징아이디 로징 룸네임 성급이미지 그리고찜여부
        //여기서 dto로 댓글갯수,평점,가격, 정렬 타입 추가
        lodgingDetail.setCommentCount(commentCount);
        lodgingDetail.setAvgStarPoint(startPoint);
        //lodgingDetail.setPrice(price);
        lodgingDetail.setSortType(lodgingDetail.getSortType());
        //nullpointException이 뜬다. 여 값이 널값이란뜻 왜 널일까

        lodgingDetailList.add(lodgingDetail);
    }

    return lodgingDetailList;

}   
sehyeogi365 commented 4 months ago

CommentDetail commentDetail = new CommentDetail(); Integer commentCount = lodging.getCommentCount();//commentDAO.selectCommentCount(commentDetail);// 댓글 갯수 Double avgStarPoint = lodging.getAvgStarPoint();//commentDAO.selectStarPoint(commentDetail);//댓글 평점 이러니 디버깅할때 당연히 0이 들어올수 밖에..

Integer commentCount = lodging.getCommentCount();//commentDAO.selectCommentCount(commentDetail);// 댓글 갯수 Double avgStarPoint = lodging.getAvgStarPoint(); 수정해보기

sehyeogi365 commented 4 months ago

commentDetail이 아닌 lodgingId 이렇게 넣어야 할듯

sehyeogi365 commented 4 months ago

아직도 Invalid Bound 문제로 고생중이고 mysql에서 SELECT * FROM room WHERE lodgingId = 2 했을때 객실 하나만 뜨고 이런것도 의아하다.

sehyeogi365 commented 4 months ago

이제보니 public List selectLodgingListByArea(@Param("areaName") String areaName, @Param("sortType") String sortType);

여기서 지역명만 불러올게 아니라, 싱글룸 가격, 댓글 갯수, 댓글 평점도 불러와야 할듯.

sehyeogi365 commented 4 months ago

댓글갯수와 댓글 평점은 잘나온다..

//댓글 개수 public Integer selectCommentCount(@Param("lodgingId") int lodgingId);

//댓글 평균평점
public Double selectStarPoint(@Param("lodgingId") int lodgingId);
<select id = "selectStarPoint" parameterType="int" resultType="double">
    SELECT
        AVG(`starpoint`) AS `avgStarPoint`
    FROM
        `comment`
    WHERE
        `lodgingId` = #{lodgingId}

</select>
sehyeogi365 commented 4 months ago

객실리스트에서 각각 객실가격은 어떻게 불러왔는지 함 봐보기

sehyeogi365 commented 4 months ago

// 로징아이디 별 객실 public List selectRoomListOrderByPrice(@Param("lodgingId") int lodgingId); 이거를 활용해서도 충분히 싱글룸 가격을 불러올수 있었다.

Room room = new Room(); List roomList = lodgingDAO.selectRoomListOrderByPrice(lodging.getId());//객실 정보 불러오기

        Integer price = 0;

        //객실 정보가 있을때
        if(roomList != null && !roomList.isEmpty()){
            price = roomList.get(0).getPrice(); // 첫번째요소인 싱글룸 가격
        } else {
            System.out.println("Lodging ID: " + lodging.getId());
        }
sehyeogi365 commented 3 months ago
                        <a href="/lodging/lodginglist/view?area_name=jeolla&sortType=" class="box-profile">
                            <img class="profile my-3" width = "" src="https://cdn.pixabay.com/photo/2018/08/23/22/18/jeonju-3626873_960_720.jpg" alt="전라">
                        </a>
                    </div>
                    <div class="box-body d-flex justify-content-center align-items-center">
                        <a href="/lodging/lodginglist/view?area_name=jeolla&sortType=" class="font-weight-bold text-dark">전라</a>
                    </div>

                </div> 이렇게 메인페이지 url링크에 sortType 파라미터 추가 하니 sortType 400에러 해결
sehyeogi365 commented 3 months ago

아직 라디오 버튼 선택시 정렬에러가 뜨는상황..

//정렬모달 $("input[name='sortOrder']").on("change", function() { let order = $(this).val(); let areaName = $("#areaName").text();

        alert("ㅇㅇ정렬" + order);
        $.ajax({
            type : "get"
            , url : "/lodginglist/view"
            , data: {sortType : order, area_name : areaName}
            , success:function(data){
                if(data.result == "success"){
                       $('#sortModal').modal('hide');
                       location.reload();
                } else {
                       alert("정렬 실패");
                }
            }
            , error:function(){
                alert("정렬 오류");

            }

        });

    });
sehyeogi365 commented 3 months ago

아직도 정렬에러가 뜨는중 그래서 왜그런가 보니까 맨첨에 컨트롤러서부터 sortType=""로 지정되는데 비오까지 다돌고 컨트롤러로 오니까 sortType = null로 됨

sehyeogi365 commented 3 months ago

아예 컨트롤러, 서비스임플을 하나 더 파는것도 방법일듯.

sehyeogi365 commented 3 months ago

: No mapping for GET /lodginglist/view 에러가 뜨는중

웹콘솔에선 404

sehyeogi365 commented 3 months ago

그리고 lodgingDetail = new LodgingDetail(); 이렇게 반복문 밑에서 한번도 로징디테일을 초기화 해주고 있으니 당연히 sortType이 널이 들어가야 정상아닐까? 거기다가 컨트롤러에서 받은 sortType을 비오에서 안불러오고 로징디테일 초기화해서 셋팅된 sortType을 불러올려고 하니. 당연히 널이뜰수밖에

sehyeogi365 commented 3 months ago

우선은 이렇게 해서 sortType=""로 넣는데까지 성공함

sehyeogi365 commented 3 months ago

그런데 아직도 정렬오류다.

sehyeogi365 commented 3 months ago

http://localhost:8080/lodging/lodginglist/view?area_name=busan&sortType=starPointOrder 이렇게 인위적으로 했을때 에러가 뜸. ㅇㅇ.. Unknown column 'avgStarPoint' in 'order clause'

sehyeogi365 commented 3 months ago

이것도 문법적으로 잘못됨 when test ="sortType = 'commentOrder'"

sehyeogi365 commented 3 months ago

서브쿼리에서 생성한 commentCount 컬럼을 메인 쿼리에서 직접 사용할 수 없기 때문 이라는데..
즉 서브쿼리 변수를 바로 활용 못한다는건데..

이렇게 바꿈

sehyeogi365 commented 3 months ago

당연한거지만 이렇게 서브쿼리 없애서 해도 숙소리스트에 평점, 댓글갯수, 싱글룸 가격이 나온다. 차피 서비스임플에서 제너레이트 했기에

sehyeogi365 commented 3 months ago

그게 아니라면 서브쿼리를 타는것이 아닌 서비스임플에서 정렬타입이 뭐냐에 따라 다른 다오를 타게 만들거나 하는 방법이 있긴하다..

sehyeogi365 commented 3 months ago

우선 매퍼에 널일때 조건도 추가해봄

sehyeogi365 commented 3 months ago

우선 alert창 지역명에서 이상하게 뜬다. let order = $(this).val(); let areaName = $("#areaName").text();

        alert("정렬" + order);
        alert("지역명" + areaName);
sehyeogi365 commented 3 months ago

strong꺾새 따로 분리

서울 인천 강원 경상 전라 부산 제주 호텔(${lodgingCount}개)
sehyeogi365 commented 3 months ago

역시 지역명이 안잡혀서 뜨는 오류다 그럼 왜그럴까 콘솔로그,alert둘다 안뜨는데..

sehyeogi365 commented 3 months ago

jstl 변수 값을 js로 불러오기

div id = "areaName" data-area-name="${lodging.areaName}">

let areaName = $("#areaName").data("area-name").trim();//jstl 변수 js 변수로 불러오기

sehyeogi365 commented 3 months ago

그리고 현재 404에러가 뜨는원인 url 경로가 이상하게 다르게 들어온다.

sehyeogi365 commented 3 months ago

http://localhost:8080/lodginglist/view?sortType=commentOrder&area_name=seoul

이렇게 들어옴

http://localhost:8080/lodging/lodginglist/view?area_name=seoul&sortType= 이런형식으로 들어와야 하는데 f12해보면

sehyeogi365 commented 3 months ago

$.ajax({ type : "get" , url : "lodging/lodginglist/view" 이렇게 수정하기

sehyeogi365 commented 3 months ago

순서꼬여서 나오는건 어떻게 해결할건가?

요청 URL:http://localhost:8080/lodging/lodginglist/lodging/lodginglist/view?sortType=lowPriceOrder&area_name=busan

sehyeogi365 commented 3 months ago

설마 여기 data 순서도 바꿔야 url이 제대로 찍히나? , data: {sortType : order, area_name : areaName}

sehyeogi365 commented 3 months ago

이렇게 순서는 제대로 들어가지는데 왜 또 url이 중복되는가

http://localhost:8080/lodging/lodginglist/lodging/lodginglist/view?area_name=gangwon&sortType=commentOrder

sehyeogi365 commented 3 months ago

최종적으로 url 중복안되게, 파라미터 순서 맞게, lodging/lodginglist/view 형식으로 잘 출력이 됐는데 500에러 $("input[name='sortOrder']").on("change", function() { let order = $(this).val(); let areaName = $("#areaName").data("area-name").trim();//jstl 변수 js 변수로 불러오기 console.log("정렬: " + order); console.log("지역명: " + areaName); alert("정렬: " + order); alert("지역명: " + areaName); $.ajax({ type : "get" , url : "/lodging/lodginglist/view" , data: {area_name : areaName, sortType : order} , success:function(data){ if(data.result == "success"){ $('#sortModal').modal('hide');

                } else {
                       alert("정렬 실패");
                }
            }
            , error:function(){
                alert("정렬 오류");

            }

        });

    });
sehyeogi365 commented 3 months ago

이 500에러 가 서브쿼리로 생성한 별칭을 사용할수 없다 즉 ORDER BY 구문을 어떻게 해야할것인데 서브쿼리문 자체를 집어넣는것도 방법

sehyeogi365 commented 3 months ago

최근 매퍼 수정

sehyeogi365 commented 3 months ago

이렇게 매퍼 고치고 실행해보니 이번엔 정렬실패가 뜨는상황 500에러 이런건 안뜬다.

sehyeogi365 commented 3 months ago

http://localhost:8080/lodging/lodginglist/view?area_name=busan&sortType=commentOrder 이렇게라도 잡히는 상황

sehyeogi365 commented 3 months ago

url 링크도 이렇게 뜬다. http://localhost:8080/lodging/lodginglist/view?area_name=busan&sortType=avgStarPoint

sehyeogi365 commented 3 months ago

302 found라고뜨는데