🥕당근마켓, 중고나라 등을 착안하여 중고 제품 거래 플랫폼을 만들어보는 미니 프로젝트입니다.
사용자가 중고 물품을 자유롭게 올리고, 댓글을 통해 소통하며, 최종적으로 구매 제안에 대하여 수락할 수 있는 형태의 중고 거래 플랫폼을 만드는 프로젝트입니다.
- (1차) 2023.06.29 ~ 2023.07.04
- (2차) 2023.07.26 ~ 2023.08.02
Spring Web
Spring Boot DevTools
Spring Data JPA
Lombok
Validation
Spring Security
jjwt
자세한 기능 및 에러에 대한 결과는 위의 postman_collection 을 참조
아래 End Point는 성공했을 때의 예시입니다.
-
등록된 물품 단일 조회 및 전체 조회는 JWT 없이 누구나 조회 가능합니다.
그 외의 기능은 인증된 사용자만 이용 가능합니다.
End Point
Request Body:
{ "title": "테스트1", "description": "테스트 설명", "minPriceWanted": 1000000 }
Response Status: 200
Response Body:
{ "message": "등록이 완료되었습니다." }
Request Body: 없음
Response Status: 200
Response Body:
{ "content": [ { "id": 1, "title": "테스트 제목2", "username": "유저1", "description": "테스트 설명", "minPriceWanted": 1250000, "imageUrl": "/static/1/itemImage_1.jpg", "status": "판매 완료" }, { "id": 2, "title": "테스트1", "username": "유저1", "description": "테스트 설명", "minPriceWanted": 1000000, "imageUrl": null, "status": "판매중" }, // ... ], "totalPages": 4, "totalElements": 100, "last": false, "size": 25, "number": 1, "numberOfElements": 25, "first": false, "empty": false }
Request Body: 없음
Response Status: 200
Response Body:
{ "title": "테스트 제목2", "username": "유저1", "description": "테스트 설명", "minPriceWanted": 1250000, "status": "판매 완료" }
Request Body:
{ "title": "테스트 제목", "description": "테스트 설명", "minPriceWanted": 1250000 }
Response Body:
{ "message": "물품이 수정되었습니다." }
Request Body (Form Data):
image: image.(확장자) (file)
Response Body:
{ "message": "이미지가 등록되었습니다." }
Response Body:
{ "message": "물품을 삭제했습니다." }
-
댓글 조회는 JWT 없이 누구나 조회 가능합니다.
그 외의 기능은 인증된 사용자만 이용 가능합니다.
End Point
Request Body:
{ "content": "할인 가능하신가요?" }
Response Status: 200
Response Body:
{ "message": "댓글이 등록되었습니다." }
Request Body: 없음
Response Status: 200
Response Body:
{ "content": [ { "id": 1, "username": "유저2", "content": "할인 가능하신가요? 1000000 정도면 고려 가능합니다.", "reply": "됩니다." }, { "id": 2, "username": "유저3", "content": "할인 가능하신가요?", "reply": null }, // ... ], "totalPages": 4, "totalElements": 100, "last": false, "size": 25, "number": 1, "numberOfElements": 25, "first": false, "empty": false }
Request Body:
{ "content": "할인 가능하신가요? 1000000 정도면 고려 가능합니다." }
Response Body:
{ "message": "댓글이 수정되었습니다." }
Request Body:
{ "reply": "됩니다." }
Response Body:
{ "message": "댓글에 답변이 추가되었습니다." }
Response Body:
{ "message": "댓글을 삭제했습니다." }
-
구매 제안과 관련된 기능은 인증을 받은 사용자만 이용 가능합니다.
End Point
Request Body:
{ "suggestedPrice": 1000000 }
Response Status: 200
Response Body:
{ "message": "구매 제안이 등록되었습니다." }
-
Request Body: 없음
Response Status: 200
Response Body:
{ "content": [ { "id": 1, "username": "유저2", "suggestedPrice": 400000, "status": "제안" }, { "id": 2, "username": "유저3", "suggestedPrice": 50000, "status": "거절" }, // ... ], "totalPages": 4, "totalElements": 100, "last": false, "size": 25, "number": 1, "numberOfElements": 25, "first": false, "empty": false }
-
Request Body: 없음
Response Status: 200
Response Body:
{ "content": [ { "id": 1, "username": "유저3", "suggestedPrice": 1200000, "status": "제안" } // ... ], "totalPages": 4, "totalElements": 100, "last": false, "size": 25, "number": 1, "numberOfElements": 25, "first": false, "empty": false }
Request Body:
{ "suggestedPrice": 1200000 }
Response Body:
{ "message": "제안이 수정되었습니다." }
Request Body:
{ "status": "수락" or "거절" }
Response Body:
{ "message": "제안의 상태가 변경되었습니다." }
Request Body:
{ "status": "확정" }
Response Body:
{ "message": "구매가 확정되었습니다." }
Response Body:
{ "message": "제안을 삭제했습니다." }
-
-
회원가입 및 로그인의 경우 누구나 사용 가능합니다.
End Point
Request Body:
{ "username" : "유저1", "password" : "1234", "passwordCheck" : "1234", "name" : "이름1", "phone" : "010-1234-1234", "email" : "유저[email protected]" }
Response Body:
{ "message": "회원가입이 완료되었습니다." }
Request Body:
{ "username" : "유저1", "password" : "1234" }
Response Body:
{ "token": "eyJhbGciOiJIUzUxMiJ9. eyJzdWIiOiLsnKDsoIAxIiwiaWF0IjoxNjkwNzMyODUwLCJleHAiOjE2OTA3MzY0NTB9. DNKXJZohjnNwC_dV8_w5uWZqwBHwTYZTKQrHRS3l4KmRoXOhFIp_GoPYFaYNEV8OCbGlb4 QZusOlCIWG9tdVHg" }
- 프로젝트 생성 및 환경설정
- 물품 CRUD 구현
- 물품 전체 조회 페이징
- 물품 이미지 업로드 기능
- 댓글 CRUD 구현
- 댓글 전체 조회 페이징
- 댓글에 대한 물품 등록자 답글 기능
- 구매 제안 CRUD 구현
- 구매 제안 조회 페이징
- 물품 등록자인 경우, 등록된 물품에 대한 구매 제안 전체 조회 가능
- 구매 제안자인 경우, 자신이 제안한 구매 제안 전체 조회 가능
- 물품 구매 제안의 수락/거절에 따른 구매 확정 기능
- 회원가입 기능 구현
- 로그인 기능 구현
- JWT 인증 로그인
- ORM 기반 매핑
- 연관관계 매핑에 따른 Service 코드 리팩토링
- 인증된 사용자 접근 기능
- username 및 password 가 포함되면 인증된 사용자만 사용할 수 있다.
- 인증되지 않은 사용자 접근 기능
- 그 외의 URL은 누구든지 열람할 수 있다.
- 기능들에 대한 UI를 일부 구현했습니다.