Tiny Star

❌Exception&Error/🔵Python

[❌삽질과 해결 그 사이] 게시판-댓글 페이지네이션 조회가 안될 때

청크 2024. 4. 22. 18:31

이 때 발생한 예외는 그냥 코드 하나가 비틀려서 나는 예외라 딱히 해결에 도움은 안되고,

역시 선임님 찬스 짱!

 

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

 

결론 : 이걸 보는 사람은 바보짓하지마셈