HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
[팀 08] 사이코
[팀 08] 사이코
/
📶
API 설계
📶

API 설계

  • 개발 서버
    • http://ec2-15-164-204-95.ap-northeast-2.compute.amazonaws.com:8080/
  • 배포 도메인
    • https://bidmarket-api.shop/api/v1
  • 나눴던 이유
    • https를 적용하는데 이슈가 있어서 https를 적용하지 않은 개발 인스턴스를 따로 분리했었음 현재는 나눠 놓은 의미가 거의 없음 (코드가 같음)
 
  • Category: 앞으로 영어로 보내야 합니다
 
유저
Description
Method
URL Patterns
인증 필요 여부
📃
로그인
GET
http://ec2-15-164-204-95.ap-northeast-2.compute.amazonaws.com:8080/oauth2/authorization/google
X
📃
회원 정보 수정
PATCH
api/v1/users
O
📃
회원 판매상품 조회
GET
api/v1/users/{id}/products
X
📃
회원 정보 조회
GET
api/v1/users/{id}
X
📃
로그인 검증 회원 조회
GET
api/v1/users/auth
O
📃
회원 입찰상품 조회
GET
api/v1/users/biddings
O
📃
회원 탈퇴
DELETE
api/v1/users
O
📃
상품 찜 여부 확인
GET
api/v1/users/{productId}/hearts
O
📃
상품 찜하기 + 찜 취소하기
PUT
api/v1/users/{productId}/hearts
O
📃
회원 찜한 상품 조회
GET
api/v1/users/hearts
O
📃
회원 탈퇴
DELETE
api/v1/users
O
 
상품
Description
Method
URL Patterns
인증 필요 여부
📃
상품 전체 조회
GET
api/v1/products
X
📃
상품 검색
GET
api/v1/products
X
📃
상품 상세 조회
GET
api/v1/products/{id}
X
📃
상품 등록
POST
api/v1/products
O
 
입찰
Description
Method
URL Patterns
인증 필요 여부
📃
상품 입찰
POST
api/v1/biddings
O
📃
상품 입찰 결과 조회
GET
api/v1/products/{productId}/result
O
📃
특정 상품의 본인 비딩 금액 조회
GET
api/v1/biddings/products/{productId}
O
 
댓글
Description
Method
URL Patterns
인증 필요 여부
📃
댓글 생성
POST
api/v1/comments
O
📃
댓글 조회
GET
api/v1/comments
O
 
신고
Description
Method
URL Patterns
인증 필요 여부
📃
신고하기
POST
api/v1/reports
O
 
알림
Description
Method
URL Patterns
인증 필요 여부
📃
알림 전체 조회
GET
api/v1/notifications
O
📃
알림 확인
PUT
api/v1/notifications/{notificationId}
O
 
채팅
Description
Method
URL Patterns
인증 필요 여부
📃
채팅방 목록 조회
GET
api/v1/chatRooms
O
📃
채팅방 메시지 조회
GET
api/v1/chatRooms/{id}/messages
O
📃
웹소켓 STOMP 연결
WebSocket
wss://{baseUrl}/ws-stomp
X
📃
웹소켓 채팅
WebSocket
X
 
 
상품 카테고리 종류
 

 

API 목록

서버에 배포된 api는 체크합니다.
 

완료

상품 등록
상품 상세조회
상품 전체조회
유저 수정기능
회원 입찰 상품 목록 with Token
응답
회원 정보
응답
회원 판매 상품 목록
응답
입찰 API
요청/응답
로그인한 유저 정보 API with Token
응답
  • 회원 정보랑 다른 것임
  • 토큰이랑 보낼 것임
 
 
 

진행

 
알림 조회 API with Token
응답
[논의중] 본인이 해당상품의 입찰자인지 확인하는 API with Token
요청 응답
[논의중] 낙찰되었는지 확인 API with Token [논의중]
  • 입찰자(입찰자, 낙찰자) → 본인이 낙찰자인지 확인
요청
시퀀스 다이어 그램
notion image
[논의중] 낙찰되었는지 확인 API with Token[논의중]
  • 판매자 → 낙찰되었는지 확인
요청
시퀀스 다이어 그램
notion image
  • 당신은 낙찰자 인가 / 낙찰자가 있는 상품인가
    • False / False
    • True / True
    • False / True
      • True / False ← 불가능
채팅 목록 API with Token
요청

QueryParam

  • offset (필수)
    • 상품 번호(index)
    • 0부터 시작
  • limit (필수)
    • 한번에 받아오는 상품 개수
    • 1부터 시작
응답
  • 응답에 데이터가 없을 경우 빈배열을 반환합니다
찜하기 API with Token
요청
찜 취소하기 API with Token
요청
찜한 상품 조회 API with Token
응답
탈퇴하기 API with Token
요청
신고하기 API with Token
Case
  • 회원 신고
    • where : 채팅방에서
    • 신고 대상 회원 정보
  • 게시글 신고
    • where : 상품 상세 페이지에서
    • 신고 대상 회원 정보, 상품에 대한 정보와 함께
  • 댓글 신고
    • where : 상품 상세 페이지에서
    • 신고 대상 회원 정보, 상품 에 대한 정보 와 함께
 
 
  • > 찜하기/찜 취소하기 -> 내가 상품을 찜했는지의 여부(상세페이지 조회 때 확인) -> 메인페이지에서 상품마다 찜이 몇개있는지 보내주기 -> 유저의 찜한 상품 리스트 보여주기
 

대기

재입찰(입찰 수정) API with Token
요청 응답
입찰 취소 API with Token
요청
상품 수정 API with Token
요청
 
DIGITAL_DEVICE("디지털 기기"), HOUSEHOLD_APPLIANCE("생활 가전"), FURNITURE("가구/인테리어"), CHILDREN_BOOK("유아 도서"), FOOD("생활/가공 식품"), SPORTS_LEISURE("스포츠/레저"), WOMAN_GOODS("여성 잡화"), WOMAN_CLOTHES("여성 의류"), MAN_FASHION_GOODS("남성패션/잡화"), HOBBY("게임/취미"), BEAUTY("뷰티/미용"), PET_SUPPLY("반려 동물 용품"), BOOK_TICKET_RECORD("도서/티켓/음반"), PLANT("식물"), ETC("기타 중고 물품"), ALL("전체");
DIGITAL_DEVICE("디지털 기기"), HOUSEHOLD_APPLIANCE("생활 가전"), FURNITURE("가구/인테리어"), CHILDREN_BOOK("유아 도서"), FOOD("생활/가공 식품"), SPORTS_LEISURE("스포츠/레저"), WOMAN_GOODS("여성 잡화"), WOMAN_CLOTHES("여성 의류"), MAN_FASHION_GOODS("남성패션/잡화"), HOBBY("게임/취미"), BEAUTY("뷰티/미용"), PET_SUPPLY("반려 동물 용품"), BOOK_TICKET_RECORD("도서/티켓/음반"), PLANT("식물"), ETC("기타 중고 물품"); -> 한글로 보내셔야 합니다.
Response [ { "id": Number, "title": String, "thumbnailImage": String, "minimumPrice": Number, "expireAt": Date, "createdAt": Date, "updatedAt": Date, }, {} // 유사 데이터 limit 개수만큼 반환 ]
Response { "encodedId": String; "thumbnailImg": S3url //초기에는 구글프로필 url을 갖고 있습니다. 추후에 처리하겠습니다. "username": string; }
Response [ { "id": Number, "title": String, "thumbnailImage": String, "minimumPrice": Number, "expireAt": Date, "createdAt": Date, "updatedAt": Date, }, {} // 유사 데이터 limit 개수만큼 반환 ]
Resquest { "productId": Number, "biddingPrice": Number, } Response { id : Number // 생성된 bidding에 대한 아이디 }
Response { "encodedId": string; "thumbnailImg": S3url //초기에는 구글프로필 url을 갖고 있습니다. 추후에 처리하겠습니다. "username": string; }
// 알림 페이지 진입시 response [ { "notificationId": number; "product": { "id": number; "title": string; "description": string; } } ]
// 입찰하기 버튼 클릭시 request { "productId": number; } response { "isBid": boolean; "user": { "id": number; "biddingPrice": number; } }
// 상품 상세 조회의 expireAt값이랑 현재시간 비교하여 종료되었으면 // (토큰 존재 확인후) 낙찰자인지 확인 API 요청 request // 상품생성 API와 동일 { "productId": number; "userId": number; // 입찰자 } response { "당신이 낙찰자인가": boolean; "채팅방 id": number; "채팅 상대 닉네임": string; }
// 상품 상세 조회의 expireAt값이랑 현재시간 비교하여 종료되었으면 // (토큰 존재 확인후) 낙찰자인지 확인 API 요청 request // 상품생성 API와 동일 { "productId": number; "userId": number; // 입찰자 } response { "낙찰자가 있는 상품인가": boolean; "채팅방 id": number; "채팅 상대 닉네임": string; }
Get api/v1/chatRooms?offset=&limit=
// 채팅 목록 페이지 진입시 (만약 API로 목록을 불러온다면) response [ { "chatRoomId": 2, "productInfo": { "productId": 2, "thumbnailImage": "https://user-images.githubusercontent.com/61923768/182771448-d2eefc50-7f3a-4582-8eb7-e91ebb9e94d0.png" }, "opponentUserInfo": { "username": "유재희", "profileImage": "https://lh3.googleusercontent.com/a/AItbvmmujg3pE4C3iRbHWRZCd-BtvUykZ2BaaIAuSoo7=s96-c" }, "lastMessage": "마지막 메세지", "lastMessageDate": "2022-08-10T13:13:54" } ]
// 찜하기 버튼 클릭시 request { "userId": number; "productId": number; }
// 찜 취소하기 버튼 클릭시 request { "userId": number; "productId": number; }
// 회원정보 - 찜한 상품목록 페이지 진입시 response // 입찰상품 목록 조회와 동일 [ { "id": Number, "title": String, "thumbnailImage": String, "minimumPrice": Number, "expireAt": Date, "createdAt": Date, "updatedAt": Date, }, {} // 유사 데이터 limit 개수만큼 반환 ]
// 탈퇴하기 버튼 클릭시 request { "userId": number; }
// 재입찰-완료 버튼 클릭시 request { "productId": number; "user": { "id": number; "biddingPrice": number; } } response { "id": Number // 생성된 비딩의 식별자 }
// 입찰취소 버튼 클릭시 request { "productId": number; "userId": number; }
// 수정하기 버튼 클릭시 request // 상품생성 API와 동일 { "images": [], //최대: 5개 "title": String, //최대: 32자 "minimumPrice": Number, //최소: 1000원 "category": String, <- 영어 이름(DIGITAL_DEVICE)!! "location": String, "description": String, //최대: 500자 }