이 때 발생한 예외는 그냥 코드 하나가 비틀려서 나는 예외라 딱히 해결에 도움은 안되고,
역시 선임님 찬스 짱!
Board Repository에서 상세게시글 로드 시 첫 10개의 댓글은 조회가 되도록 쿼리를 날려놨다.
그럼 이제 10개 이후의 댓글은 어떻게 가지고 올 것인가를 해결하기 위해서
Comment 페이지네이션 로직을 구현했고 Swagger에서 테스트하는데 안ㅋ됨ㅋ
500아님 내가 던진 400뿐... 댓글리스트 따위 나오진않는다.
내가 디버깅한 결과는 board ID값이 Null.
def find_all_by_id(self, search_request: Dict[int, T]) -> (Comment, int):
if search_request is None:
search_request = {}
board_id = search_request.get('id')
page = search_request.get('page', 1) - 1
size = search_request.get('size', 10)
comment_list_query = (session.query(Comment)
.filter(Comment.board_id == board_id, not_(Comment.is_delete))
.order_by(Comment.id.desc()))
total_count = comment_list_query.count()
print(page, size, board_id)
comments = comment_list_query.offset(page * size).limit(size).all()
print(comments)
return comments, total_count
선임님 바짓가랑이 붙잡고 같이 print로 하나씩 찍어보면서 로직을 타고 올라 간 결과!!
내가 예상한대로 board ID값이 없었음!!
왜 없었냐고?
class CommentPaginationRequestSerializer(serializers.Serializer):
id = serializers.IntegerField()
page = serializers.IntegerField()
size = serializers.IntegerField()
Serializer에는 Power당당하게 id로 명시해놓고 Service로직을 포함한 모든 곳에 board_id로 파라미터를 받고 있었다.
(진짜 개똥멍청ㅇㅣ;;; 이거로 4시간 고민했다니까 선임님 우심.. 에궁.. 울지마세여..ㅜ)
두번째 문제는?
Repository에서는 search_request를 파라미터로 받았음
이렇게 ㅇㅇ
def find_all_by_id(self, search_request: Dict[int, T]) -> (Comment, int):
근데 정작 서비스로직은?
ㅋ ㅋ ㅋ ㅋ Serializer 에서 실컷 board_id, page, size int라고 명시해놓고
또 하나하나 정성스럽게 써줌;
진짜 이럴거면 Serializer 왜 썼니..?
# def search(self, board_id: int, page: int, size: int) -> Tuple[List[AllCommentResponseSerializer], int]:
# comments, total_count = self.comment_repository.find_all_by_id(board_id)
# return [AllCommentResponseSerializer(comment).data for comment in comments], total_count
결론 : 이걸 보는 사람은 바보짓하지마셈