프로젝트 weGoplate

Nam Eun-Ji·2020년 11월 27일
0

clone site : mango plate
github : weGoplate

프로젝트 소개

맛집을 추천해주는 서비스인 망고플레이트를 클론하여 위치 및 상호명 기반의 검색서비스와 식당의 디테일한 정보, 가격할인 상품, 맛집리스트 기능을 구현하였다.

팀원 구성
백엔드 2명 + 프론트엔드 3명



나의 역할

  • ERD(Entity Relationship Diagram)
  • 회원가입 POST API
  • 로그인데코레이터
  • 맛집 리스트 GET API
  • 레스토랑 상세페이지 기본정보 GET API
  • 망고플레이트 크롤링(db 구축)
  • 리뷰 POST API
  • 검색 API
    사용자가 keyup을 할 때마다 get api를 호출하면 레스토랑 이름에 해당 텍스트를 필터로 조회하여 그 결과값을 리스트로 반환하는 로직을 짰었다. 하지만 이렇게 했을 경우 'ㄱ'을 입력했을 경우에 아무것도 나오지 않고 '가'라고 입력했을 때에야 '가'가 포함되는 레스토랑 리스트가 반환된다. 이 부분때문에 구글링을 해보니 elasticsearch라는 검색엔진이 있었지만 생각보다 많은 시간을 할애해야 할 것 같아 다음에 도전하기로 하고 filter로 구현하였다.


잘했던 점, 아쉬웠던 점, 개선방법

  • 잘했던 점
    기능 기반의 API를 설계하였다. 페이지를 따라가는 것이 아닌 해당 모듈에 기대하는 기능으로만 포함하는 것이 추후 수정 시에 해당 API만 수정해주면 되기 때문에 API 재사용성을 높여준다는 것을 이해하고 1차 프로젝트에서 범했던 실수를 번복하지 않았다.
  • 아쉬웠던 점
    구글 로그인 API와 ElasticSearch를 구현해보고 싶었으나 소셜로그인의 흐름을 충분히 이해하지 못하였고 시간에 쫓겨 중도포기하고 다른 방법을 선택한 것에 대한 아쉬움이 남는다.
  • 개선방법
    프론트엔드 부터 백엔드 부분까지 구현해보아 전체적인 소셜로그인의 흐름을 파악해야할 듯 하다.


기록하고 싶은 코드, 로직

  • pagination
    offset은 페이지 개념으로 잡고, limit은 보여질 게시물 수라고 판단.
class ToplistView(View):
    def get(self, request):
        offset = int(request.GET.get('offset', 0))
        limit  = int(request.GET.get('limit', 20))

        toplists = Top_List.objects.order_by('-create_at')[offset * limit : (offset+1) * limit]
        
        toplist = [{
            "id"          : element.id,
            "image"       : element.image,
            "title"       : element.title,
            "description" : element.description
        } for element in toplists]
        return JsonResponse({"toplists": toplist, "offset" : offset+1}, status = 200)
profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글