Code Monkey home page Code Monkey logo

be-04-wadizlove's Introduction

wadizlove (1)-min

WadizLove

백엔드 히히팀 wadiz 클론코딩


👟 프로젝트 소개
💗 팀 소개
🛠 기술 협업 tool 소개
🍰 ERD
🍓 Architecture
🥝 프로젝트 패키지 구조
🍉 프로젝트 실행 방법

👟 프로젝트 소개

image

크라우드 펀딩 플랫폼 서비스인 Wadiz


💸 크라우드 펀딩이란(Crowd funding) ?

자금이 부족하거나 없는 사람들이 프로젝트를 인터넷에 공개하고 목표 금액과 모금 기간을 정하여 익명의 다수(crowd)로부터 투자를 받는 행위를 일컫는다.


🧑‍🤝‍🧑 서포터와 메이커

  • 사용자는 서포터와 메이커 두가지의 역할로서 와디즈 서비스에 참여할 수 있다.

  • 메이커는 프로젝트를 개설하여 펀딩 하고자 하는 리워드를 등록하고, 펀딩 목표 금액, 프로젝트 마감일자 등을 등록하여 프로젝트를 런칭한다.

  • 서포터는 메이커가 런칭한 프로젝트의 원하는 리워드를 선택하여 펀딩에 참여한다.

  • 펀딩이 프로젝트 마감 일자 전까지 일정 금액 이상을 달성하면 주문이 정상 진행된다.


👑 와디즈 펀딩 서비스 절차

1. 원하는 프로잭트 click !

2. 주문하고자 하는 리워드 선택

3. 결제 예약

4. 프로젝트 마감 후 & 펀딩 목표 금액 달성 시 주문 정상 진행


[프로젝트 목표]

와디즈 펀딩 서비스를 클론 코딩하여 스프링,jpa를 적용한다.

[프로젝트 기간]

프로젝트 기간 : 2023/0828 ~ 2023/09/22


🍋 프로젝트 팀 노션

https://www.notion.so/Team-6535d86acd9c4843b5f06d4d1d4375de


💗 팀 소개

Product Owner Scrum Master Tech Leader Mentor Sub Mentor
신예진 조재현 최준혁 히히 유민환

🛠 기술 협업 tool 소개

🛠 기술 스택 🛠

✏️ 문서/협업 ✏️

🍓 Architecture

new wadiz 아키텍처

🍰 ERD

image

🔗ERD 보러가기

🥝 프로젝트 패키지 구조

패키지 구조 확인하기
├── main
│   ├── java
│   │   └── com
│   │       └── prgrms
│   │           └── wadiz
│   │               ├── WadizApplication.java
│   │               ├── domain
│   │               │   ├── BaseEntity.java
│   │               │   ├── funding
│   │               │   │   ├── FundingCategory.java
│   │               │   │   ├── FundingStatus.java
│   │               │   │   ├── controller
│   │               │   │   │   └── FundingController.java
│   │               │   │   ├── dto
│   │               │   │   │   ├── request
│   │               │   │   │   │   ├── FundingCreateRequestDTO.java
│   │               │   │   │   │   └── FundingUpdateRequestDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       └── FundingResponseDTO.java
│   │               │   │   ├── entity
│   │               │   │   │   └── Funding.java
│   │               │   │   ├── repository
│   │               │   │   │   └── FundingRepository.java
│   │               │   │   └── service
│   │               │   │       └── FundingService.java
│   │               │   ├── maker
│   │               │   │   ├── MakerStatus.java
│   │               │   │   ├── controller
│   │               │   │   │   └── MakerController.java
│   │               │   │   ├── dto
│   │               │   │   │   ├── MakerServiceDTO.java
│   │               │   │   │   ├── request
│   │               │   │   │   │   ├── MakerCreateRequestDTO.java
│   │               │   │   │   │   └── MakerUpdateRequestDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       └── MakerResponseDTO.java
│   │               │   │   ├── entity
│   │               │   │   │   └── Maker.java
│   │               │   │   ├── respository
│   │               │   │   │   └── MakerRepository.java
│   │               │   │   └── service
│   │               │   │       └── MakerService.java
│   │               │   ├── order
│   │               │   │   ├── OrderStatus.java
│   │               │   │   ├── controller
│   │               │   │   │   └── OrderController.java
│   │               │   │   ├── dto
│   │               │   │   │   ├── request
│   │               │   │   │   │   └── OrderCreateRequestDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       └── OrderResponseDTO.java
│   │               │   │   ├── entity
│   │               │   │   │   └── Order.java
│   │               │   │   ├── repository
│   │               │   │   │   └── OrderRepository.java
│   │               │   │   └── service
│   │               │   │       └── OrderService.java
│   │               │   ├── orderReward
│   │               │   │   ├── dto
│   │               │   │   │   ├── request
│   │               │   │   │   │   └── OrderRewardCreateRequestDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       └── OrderRewardResponseDTO.java
│   │               │   │   └── entity
│   │               │   │       └── OrderReward.java
│   │               │   ├── post
│   │               │   │   ├── controller
│   │               │   │   │   └── PostController.java
│   │               │   │   ├── dto
│   │               │   │   │   ├── request
│   │               │   │   │   │   ├── PostCreateRequestDTO.java
│   │               │   │   │   │   └── PostUpdateRequestDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       └── PostResponseDTO.java
│   │               │   │   ├── entity
│   │               │   │   │   └── Post.java
│   │               │   │   ├── repository
│   │               │   │   │   └── PostRepository.java
│   │               │   │   └── service
│   │               │   │       └── PostService.java
│   │               │   ├── project
│   │               │   │   ├── ProjectStatus.java
│   │               │   │   ├── condition
│   │               │   │   │   └── ProjectSearchCondition.java
│   │               │   │   ├── controller
│   │               │   │   │   └── ProjectController.java
│   │               │   │   ├── dto
│   │               │   │   │   ├── ProjectServiceDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       ├── PagingDTO.java
│   │               │   │   │       ├── ProjectPageResponseDTO.java
│   │               │   │   │       ├── ProjectResponseDTO.java
│   │               │   │   │       └── ProjectSummaryResponseDTO.java
│   │               │   │   ├── entity
│   │               │   │   │   └── Project.java
│   │               │   │   ├── repository
│   │               │   │   │   ├── ProjectRepository.java
│   │               │   │   │   ├── ProjectRepositoryCustom.java
│   │               │   │   │   └── ProjectRepositoryImpl.java
│   │               │   │   └── service
│   │               │   │       └── ProjectUseCase.java
│   │               │   ├── reward
│   │               │   │   ├── RewardStatus.java
│   │               │   │   ├── RewardType.java
│   │               │   │   ├── controller
│   │               │   │   │   └── RewardController.java
│   │               │   │   ├── dto
│   │               │   │   │   ├── request
│   │               │   │   │   │   ├── RewardCreateRequestDTO.java
│   │               │   │   │   │   └── RewardUpdateRequestDTO.java
│   │               │   │   │   └── response
│   │               │   │   │       └── RewardResponseDTO.java
│   │               │   │   ├── entity
│   │               │   │   │   └── Reward.java
│   │               │   │   ├── repository
│   │               │   │   │   └── RewardRepository.java
│   │               │   │   └── service
│   │               │   │       └── RewardService.java
│   │               │   └── supporter
│   │               │       ├── SupporterStatus.java
│   │               │       ├── controller
│   │               │       │   └── SupporterController.java
│   │               │       ├── dto
│   │               │       │   ├── request
│   │               │       │   │   ├── SupporterCreateRequestDTO.java
│   │               │       │   │   └── SupporterUpdateRequestDTO.java
│   │               │       │   └── response
│   │               │       │       └── SupporterResponseDTO.java
│   │               │       ├── entity
│   │               │       │   └── Supporter.java
│   │               │       ├── repository
│   │               │       │   └── SupporterRepository.java
│   │               │       └── service
│   │               │           └── SupporterService.java
│   │               └── global
│   │                   ├── annotation
│   │                   │   ├── ApiErrorCodeExample.java
│   │                   │   ├── EnumValidator.java
│   │                   │   └── ValidEnum.java
│   │                   ├── config
│   │                   │   ├── CachingConfig.java
│   │                   │   ├── ExampleHolder.java
│   │                   │   ├── JpaAuditingConfig.java
│   │                   │   ├── QueryDSLConfig.java
│   │                   │   └── SwaggerConfig.java
│   │                   └── util
│   │                       ├── exception
│   │                       │   ├── BaseException.java
│   │                       │   ├── ErrorCode.java
│   │                       │   └── GlobalExceptionHandler.java
│   │                       └── resTemplate
│   │                           ├── CommonCode.java
│   │                           ├── ListResult.java
│   │                           ├── ResponseFactory.java
│   │                           ├── ResponseTemplate.java
│   │                           └── SingleResult.java
│   └── resources
│       ├── application-dev.yml
│       ├── application-local.yml
│       └── application.yml
└── test
    └── java
        └── com
            └── prgrms
                └── wadiz
                    ├── WadizApplicationTests.java
                    └── domain
                        ├── funding
                        │   └── service
                        │       └── FundingServiceTest.java
                        ├── maker
                        │   ├── controller
                        │   │   └── MakerControllerTest.java
                        │   └── service
                        │       └── MakerServiceTest.java
                        ├── order
                        │   ├── controller
                        │   │   └── OrderControllerTest.java
                        │   └── service
                        │       └── OrderServiceTest.java
                        ├── post
                        │   └── service
                        │       └── PostServiceTest.java
                        ├── reward
                        │   ├── controller
                        │   │   └── RewardControllerTest.java
                        │   └── service
                        │       └── RewardServiceTest.java
                        └── supporter
                            ├── controller
                            │   └── SupporterControllerTest.java
                            └── service
                                └── SupporterServiceTest.java


🍉 프로젝트 실행 방법

using Github Project

  1. github에서 프로젝트를 다운받는다.

https://github.com/prgrms-be-devcourse/BE-04-WadizLove.git

  1. bootjar를 실행한다.

  2. Query DSL 컴파일한다.

  3. 터미널에서 도커 컴포즈 빌드 명령어를 입력한다.

    docker-compose up --build
    

be-04-wadizlove's People

Contributors

born-a avatar handmadecloud avatar hi-june avatar

Stargazers

 avatar

be-04-wadizlove's Issues

[Feat] 펀딩 시스템: WDZL-106 Project 개설 전, Funding에 대한 검증

✨ 구현 할 기능

Maker가 Project 개설 후, Funding을 수정 및 삭제하는 과정에서 예외적인 상황을 검증합니다.

📢 구현 방식

각 필드들에서 Valid 어노테이션을 통해 검증

  1. DTO에서 검증
  2. 도메인에서 검증

문제되는 상황에 맞춰서 검증

  1. Project가 이미 개설 된 후, Funding에 대한 수정 및 삭제 시도 시 예외를 던지도록 구현

[Feat] Project 시스템: 프로젝트 다건 조회 커서 페이징 구현

[Feat,Refactor] Order validation, id값 반환

✨ 구현 할 기능

주문을 생성하면 주문 id 값을 반환한다.
주문 validation을 구현한다.

📢 구현 방식


특별한 내용이 없어서 생략

📕 래퍼런스

[Feat] Funding 시스템: 펀딩 날짜에 대한 검증

✨ 구현 할 기능

펀딩 정보를 게시 및 수정하는 상황에서 펀딩 종료 시점이 펀딩 시작 시점보다 앞설 수 없다.

📢 구현 방식

funding service layer에서 검증하는 메소드를 추가한다.

[Feat] 주문 리워드당 금액, 주문 총 금액 산출

✨ 구현 할 기능

주문 당 금액, 주문 총 금액을 산출한다.

📢 구현 방식

메소드당 연산을 하는 방식, 혹은 연산결과를 저장하는 방식 중 더 나은 방법을 선택해서 사용할 예정


📕 래퍼런스

[Feat] project,post,funding,reward swagger api 명세 구체화

✨ 구현 할 기능

  • project,post,funding,reward swagger api 명세 구체화
  • projectcontroller 클래스 분리하기(funding,reward,post =>api/project로 시작하게끔 수정하기)
  • default로 요청할 때 미리 데이터를 입력받을 수 있도록 해보기(swagger, example)
  • successResult, singleResult 구분해서 처리하기

📢 구현 방식

@operation, @Schema, @ApiResponse

[Refactor] funding파트, order 파트 비즈니스로직 리팩토링

✨ 리팩토링 대상

funding삭제(런칭전)하는 메소드 구현하기
fundingTargetAmount 0 검증하기
presentorfuture 어노테이션 에러처리 응답값에 보여주도록하기
order쪽 데이터 반환값 확인 필요

📢 리팩토링 이유

리팩토링을 하게된 이유에 대해 설명해주세요!


📕 래퍼런스

[Feat] 펀딩 시스템: WDZL-105 Project 개설 전, Post에 대한 검증

✨ 구현 할 기능

Maker가 Project 개설 후, Post를 수정 및 삭제하는 과정에서 예외적인 상황을 검증합니다.

📢 구현 방식

각 필드들에서 Valid 어노테이션을 통해 검증

  1. DTO에서 검증
  2. 도메인에서 검증

문제되는 상황에 맞춰서 검증

  1. Project가 이미 개설 된 후, Post에 대한 수정 및 삭제 시도 시 예외를 던지도록 구현

[Feat] 주문 시스템 WDZL-94- 유저가 주문한 목록을 조회한다.

✨ 구현 할 기능

서포터의 구체적인 주문 목록 조회와 서포터가 주문했던 목록을 조회하는 건 차이가 있음
여기서는 간략한 주문 정보를 보여주는 기능을 구현한다.

📢 구현 방식

Supporter에서 주문을 조회하는 로직을 구현한다.


📕 래퍼런스

[Refactor] Order 정보에 프로젝트 개념을 도입한다.

✨ 리팩토링 대상

Order-Project 연관관계를 생성한다.
Order 에서 조회 메서드에서 project 정보를 조회할 수 있도록 일부를 수정한다.

📢 리팩토링 이유

메이커가 자신이 런칭한 프로젝트의 정보를 확인하기 어려움

📕 래퍼런스

[Feat] 프로젝트 공통부분 정의

✨ 구현 할 기능

프로젝트라는 상위 도메인 개념을 만들어 독립적으로 개발을 진행할 수 있다.

📢 구현 방식


📕 래퍼런스

[Feat] swagger 설정 추가

✨ 구현 할 기능

api에 대한 설명을 위해 swagger 설명을 추가한다.

📢 구현 방식


📕 래퍼런스

[Feat] 사용자 시스템 : WDZL-37 Supporter, Maker crud

✨ 구현 할 기능

  • Supporter - crud (soft delete)
  • Maker - crud (sofft delete)
  • 단위테스트 (mockito)

📢 구현 방식

soft - delete의 경우 activated 필드 추가 + @SQLDelete 를 사용하였습니다.


📕 래퍼런스

image

[Feat] 펀딩 시스템: WDZL-19 Maker의 Post와 Funding에 대한 CRUD

✨ 구현 할 기능

펀딩 게시글에 대한 기본 기능을 구현합니다.

  1. 게시글 등록
  2. 게시글 조회
  3. 게시글 수정
  4. 게시글 삭제

📢 구현 방식

Post와 Funding에 대한 각각의 서비스부터 구현합니다.
연관된 기능들에 대한 개발은 추후에 상위 서비스에서 각 서비스를 호출하도록 구현할 예정입니다.

[Feat] 펀딩 시스템: WDZL-74 Post와 Funding에 대한 검증 로직

✨ 구현 할 기능

  1. Post와 Funding에 대한 정보를 생성할 때, 잘못된 값이 전달될 경우를 대비하여 검증하는 기능
  2. 구현한 검증 로직에 대한 test code 작성

📢 구현 방식

DTO의 각 필드에서 어노테이션들을 이용하여 기본적인 검증을 하는 식으로 구현(@Valid 어노테이션)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.