Skip to content

Latest commit

 

History

History
579 lines (470 loc) · 15.1 KB

README.md

File metadata and controls

579 lines (470 loc) · 15.1 KB

프로젝트 개요

Java와 SpringBoot를 이용하여 가상의 온라인 상점 API를 구현했습니다. 이 프로젝트는 FakeStoreAPI를 기반한 것으로, 이는 실제 상점의 다양한 기능을 제공하는 JavaScript 기반 오픈소스 API 서버입니다. 상품 조회, 장바구니 관리, 사용자 인증 등의 기능을 포함하고 있습니다.

개발환경

  • 개발언어: 자바
  • IDE: IntellJ(Community Edition)
  • 프로젝트 SDK: JDK 11 -> JDK 17 (23.08.06)
  • Spring Boot: 2.7.13 -> 3.1.2 (23.08.06)
  • 의존성 관리 툴: Maven

Architecture

image

ERD 설계

image image image image

Sample Data

다음의 데이터를 추가해주세요.

API overview

image

Example Code

Products

모든 제품 가져오기

curl --location --request GET 'localhost:8080/products' \
--header 'Content-Type: application/json'

모든 제품 가져오기(페이지)

curl --location --request GET 'localhost:8080/products?page={pageNumber}' \
--header 'Content-Type: application/json'

단일 제품 가져오기

curl --location --request GET 'localhost:8080/products/{id}' \
--header 'Content-Type: application/json'

제품 가져오기(특정 개수)

curl --location --request GET 'localhost:8080/products?limit={num}' \
--header 'Content-Type: application/json'

결과 정렬 하기(asc/desc)

curl --location --request GET 'localhost:8080/products?sort=desc' \
--header 'Content-Type: application/json'

모든 카테고리 가져오기

curl --location --request GET 'localhost:8080/products/categories' \
--header 'Content-Type: application/json'

특정 카테고리의 제품 가져오기

curl --location --request GET 'localhost:8080/products/category/{categoryName}' \
--header 'Content-Type: application/json'

새로운 제품 추가

curl --location --request POST 'localhost:8080/products' \
--header 'Content-Type: application/json' \
--data-raw '{
	"title": "test product",
	"price": 13.5,
	"description": "lorem ipsum set",
	"image": "https://i.pravatar.cc",
	"category": "electronic"
}'

제품 업데이트(PUT/PATCH)

curl --location --request PUT 'localhost:8080/products/{id}' \
--header 'Content-Type: application/json' \
--data-raw '{
	"title": "test product",
	"price": 13.5,
	"description": "lorem ipsum set",
	"image": "https://i.pravatar.cc",
	"category": "electronic"
}'
curl --location --request PATCH 'localhost:8080/products/{id}' \
--header 'Content-Type: application/json' \
--data-raw '{
	"title": "test product",
	"price": 13.5,
	"description": "lorem ipsum set",
	"image": "https://i.pravatar.cc",
	"category": "electronic"
}'

제품 삭제

curl --location --request DELETE 'localhost:8080/products/{id}'
--header 'Content-Type: application/json'

Cart

모든 카트 가져오기

curl --location --request GET 'localhost:8080/carts' \
--header 'Content-Type: application/json'

단일 카트 가져오기

curl --location --request GET 'localhost:8080/carts/{id}' \
--header 'Content-Type: application/json'

카트 가져오기(특정 개수)

curl --location --request GET 'localhost:8080/carts?limit={num}' \
--header 'Content-Type: application/json'

결과 정렬 하기(asc/desc)

curl --location --request GET 'localhost:8080/carts?sort=desc' \
--header 'Content-Type: application/json'

날짜 범위 안의 카트 가져오기

curl --location --request GET 'localhost:8080/carts?startdate=2019-12-10&enddate=2020-10-10'

User의 카트 가져오기

curl --location --request GET 'localhost:8080/carts/user/{userId}'

새로운 카트 추가

curl --location --request POST 'localhost:8080/carts' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id": 1,
    "userId": 2,
    "date": "2020-03-01T00:00:00.000Z",
    "products": [
      {
        "productId": 1,
        "quantity": 2
      },
      {
        "productId": 9,
        "quantity": 1
      }
    ]
}'

카트 업데이트(PUT/PATCH)

curl --location --request PUT 'localhost:8080/carts/3' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id": 3,
    "userId": 8,
    "date": "2020-03-01T00:00:00.000Z",
    "products": [
        {
            "productId": 18,
            "quantity": 1
        }
    ]
}'
curl --location --request PATCH 'localhost:8080/carts/3' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id": 3,
    "userId": 8,
    "date": "2020-03-01T00:00:00.000Z",
    "products": [
        {
            "productId": 18,
            "quantity": 1
        }
    ]
}'

카트 삭제

curl --location --request DELETE 'localhost:8080/carts/{id}'
--header 'Content-Type: application/json'

Member

회원가입

curl --location --request POST 'localhost:8080/members/signup' \
--header 'Content-Type: application/json' \
--data-raw '{
	"name":"이름",
	"email":"이메일",
	"password":"8자이상,대소문자특수문자섞은암호",
	"birthYear":"년도",
	"birthMonth":"월",
	"birthDay":"일",
	"gender": "M or F"
}'

로그인

curl --location --request POST 'localhost:8080/members/login' \
--header 'Content-Type: application/json' \
--data-raw '{
	"email":"이메일",
	"password":"암호"
}'

회원정보 읽어오기

curl  --request GET 'http://localhost:8080/members/info' \
--header 'Authorization: Bearer 엑세스키' \
--header 'Content-Type: application/json'

로그아웃

curl --location --request DELETE 'http://localhost:8080/members/logout' \
--header 'Authorization: Bearer accessToken' \
--header 'Content-Type: application/json' \
--data '{
	"refreshToken" : "리프래시토큰"
}'

리프레시 토큰

curl --location --request POST 'http://localhost:8080/members/refreshToken' \
--header 'Content-Type: application/json' \
--data '{
	"refreshToken" : "리프래시토큰"
}'