GIF via giphy
잘 못 입력한 코드 한 줄 때문에 거의 1시간을 붙잡고 있었다. 좀 더 꼼꼼하게 코드를 작성하자. 백준에서 내가 부족한 기하학과 구현능력 둘 다 필요한 기하학 + 구현 문제를 찾아냈다. 더 효율적으로 둘 다 실력을 높일 수 있지 않을까?
중고등학교 다닐 때의 습관일까? 일단 도형만 나오면 숨이 턱 막힌다. 익숙해질 수 있도록 계속해서 풀어보자.
def get_paginated_board_data(page_num: int, author: UserModel, query: Q) -> Tuple[ReturnList, int]:
"""
page_num을 통해서 board 데이터를 가져오는 service
"""
my_paginated_board_data = (
BoardModel.objects.select_related("author")
.prefetch_related("boardcomment_set__author")
.prefetch_related("boardlike_set")
###
.filter(query)
###
.order_by("-create_date")[10 * (page_num - 1) : 10 + 10 * (page_num - 1)]
)
paginated_boards = BoardSerializer(my_paginated_board_data, many=True, context={"author": author}).data
total_count = BoardModel.objects.filter(query).count()
return paginated_boards, total_count
추가로 all()로 모든 익명게시판을 가져오는 부분은 빈 Q객체를 filter 내부에 넣어주면 모든 데이터를 가져온다 이를 통해서 all()도 Q를 통해 간접적으로 구현할 수 있었다.client = Elasticsearch(
f"elasticsearch://{os.environ['MONGLE_ES_HOST']}:9200",
http_auth=(os.environ["MONGLE_ES_USER"], os.environ["MONGLE_ES_PASSWORD"]),
)
headers = {"Content-Type": "application/json"}
searched_data = client.options(headers=headers).search(
index="mail_box", from_=page_num, sort=["_score"], size=MAX_PAGE, query={"match": {search_type: search_word}}
)
엘라스틱 서치를 가져오는 부분을 이렇게 변경했다. 검색하다보니 http_auth로 더 편하게 구현할 수 있었고 결정적으로 그 전 방식 그러니까 헤더에 authorization을 추가해서 직접 인코딩을 해서 넣었더니 계속 401에러가 나고 다른 requests 라이브러리에서 HTTPBasicAuth 클래스를 가져와서 집어 넣어도 에러가 났다. 아 그리고 어제 로컬 컴퓨터에서는 안되고 도커에서 됐던 이유를 찾았는데 부끄럽게도 환경변수에 오타가 있어서 그런거였고 수정했더니 로컬에서도 테스트가 잘 통과했다.