20240307 (목) 최종 프로젝트 티켓레이더 2주차 - CRUD CRUD..

2024. 3. 7. 19:37TIL

오늘 한 작업

1. Pageable 오류

 

어제자 저녁에 CRUD 테스트중 오류를 하나 발견했다.

이벤트 목록 조회를 Pageable로 불러오는 도중 발생한 오류였다.

오류 코드를 둘러보니 Pageable 안에있는 PageRequest의 sort 값에 “string”이 들어가서 생긴 오류인것 같았다.

 

@PageableDefault에 sort를 id로 해놨는데 어째선지 sort값이 아예 없어야 작동을 하였다.

즉 string이든 뭐든 분류기준 이외에 아무 문자라도 들어가면 오류가 생기던것

 

이는 현재 백엔드 특성상 프론트에서 request에 들어가는 값을 조절해야하는데 그러질 못하니까 생기는 오류 같았다.

백엔드에서 자체적으로 이넘클래스를 받아서 이외에 값이 안들어가게 하는 방법도 있지만 일단은 오류 발생 이유파악과 해결법정도만 구상해보고 임시방편으로 코드를 수정해놨다.

아마 프론트 제작시점에는 수정해야될 필요가 있을듯..

 

private fun getOrderSpecifier(pageable: Pageable, path: EntityPathBase<*>, sortDir : String?): Array<OrderSpecifier<*>> {
        val sortField = setOf("id", "title", "created_at", "average_rating", "likecount")

        val pathBuilder = PathBuilder(path.type, path.metadata)

        return pageable.sort.toList().map { order ->

            if(order.property in sortField){
                OrderSpecifier(
                    if (sortDir == "ASC") Order.ASC
                    else Order.DESC, pathBuilder.get(order.property) as Expression<Comparable<*>>
                )
            }
            else {
                OrderSpecifier(Order.DESC, pathBuilder.get("id") as Expression<Comparable<*>>)
            }
        }.toTypedArray()
    }

위코드가 해당 오류를 일으킨 부분.. 여기서 string이라는 값을 받질 못했다.

이외에 값이 들어오면 else로 흘러가게 일단 수정해놓았다.

 

2. CRUD 추가작업

오늘 회의에서 CRUD의 완성에 관해서 의견을 제시하였다.

그리하여 결정한 결과가

 

전체적으로 validation 추가

  •  Category:
    •  validation
    •  카테고리 생성시 기존에 있는지 확인절차 필요
  •  Event :
    •  validation
    •  seat 만들어질 떄 기존에 존재하는지 확인 필요(같은 장소 기준, 날짜 안겹치는지)
    •  endDate가 startDate날짜 이후인지
    •  likeCount, averageRating 구현 > 동적쿼리로 검색기능 추가예정
  •  Place :
    •  validation
      •  동적 쿼리 필요(지역별 검색 등)
      •  자주 검색된 위치 정보 캐시에 등록
  •  Ticket :
    •  validation
    •  예매가능 상태인지 확인절차 필요
      •  이미 예약되어있는지 확인
      •  날짜 확인
      •  좌석 번호 체크 ( 좌석 등급별 최대값 보다 작게 )
    •  티켓 일자 확인 후 EXPIRED 상태로 바꿔주는 과정 필요 ( 스케쥴링 )
  •  Review:
    •  validation
    •  본인이 실제로 본 (티켓예매이력) 공연인지 확인하는 절차 필요
  •  Like:
    •  likeCount 최신화 스케쥴링 적용

여기서 내가 맡은 부분은 category와 event 부분

여기서 내가 새로배운 check()함수를 이용해보았다.

check()는 안에 있는 구문이 false일 때 IllegalStateException을  발생시킨다.


오늘은 전체적으로 좀더 기반을 다지는 과정을 진행했다.

현재 이부분들만 좀 더 다듬으면 기본적인 CRUD는 70퍼센트 이상은 끝날것 같다.

사실 이미 락구현(동시성제어), 캐시 구현, OAuth도 구현 완료되어서 CRUD만 완료하면 조금 숨통이 트인다.