패스트캠퍼스_백엔드_쇼핑몰 프로젝트

HJoo·2023년 4월 18일
0

DAYistory

목록 보기
4/8
post-thumbnail

🛒쇼핑몰 프로젝트


✏️Sketch


👩🏻‍💻참여

  • 유현주

⚒️기술스택

  • SpringBoot

🔧협업 도구

  • Git
  • GitHub

🗂️데이터베이스

  • H2

➕의존성

dependencies {
	implementation group: 'com.auth0', name: 'java-jwt', version: '4.3.0'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'junit:junit:4.13.1'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	}

🗒️구현 요청 사항

  • 고객은 다수이다.
  • 판매자는 한명이다.
  • 고객은 여러건의 주문을 할 수 있다.
  • 고객은 한번에 여러개의 상품을 주문할 수 있다.
  • 고객은 상품 주문시에 개수를 선택할 수 있다.

💡구현된 기능


🙋🏻‍♀️사용자 기능

  • 회원가입
  • 로그인

API 문서

1. 회원가입 (POST)
    요청 주소
        - http://localhost:8080/join
    요청 파라미터
        - application/json
        {
            "username" : "jju",
            "password" : "1234",
            "email" : "yoo@a,a"
        }
    응답 바디
        - application/json
        {
            "status": 200,
            "msg": "성공",
            "data": {
                "id": 4,
                "username": "jju",
                "email": "yoo@a,a",
                "role": "USER",
                "createdAt": "2023-04-09T22:37:00.4652234",
                "updatedAt": null
            }
        }

2. 로그인 (POST)
    요청 주소
        - http://localhost:8080/login
    요청 파라미터
        - application/json
        {
            "username" : "jju",
            "password" : "1234"
        }

    응답 바디
        - application/json
        {
            "status": 200,
            "msg": "성공",
            "data": {
                "id": 3,
                "username": "jju",
                "email": "yoo@a,a",
                "role": "USER",
                "createdAt": "2023-04-09T22:38:19.389678",
                "updatedAt": "2023-04-09T22:38:22.6968692"
            }
        }

👜상품 관련 기능

  • 판매자의 상품 등록
  • 등록된 상품들 목록 보기
  • 상품 상세보기
  • 판매자의 상품 수정
  • 판매자의 상품 삭제

API 문서

3. 상품등록 (POST)
    요청 주소
        - http://localhost:8080/upload
    요청 헤더
        - Authorization : Bearer ~    요청 파라미터
        -
        {
            "productname" : "phone",
            "price" : "500000",
            "qty" : "100"
        }
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": {
                "id": 3,
                "productname": "phone",
                "price": 500000,
                "qty": 100,
                "createdAt": "2023-04-09T22:40:20.4367407",
                "updatedAt": null
            }
        }

4. 상품목록보기 (GET)
              요청 주소
                  - http://localhost:8080/findAll
              요청 헤더
                  - Authorization : Bearer ~
              응답 바디
                  -
                  {
                      "status": 200,
                      "msg": "성공",
                      "data": [
                          {
                              "id": 1,
                              "productname": "book1",
                              "price": 10000,
                              "qty": 100,
                              "createdAt": "2023-04-09T22:38:10.774707",
                              "updatedAt": null
                          },
                          {
                              "id": 2,
                              "productname": "book2",
                              "price": 15000,
                              "qty": 100,
                              "createdAt": "2023-04-09T22:38:10.777716",
                              "updatedAt": null
                          },
                          {
                              "id": 3,
                              "productname": "phone",
                              "price": 500000,
                              "qty": 100,
                              "createdAt": "2023-04-09T22:40:20.436741",
                              "updatedAt": null
                          }
                      ]
                  }

5. 상품상세보기 (POST)
              요청 주소
                  - http://localhost:8080/find
              요청 헤더
                  - Authorization : Bearer ~
              요청 파라미터
                  -
                  {
                      "productname" : "phone"
                  }
              응답 바디
                  -
                  {
                      "status": 200,
                      "msg": "성공",
                      "data": {
                          "id": 3,
                          "productname": "phone",
                          "price": 500000,
                          "qty": 100,
                          "createdAt": "2023-04-09T22:40:20.436741",
                          "updatedAt": null
                      }
                  }

6. 상품수정하기 (PUT)
    요청 주소
        - http://localhost:8080/update
    요청 헤더
        - Authorization : Bearer ~
    요청 파라미터
        -
        {
            "productname":"phone",
            "price" : "11111",
            "qty" : "1010"
        }
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": {
                "id": 3,
                "productname": "phone",
                "price": 11111,
                "qty": 1010,
                "createdAt": "2023-04-09T22:52:36.532541",
                "updatedAt": null
            }
        }

7. 상품삭제하기 (DELETE)
    요청 주소
        - http://localhost:8080/delete/phone
    요청 헤더
        -
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": "Delete Success!"
        }

👩🏻‍💻주문 관련 기능

  • 상품 주문
  • 고객 주문 목록 보기
  • 판매자의 전체 고객 주문 목록 보기
  • 고객의 주문 취소하기
  • 판매자의 주문 취소하기

API 문서

8. 주문하기 (POST) - OrderProduct를 생성하여, OrderSheet에 추가하세요
    요청 주소
        - http://localhost:8080/order
    요청 헤더
        - Authorization : Bearer ~
    요청 파라미터
        -
        {
            "name" : "book1",
            "count" : "3"
        }
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": {
                "id": 1,
                "user": {
                    "id": 2,
                    "username": "ssar",
                    "email": "ssar@nate.com",
                    "role": "USER",
                    "createdAt": "2023-04-09T22:50:25.430306",
                    "updatedAt": "2023-04-09T22:54:36.025102"
                },
                "orderProductList": [
                    {
                        "id": 1,
                        "product": {
                            "id": 1,
                            "productname": "book1",
                            "price": 10000,
                            "qty": 97,
                            "createdAt": "2023-04-09T22:50:25.450303",
                            "updatedAt": "2023-04-09T22:54:47.5028385"
                        },
                        "count": 3,
                        "orderPrice": 30000,
                        "createdAt": "2023-04-09T22:54:47.4436669",
                        "orderSheet": 1
                    }
                ],
                "totalPrice": 30000,
                "createdAt": "2023-04-09T22:50:25.434301",
                "updatedAt": "2023-04-09T22:54:47.5028385"
            }
        }

9. 고객입장 - 주문목록보기 (GET)
    요청 주소
        - http://localhost:8080/findAllOrder
    요청 헤더
        - Authorization : Bearer ~
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": [
                {
                    "id": 1,
                    "product": {
                        "id": 1,
                        "productname": "book1",
                        "price": 10000,
                        "qty": 97,
                        "createdAt": "2023-04-09T22:50:25.450303",
                        "updatedAt": "2023-04-09T22:54:47.502839"
                    },
                    "count": 3,
                    "orderPrice": 30000,
                    "createdAt": "2023-04-09T22:54:47.443667",
                    "orderSheet": 1
                }
            ]
        }

10. 판매자입장 - 주문목록보기 (GET)
    요청 주소
        - http://localhost:8080/findAllOrder
    요청 헤더
        - Authorization : Bearer ~
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": [
                {
                    "id": 1,
                    "user": {
                        "id": 2,
                        "username": "ssar",
                        "email": "ssar@nate.com",
                        "role": "USER",
                        "createdAt": "2023-04-09T22:50:25.430306",
                        "updatedAt": "2023-04-09T22:54:36.025102"
                    },
                    "orderProductList": [
                        {
                            "id": 1,
                            "product": {
                                "id": 1,
                                "productname": "book1",
                                "price": 10000,
                                "qty": 97,
                                "createdAt": "2023-04-09T22:50:25.450303",
                                "updatedAt": "2023-04-09T22:54:47.502839"
                            },
                            "count": 3,
                            "orderPrice": 30000,
                            "createdAt": "2023-04-09T22:54:47.443667",
                            "orderSheet": 1
                        }
                    ],
                    "totalPrice": 30000,
                    "createdAt": "2023-04-09T22:50:25.434301",
                    "updatedAt": "2023-04-09T22:54:47.502839"
                }
            ]
        }

11. 고객입장 - 주문취소하기 (DELETE) - Casecade 옵션을 활용하세요. (양방향 매핑)
    요청 주소
        - http://localhost:8080/cancel
    요청 헤더
        - Authorization : Bearer ~
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": "주문이 정상적으로 취소되었습니다. "
        }

12. 판매자입장 - 주문취소하기 (DELETE) - Casecade 옵션을 활용하세요. (양방향 매핑)
    요청 주소
        - http://localhost:8080/cancel/2
    요청 헤더
        - Authorization : Bearer ~
    응답 바디
        -
        {
            "status": 200,
            "msg": "성공",
            "data": "2번 고객의 주문이 정상적으로 취소되었습니다. "
        }

🔗ER-Diagram


👩🏻‍🔧작성한 테스트 코드


🔧보완할 점

  • 요청에 대해 Dto로 받지 못한 것들이 몇 가지 있었다. 새로 Dto를 추가해서 요청에 맞는 Dto로 요청을 처리하도록 변경할 예정이다.
  • 유효성 검사 추가. 현재 null, "" 체크 정도만 구현되어 있다.
  • 데이터베이스 연관관계를 좀 더 공부해서 응답이 더 깔끔하게 나올 수 있도록 변경할 예정. 불필요하게 많은 정보의 응답이 나온다고 느꼈다.
  • ER-Diagram을 보완하기
  • AOP 적용 필요
  • JWT를 헤더에서 가져와서 인증하는 부분이 계속해서 반복되는 것을 느껴 어노테이션으로 만들었지만 기존 메서드와 연결에서 어려움이 있어서 적용을 하지는 못했다.

🌟느낀 점

  • 혼자 하는 프로젝트여서 협업에 큰 어려움이 없었지만, 다른 팀원들과 함께 하게 되면 버전 관리에 신경을 많이 써야할 것 같다.
  • 모르고 있던(배웠으나 까먹은..?) 부분도 스스로 검색하고 다시 공부하며 빈 부분이 많이 채워졌다고 느꼈다.
  • 지금까지 배운 내용이 다 들어있어서 뿌듯했다!
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글