상품 리뷰 서버 (SpringBoot + RDS)

상품 정보 제공, 리뷰 작성/수정/삭제 기능을 지원하는 RESTful API 서버입니다.

Java 17Spring BootMavenRDS

서버 실행 방법

다운로드한 zip 파일을 압축 해제한 후, 다음 명령어로 서버를 실행할 수 있습니다:

java -jar food-review-server.jar

서버가 성공적으로 실행되면 localhost:8080에서 API를 사용할 수 있습니다.

Swagger UI는 localhost:8080/swagger-ui.html에서 확인할 수 있습니다.

API 명세서

제품 목록 조회

GET/api/products

모든 제품을 페이지별로 조회합니다.

쿼리 파라미터

page (int): 페이지 번호 (필수)
size (int): 페이지당 항목 수 (필수)
category (String): 카테고리 필터 (선택)

응답 예시

{
  "content": [
    {
      "id": 1,
      "name": "상품명",
      "description": "상품 설명",
      "price": 10000,
      "category": "카테고리",
      "stockQuantity": 100,
      "averageRating": 4.5,
      "reviewCount": 50
    }
  ],
  "totalPages": 10,
  "totalElements": 100,
  "currentPage": 1,
  "pageSize": 10
}

제품 상세 조회

GET/api/products/{productId}

특정 제품의 상세 정보와 리뷰를 조회합니다.

쿼리 파라미터

productId (long): 제품 ID (Path Parameter)

응답 예시

{
  "product": {
    "id": 1,
    "name": "상품명",
    "description": "상품 설명",
    "price": 10000,
    "category": "카테고리",
    "stockQuantity": 100,
    "averageRating": 4.5,
    "reviewCount": 50
  },
  "reviews": [
    {
      "id": 1,
      "userId": 1,
      "nickname": "사용자닉네임",
      "rating": 5,
      "content": "리뷰 내용",
      "createdAt": "2023-01-01T00:00:00"
    }
  ]
}

오류 응답

404 Not Found

리뷰 생성

POST/api/products/{productId}/reviews

특정 제품에 대한 리뷰를 생성합니다.

쿼리 파라미터

productId (long): 제품 ID (Path Parameter)

요청 본문

{
  "userId": 1,
  "rating": 5,
  "content": "리뷰 내용"
}

응답 예시

201 Created

오류 응답

400 Bad Request, 404 Not Found

리뷰 수정

PUT/api/reviews/{reviewId}

기존 리뷰를 수정합니다.

쿼리 파라미터

reviewId (long): 리뷰 ID (Path Parameter)

요청 본문

{
  "userId": 1,
  "rating": 4,
  "content": "수정된 리뷰 내용"
}

응답 예시

200 OK

오류 응답

400 Bad Request, 404 Not Found

리뷰 삭제

DELETE/api/reviews/{reviewId}

기존 리뷰를 삭제합니다.

쿼리 파라미터

reviewId (long): 리뷰 ID (Path Parameter)
userId (long): 사용자 ID (필수)

응답 예시

204 No Content

오류 응답

404 Not Found

사용자 리뷰 목록 조회

GET/api/users/{userId}/reviews

특정 사용자의 리뷰 목록을 조회합니다.

쿼리 파라미터

userId (long): 사용자 ID (Path Parameter)
page (int): 페이지 번호 (선택, 기본값: 1)
size (int): 페이지당 항목 수 (선택, 기본값: 10)

응답 예시

{
  "content": [
    {
      "id": 1,
      "productId": 1,
      "productName": "상품명",
      "rating": 5,
      "content": "리뷰 내용",
      "createdAt": "2023-01-01T00:00:00",
      "updatedAt": "2023-01-01T00:00:00"
    }
  ],
  "totalPages": 5,
  "totalElements": 50,
  "currentPage": 1,
  "pageSize": 10
}

오류 응답

404 Not Found

사용자 생성 (회원가입)

POST/api/users

새로운 사용자를 생성합니다.

요청 본문

{
  "email": "user@example.com",
  "password": "password123",
  "nickname": "닉네임"
}

응답 예시

{
  "status": "success"
}

오류 응답

400 Bad Request, 409 Conflict, 500 Internal Server Error

사용자 로그인

POST/api/users/login

사용자 로그인을 처리합니다.

요청 본문

{
  "email": "user@example.com",
  "password": "password123"
}

응답 예시

{
  "status": "success"
}

오류 응답

400 Bad Request, 401 Unauthorized, 500 Internal Server Error