• 기본 기능

    • 회원가입
      • username/password를 활용한 로컬 회원가입
      • username / nickname 중복 체크
      • password, nickname는 소셜 로그인의 경우 null이 되기 때문에 nullable이 되어야 함
      • 회원가입 성공 / 실패 메세지 처리
      • username은 영문과 숫자로 6~20자, nickname(필수 아님, 한, 영, 숫자로 4~12자), 둘 다 특수문자 허용 안 함
      • password는 8자 이상(영어, 숫자 필수, 특수문자 일부( !@#$%^&*()) 허용)
      • password와 password_confirm이 일치해야 함
      • username / nickname / password 입력 조건은 입력칸 아래에 회색 글씨로 적어두기
      • nickname 설정 안내 팝업 확인 여부를 cookie로 기억하고, 팝업을 확인한 적이 없다면 trade 페이지에 접속할 때 nickname 변경 안내 팝업을 게시

    <aside> 💡

    • nickname은 프로필에서 본인일 경우 설정할 수 있게 함.

    • nickname을 설정하지 않은 사람은 로그인 후 trade 페이지로 이동 했을 때 팝업으로 nickname 변경하는 방법 띄워주고 팝업 확인 여부 cookie값 추가

    • nickname이 null값이면 아이디가 뜰 수 있도록 해야 함. </aside>

    • 로그인

      • username, password 입력 후 로그인 버튼 클릭 / 엔터키로 로그인
      • google 소셜 로그인 기능으로 로그인 가능
      • 로그인 시 먼저 아이디 대조, 일치 시 비밀번호 대조
      • 로그인 시도 시 아이디와 username이 불일치 할 경우 ‘존재하지 않는 아이디입니다.’ 출력, 아이디는 일치 하지만 비밀번호 불일치 시 ‘비밀번호가 틀렸습니다.’ 출력
      • 로그인 성공 후 trade 페이지로 이동
    • 로그아웃

      • 로그아웃 시 main 페이지 이동
    • Google 소셜 연동

      • 인증 과정에서 취소한 경우 로그인 화면으로 이동
      • Google API 로부터 유효하지 않은 응답을 받은 경우 “Google 로그인에 실패했습니다.” 표시
    • 검색 기능

      • 사용자가 키워드를 입력하여 상품을 검색 시 검색 페이지 이동

      • 판매 중인 게시글만 보이도록 하고 옵션 선택에 따라 거래완료 게시글도 보이도록 설정

      • 일치하는 목록이 없을 시 ‘검색 결과가 없습니다’ 출력

      • 카테고리 필터 기능: 검색창에 select option(기본값은 전체로)을 만들어서 카테고리 선택할 수 있도록 함. 아래 사진에서 중고거래 대신 카테고리명 사용

        image.png

      • 검색 페이지는 무한 스크롤 구현 X

      • 검색 페이지 정렬 기준 기본값은 최신순

      • 카드배열 우측 상단에 최신순, 가격순, 조회순, 거리순 정렬 기능(아래 사진과 같이)

        • 선택된 정렬 옵션은 검은색 글씨로, 선택되지 않은 정렬 옵션은 회색 글씨로 표현
        • 로그인 하지 않은 사용자는 지역 상관없이 게시글 정렬
        • 로그인 하지 않았을 경우 정렬기능에 거리순은 보이지 않게 처리

      image.png

      • GET /trades?keyword=키워드&category=카테고리&orderby=정렬기준
    • trade페이지

      • 게시글은 조회순으로 정렬(기본값)

      • 판매 중인 게시글만 보이도록 설정

      • 게시글(검색결과도 포함)은 사용자 위치에서 일정 거리 이내의 게시글만 보이도록 함(거리는 구현 단계에서 테스트하며 결정)

        실제 당근에서는 2.5km ~ 10km까지 거리 설정 가능

      • 로그인 하지 않은 사용자는 지역 상관없이 게시글 조회순 정렬

      • 플로팅 버튼(거래글쓰기)은 스크롤 시에도 움직이지 않음

    • trade-post 페이지

      • 수정하기, 삭제하기 기능(작성자에게만 표시되어야 함)
        • 수정하는 페이지는 write페이지와 동일
      • 판매자가 채팅하기 버튼 클릭 시 chat 페이지로만 넘어가기
      • 구매자는 채팅하기 버튼을 처음 눌렀을 때만 채팅방이 생성되고, 이후에는 생성한 채팅방으로 연결될 수 있게 설정
    • 사용자가 상품에 대한 포스트 작성 (중고거래 포스트 생성)

      • 판매자로부터 title, description, price, trade_image, category를 입력받아 포스트 생성
      • 위 항목 외에 trades 테이블의 항목은 아래의 초기값에 따라 생성
        • buyer_id: null, status: “판매중”, view_count: 0, created_at: [생성 시각], updated_at: [생성 시각]
      • 테스트 데이터 작성용 sql 파일에서, trades.view_count를 서로 다르게 주어 여러 테스트가 용이하게 하기
    • 중고거래 판매자와 구매 희망자 간 채팅

      • 구매 희망자가 trade_post 페이지에서 채팅하기 버튼을 클릭해 chat 페이지로 이동하며 room 생성
      • chatrooms 테이블에서 seller_id나 buyer_id가 사용자의 id와 일치하는 room을 가져오고, 가져온 room의 room_id와 messages 테이블 중 room_id가 일치하는 message를 검색
      • 구매 희망자가 이미 해당 물품에 대한 room이 있는 경우 채팅하기 버튼 클릭 시 그 room으로 넘어가기
      • 거래 상태를 변경 할 수 있는 버튼 (판매자가 거래확정하기를 누르면 변경)
        • 본인은 판매중 / 거래완료로 상태 설정 버튼 보이게 하기. 단, 리뷰가 작성된 중고거래 품목(즉, 거래완료 상태의 중고거래 품목)의 경우 상태를 설정할 수 없게함.
        • 판매자가 거래완료 누르기
        • 거래완료 → 판매중 상태변경 가능하도록 설정
          • 실수로 거래완료를 눌렀을 경우를 대비해 판매중으로 상태 변경 기능 추가
          • 리뷰가 없는 게시글만 판매중으로 변경 가능하도록 조건 추가
    • 챗봇 기능

      • 사용자의 질문을 ChatGPT API로 전달하여 받은 답변을 채팅방에 표시
      • 기타 제약 조건(ex 과도 API 호출 방지)
    • 동네 인증

      • 사용자로부터 daum postcode service를 이용해 정형화된 동네 주소를 입력받고, Google Geocoding API를 이용해 해당 주소의 위도/경도 값을 구함
      • 사용자의 현재 위치(위도/경도 값)을 입력받고, 위에서 구한 동네 주소의 위도/경도 값과 비교하여 일정 거리 내에 있다면 “동네 인증” 버튼이 활성화됨
      • 일정 거리는 구현 단계에서 테스트하면서 설정하기로 함(pc로 접속시에, 본인 주소와 좀 거리가 있게 나올 수 있어, 설정 범위를 구 정도로 넓게 설정하는 걸 추천, 2km ~ 10km)
      • “동네 인증” 버튼을 누르면 사용자의 location은 [정형화된 동네 주소], latitude와 longitude는 각각 [정형화된 사용자 입력 주소의 위도/경도 값]을 입력함
    • 구글 map API

      • Geocoding API: 주소를 위도/경도 좌표 전환
      • Maps JavaScript API / Mobile SDKs: 앱 화면에 지도를 표시하고 핀을 마킹
    • AWS S3 bucket API

      • 사용자가 중고거래 포스트를 생성할 때 trade_image를 AWS S3에 업로드하고, 업로드한 이미지의 링크를 trade_images 테이블의 url 필드에 저장함
  • 추가 기능

    • 구매 확정 → 리뷰/평점 기능

      • 구매자 / 판매자 각각 서로에게 리뷰 / 평점 남기기 가능, 평점은 필수, 리뷰 내용은 nullable
      • 판매자 → 거래완료 채팅방에 상태를 변경 할 수 있는 버튼 만들기, 프로필 페이지에 게시글에는 거래 상태만 확인할 수 있도록 표시
      • 거래완료 게시글, 채팅방에 후기 작성하는 버튼 만들기(거래 확정하기 버튼을 누르면 왼쪽 후기 작성 버튼 뜨도록 설정)
    • 프로필 페이지

      • 사용자가 본인일 경우 수정 버튼을 누르면 form 페이지로 이동
      • 수정 페이지
      • 해당 유저가 올린 포스트 리스트
      • 구매자일 때, 받은 평점 + 판매자일 때, 받은 평점 → 통합 평점
      • 해당 유저가 작성한 리뷰 / 평점 기능
      • 해당 유저가 거래한 거래 품목 리스트

      <aside> ⚠️

      </aside>

    • trades 페이지(무한 스크롤)

    • 카테고리 분류

    • 플로팅 버튼(상단 올리기)

    • 정렬 기능(가격순, 조회순, 최신순, 거리순) - 백엔드에서 처리


  • 후순위 추가 기능