Skip to content

likelion-backend-5th/Project_1_YunByungil

Repository files navigation

💬 멋사마켓이란?

여러분들이 많이 사용하고 있는 🥕당근마켓, 중고나라 등을 착안하여 여러분들만의 중고 제품 거래 플랫폼을 만들어보는 미니 프로젝트입니다. 사용자가 중고 물품을 자유롭게 올리고, 댓글을 통해 소통하며, 최종적으로 구매 제안에 대하여 수락할 수 있는 형태의 중고 거래 플랫폼의 백엔드를 만들어봅시다.

🎯멋사마켓 ERD

img_2.png

⚙️ 기술스택

Language | Java 17

Framework | Spring 6.0.10 (Spring Boot 3.1.1)

Build Tool | Gradle 8.1.1

Test | Junit 5.9.3, Mockito 5.3.1

Docs | Spring REST Docs 3.0.0

💡 API 설계

간단한 웹 사이트 이용 방법

img_1.png

1️⃣ DAY 1 / 중고 물품 관리 요구사항

1일차 기능 요구 사항

기능 요구 사항

📝 DAY 1️⃣ 중고 물품 관리 6/29

  1. 누구든지 중고 거래를 목적으로 물품에 대한 정보를 등록할 수 있다.
    a. 이때 반드시 포함되어야 하는 내용은 제목, 설명, 최소 가격, 작성자이다.
    b. 또한 사용자가 물품을 등록할 때, 비밀번호 항목을 추가해서 등록한다.
    c. 최초로 물품이 등록될 때, 중고 물품의 상태는 판매중 상태가 된다.
  2. 등록된 물품 정보는 누구든지 열람할 수 있다. a. 페이지 단위 조회가 가능하다.
    b. 전체 조회, 단일 조회 모두 가능하다.
  3. 등록된 물품 정보는 수정이 가능하다.
    a. 이때, 물품이 등록될 때 추가한 비밀번호를 첨부해야 한다.
  4. 등록된 물품 정보에 이미지를 첨부할 수 있다.
    a. 이때, 물품이 등록될 때 추가한 비밀번호를 첨부해야 한다.
    b. 이미지를 관리하는 방법은 자율이다.
  5. 등록된 물품 정보는 삭제가 가능하다.
    a. 이때, 물품이 등록될 때 추가한 비밀번호를 첨부해야 한다.
1일차 기능 목록

✨ 기능 목록

  • 아이템 등록, 수정, 삭제
    • 수정 -> 이미지 첨부 가능, 비밀번호 입력, 아이디 입력
    • 삭제 -> 비밀번호 입력, 아이디 입력
  • 등록된 아이템 전체 조회, 단일 조회
  • Dto 파일 분류
  • 예외처리 새로 학습한 내용 적용
  • 아이디 비밀번호 검증 함수화 - checkWriterAndPassword()
1일차 예외 목록

✨ 예외 목록

  • 제목, 설명, 최소 가격, 작성자, 비밀번호 미작성 시 예외 발생
    • 수정, 삭제 -> 비밀번호 틀렸을 때, 예외 발생
    • 아이디 틀렸을 때, 예외 발생
1일차 테스트 목록

✅ 테스트 목록

Service

  • 아이템 생성, 단일 조회, 페이징 조회
  • 존재하지 않는 아이템 예외 테스트
  • 아이템 수정, 삭제
  • 수정 or 삭제 -> Writer, Password 틀렸을 때 예외 발생

controller

  • 아이템 생성, 단일 조회 API
  • 전체 조회
  • 아이템 수정, 삭제

Repository


️2️⃣ DAY 2 / 중고 물품 댓글 요구사항

2일차 기능 요구 사항

기능 요구 사항

📝 DAY 2️⃣ 중고 물품 댓글 7/3

  1. 등록된 물품에 대한 질문을 위하여 댓글을 등록할 수 있다.
    a. 이때 반드시 포함되어야 하는 내용은 대상 물품, 댓글 내용, 작성자이다.
    b. 또한 댓글을 등록할 때, 비밀번호 항목을 추가해서 등록한다.
  2. 등록된 댓글은 누구든지 열람할 수 있다.
    a. 페이지 단위 조회가 가능하다.
  3. 등록된 댓글은 수정이 가능하다.
    a. 이때, 댓글이 등록될 때 추가한 비밀번호를 첨부해야 한다.
  4. 등록된 댓글은 삭제가 가능하다.
    a. 이때, 댓글이 등록될 때 추가한 비밀번호를 첨부해야 한다.
  5. 댓글에는 초기에 비워져 있는 답글 항목이 존재한다.
    a. 만약 댓글이 등록된 대상 물품을 등록한 사람일 경우, 물품을 등록할 때 사용한 비밀번호를 첨부할 경우 답글 항목을 수정할 수 있다.
    b. 답글은 댓글에 포함된 공개 정보이다.
2일차 기능 목록

✨ 기능 목록

  • 댓글 등록, 수정, 삭제
    • 수정, 삭제 -> 비밀번호 입력, 아이디 입력
  • 등록된 댓글 페이지 단위 조회
  • 답글 등록, 수정
    • 수정 -> 비밀번호 입력, 아이디 입력
  • 아이디 비밀번호 검증 함수화
2일차 예외 목록

✨ 예외 목록

  • 존재하지 않는 물품에 댓글 작성 시 예외 발생
  • 대상 물품, 댓글 내용, 작성자, 비밀번호 미작성 시 예외 발생
    • 수정, 삭제 -> 작성자, 비밀번호 틀렸을 때, 예외 발생
  • 답글 작성 시 물품 등록한 사람이 아닐 경우 예외 발생
    • 작성자, 비밀번호 틀렸을 때, 예외 발생
2일차 테스트 목록

✅ 테스트 목록

Service

  • 댓글 생성, 페이징 조회
  • 답글 생성
  • 존재하지 않는 댓글 예외 테스트
  • 댓글, 답글 - 수정
  • 수정 or 삭제 -> Writer, Password 틀렸을 때 예외 발생

controller

  • 댓글 생성
  • 전체 조회
  • 댓글 답글 - 수정

Repository

  • findAllByItemId()

3️⃣ DAY 3 / 구매 제안 요구사항

3일차 기능 요구 사항

기능 요구 사항

📝 DAY 3️⃣ 구매 제안 7/4

  1. 등록된 물품에 대하여 구매 제안을 등록할 수 있다.
    a. 이때 반드시 포함되어야 하는 내용은 대상 물품, 제안 가격, 작성자이다.
    b. 또한 구매 제안을 등록할 때, 비밀번호 항목을 추가해서 등록한다.
    c. 구매 제안이 등록될 때, 제안의 상태는 제안 상태가 된다.
  2. 구매 제안은 대상 물품의 주인과 등록한 사용자만 조회할 수 있다.
    a. 대상 물품의 주인은, 대상 물품을 등록할 때 사용한 작성자와 비밀번호를 첨부해야 한다. 이때 물품에 등록된 모든 구매 제안이 확인 가능하다. 페이지 기능을 지원한다.
    b. 등록한 사용자는, 조회를 위해서 자신이 사용한 작성자와 비밀번호를 첨부해야 한다. 이때 자신이 등록한 구매 제안만 확인이 가능하다. 페이지 기능을 지원한다.
  3. 등록된 제안은 수정이 가능하다.
    a. 이때, 제안이 등록될때 추가한 작성자와 비밀번호를 첨부해야 한다.
  4. 등록된 제안은 삭제가 가능하다.
    a. 이때, 제안이 등록될때 추가한 작성자와 비밀번호를 첨부해야 한다.
  5. 대상 물품의 주인은 구매 제안을 수락할 수 있다.
    a. 이를 위해서 제안의 대상 물품을 등록할 때 사용한 작성자와 비밀번호를 첨부해야 한다.
    b. 이때 구매 제안의 상태는 수락이 된다.
  6. 대상 물품의 주인은 구매 제안을 거절할 수 있다.
    a. 이를 위해서 제안의 대상 물품을 등록할 때 사용한 작성자와 비밀번호를 첨부해야 한다.
    b. 이때 구매 제안의 상태는 거절이 ****된다.
  7. 구매 제안을 등록한 사용자는, 자신이 등록한 제안이 수락 상태일 경우, 구매 확정을 할 수 있다.
    a. 이를 위해서 제안을 등록할 때 사용한 작성자와 비밀번호를 첨부해야 한다.
    b. 이때 구매 제안의 상태는 확정 상태가 된다.
    c. 구매 제안이 확정될 경우, 대상 물품의 상태는 판매 완료가 된다.
    d. 구매 제안이 확정될 경우, 확정되지 않은 다른 구매 제안의 상태는 모두 거절이 된다.
3일차 기능 목록

✨ 기능 목록

  • 등록된 물품에 대하여 구매 제안 등록, 수정, 삭제
    • 구매 제안이 등록될 때, 제안의 상태는 제안 상태가 된다.
  • 구매 제안은 대상 물품의 주인과 등록한 사용자만 조회
  • 물품의 주인은 구매 제안 수락, 거절 기능
    • 비밀번호 입력, 아이디 입력
  • 구매 제안이 수락상태일 경우 구매 확정 가능
    • 작성자, 비밀번호 검증
    • 구매 제안의 상태 -> 확정으로 변경
    • 물품의 상태 -> 판매 완료
    • 다른 구매 제안의 상태는 모두 거절로 변경
  • 아이디 비밀번호 검증 함수화
3일차 예외 목록

✨ 예외 목록

  • 구매 제안 등록시 물품, 가격, 작성자, 비밀번호 없으면 예외 발생
    • 수정, 삭제 -> 작성자, 비밀번호 틀렸을 때, 예외 발생
  • 물품 주인과 제안한 사용자가 아닌 상태에서 조회시 예외 발생
  • 구매 제안 수락 및 거절시 작성자와 비밀번호 틀리면 예외 발생
3일차 테스트 목록

✅ 테스트 목록

Service

  • 구매 제안 CRUD
  • 물품의 주인과 구매 제안 등록자만 조회
  • 작성자, 비밀번호 틀렸을 경우 예외 발생

controller

  • Negotiation CRUD
  • 전체 조회

Repository

  • findAllByItemId()
  • updateNegotiationStatus()

4️⃣ DAY 4 / 인증 만들기

4일차 기능 요구 사항

기능 요구 사항

📝 DAY 4️⃣ 인증 만들기 7/26

  1. 사용자는 회원가입을 진행할 수 있다.
    • 회원가입에 필요한 정보는 아이디와 비밀번호가 필수이다.
    • 부수적으로 전화번호, 이메일, 주소 정보를 기입할 수 있다.
    • 이에 필요한 사용자 Entity는 직접 작성하도록 한다.
  2. 아이디 비밀번호를 통해 로그인을 할 수 있어야 한다.
  3. 아이디 비밀번호를 통해 로그인에 성공하면, JWT가 발급된다.
    이 JWT를 소유하고 있을 경우 인증이 필요한 서비스에 접근이 가능해 진다.
    • 인증이 필요한 서비스는 추후(미션 후반부) 정의한다.
  4. JWT를 받은 서비스는 사용자가 누구인지 사용자 Entity를 기준으로 정확하게 판단할 수 있어야 한다.
4일차 기능 목록

✨ 기능 목록

  • Spring Security 셋팅
  • JWT 발급
  • 회원가입
  • 로그인
4일차 예외 목록

✨ 예외 목록

  • 회원가입시 아이디와 비밀번호가 비어있을 때, 예외 발생
  • 회원가입시 중복된 계정이 존재하면, 예외 발생
  • 로그인시 아이디 또는 비밀번호가 일치하지 않을 때, 예외 발생
4일차 테스트 목록

✅ 테스트 목록

Service

  • UserService#createUser()
  • UserService#validateDuplicateUsername()

controller

  • 회원가입
  • 로그인

Repository

  • UserRepository#findByUsername()

5️⃣ DAY 5 / 관계 설정하기

5일차 기능 요구 사항

기능 요구 사항

📝 DAY 5️⃣ 관계 설정하기 7/27

  1. 아이디와 비밀번호를 필요로 했던 테이블들은 실제 사용자 Record에 대응되도록 ERD를 수정하자.
    • ERD 수정과 함께 해당 정보를 적당히 표현할 수 있도록 Entity를 재작성하자.
    • 그리고 ORM의 기능을 충실히 사용할 수 있도록 어노테이션을 활용한다.
  2. 다른 작성한 Entity도 변경을 진행한다.
  • 서로 참조하고 있는 테이블 관계가 있다면, 해당 사항이 표현될 수 있도록 Entity를 재작성한다.
5일차 기능 목록

✨ 기능 목록

  • Entity 연관관계 매핑
    • Comment, Nego 작성 시 itemId가 아닌 item을 넣는다.
  • SecuritySession 으로 로직 수정
5일차 예외 목록

✨ 예외 목록

5일차 테스트 목록

✅ 테스트 목록

Service

  • User, Item, Comment, Negotiation 모든 테스트 수정

controller

  • User, Item, Comment, Negotiation 모든 테스트 수정

Repository

  • User, Item, Comment, Negotiation 모든 테스트 수정

6️⃣ DAY 6 / 기능 접근 설정하기

6일차 기능 요구 사항

기능 요구 사항

📝 DAY 6️⃣ 관계 설정하기 7/28
기능들의 사용 가능 여부가 사용자의 인증 상태에 따라 변동하도록 제작합니다.

  1. 본래 “누구든지 열람할 수 있다”의 기능 목록은 사용자가 인증하지 않은 상태에서 사용할 수 있도록 한다.
    • 등록된 물품 정보는 누구든지 열람할 수 있다.
    • 등록된 댓글은 누구든지 열람할 수 있다.
    • 기타 기능들
  2. 작성자와 비밀번호를 포함하는 데이터는 인증된 사용자만 사용할 수 있도록 한다.
    • 이때 해당하는 기능에 포함되는 아이디 비밀번호 정보는, 1일차에 새로 작성한 사용자 Entity와의 관계로 대체한다.
      • 물품 정보 등록 → 물품 정보와 사용자 관계 설정
      • 댓글 등록 → 댓글과 사용자 관계 설정
      • 기타 등등
    • 누구든지 중고 거래를 목적으로 물품에 대한 정보를 등록할 수 있다.
    • 등록된 물품에 대한 질문을 위하여 댓글을 등록할 수 있다.
    • 등록된 물품에 대하여 구매 제안을 등록할 수 있다.
    • 기타 기능들
6일차 기능 목록

✨ 기능 목록

  • enum Role 생성 (USER, ADMIN)
  • 조회는 누구나 가능
  • Get을 제외한 나머지는 인증이 필요함(Authentication)
6일차 예외 목록

✨ 예외 목록

6일차 테스트 목록

✅ 테스트 목록

Service

controller

Repository

Releases

No releases published

Packages

No packages published