From c980716f1206234293f1a162407f1c5542f2ad92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=B1=84=EB=A6=B0=20=28Bryn=29?= <67696767+cofls6581@users.noreply.github.com> Date: Wed, 1 Mar 2023 15:28:39 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs=20:=20=EB=A6=AC=EB=93=9C=EB=AF=B8=20?= =?UTF-8?q?=EC=B4=88=EC=95=88=20=EC=9E=91=EC=84=B1=20(#504)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs : 리드미 초안 작성 * docs : 리드미 수정 * ci : dev 브런치 푸시되면 테스트 커버리지 계산 * docs : readme 작성 --------- Co-authored-by: 이찬진 --- .../workflows/dev-merged-test-coverage.yml | 42 +++++ README.md | 167 ++++++++++++++++-- 2 files changed, 194 insertions(+), 15 deletions(-) create mode 100644 .github/workflows/dev-merged-test-coverage.yml diff --git a/.github/workflows/dev-merged-test-coverage.yml b/.github/workflows/dev-merged-test-coverage.yml new file mode 100644 index 00000000..c12ef3ef --- /dev/null +++ b/.github/workflows/dev-merged-test-coverage.yml @@ -0,0 +1,42 @@ +name: ci +on: + push: + branches: + - dev + +jobs: + spotlessJavaCheck: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: SetUp JDK 17 + uses: actions/setup-java@v2 + with: + java-version: "17" + distribution: 'adopt' + + - name: Gradle Caching + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Grant execute permission for gradlew + run: chmod +x ./gradlew + + - name: spotless check + run: ./gradlew spotlessCheck + + - name: Start containers + run: docker-compose up -d + + - name: test and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: ./gradlew test sonar --info --stacktrace diff --git a/README.md b/README.md index 2b12382a..489ccc46 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,155 @@ -# DuDoong-Backend - - -```shell -feat : 새로운 기능에 대한 커밋 -fix : 버그 수정에 대한 커밋 -build : 빌드 관련 파일 수정에 대한 커밋 -chore : 그 외 자잘한 수정에 대한 커밋 -ci : CI관련 설정 수정에 대한 커밋 -docs : 문서 수정에 대한 커밋 -style : 코드 스타일 혹은 포맷 등에 관한 커밋 -refactor : 코드 리팩토링에 대한 커밋 -test : 테스트 코드 수정에 대한 커밋 + +![Frame 4](https://user-images.githubusercontent.com/55226431/221772740-e9946fda-a24c-4b90-8871-4d1d8a340725.png) + + +

+ +# 두둥 + +> 모두를 위한 새로운 공연 라이프, 두둥! • 백엔드 레포지토리 + +

+ + +> **두둥은 홍익대학교 컴퓨터 공학과 소속 밴드부 고스락 에서 만든 서비스에요!** + +
+ +readme + +
+ +## ✨ 서비스 관련 +- [랜딩페이지](https://dudoong.com) +- [호스트 관리자 페이지](https://dudoong.com/admin) +- [서비스 소개 노션](https://dudoong.notion.site/c4999331a2aa47299e1c6821a7dee9af) +- [Storybook](https://gosrock.github.io/DuDoong-Front) +
+ +
+ +
+ +## 📚 사용 스택 +
+
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ + + +## 🔍 개발 과정 +- [찬진 : Spring disable Aop in test](https://devnm.tistory.com/24) +- [찬진 : 도커 로그 ec2환경에서 클라우드 와치로 전송하기](https://devnm.tistory.com/8) +- [경민 : Custom Enum Validator 구현하기](https://gengminy.tistory.com/47) +- [경민 : Relection 을 이용하여 Enum Validator 개선하기](https://gengminy.tistory.com/48) +- [경민 : Custom Enum Deserializer 구현하여 Enum 에 없는 값 null 로 파싱하기](https://gengminy.tistory.com/49) +- [경민 : 스프링 날짜 타입 JSON 변환 및 포맷팅하기 - @JsonFormat, @JacksonAnnotationsInside](https://gengminy.tistory.com/50) + + + + + + + + + + + + + +## 📁 Project Structure +DDD와 멀티모듈 구조를 사용했습니다. +각 도메인별 연관관계를 최대한 끊어내고 +도메인 이벤트를 활용해 도메인간의 의존성을 줄였습니다. +```bash +├── DuDoong-Api +│   └── band.gosrock.api +│   └── <각 usecase 별 패키지> # ex : order,issuedTicket +│   └── controller +│   └── dto +│   └── mapper # 분산락으로 인한 다른트랜잭션일 때 최신의 정보를 가져오기 위함 +│   └── service # usecase 파사드 형태로 다른 도메인서비스들의 반환값을 모아 응답값 생성 +├── DuDoong-Batch # 배치 서비스 어플리케이션 ( 젠킨스로 크론잡 ) +├── DuDoong-Common # 공통으로 쓰이는 어노테이션, 에러 코드등 +├── DuDoong-Domain +│   └── band.gosrock.domain +│   ├── common # 분산락 aop , 도메인 이벤트 발행 +│   └── domains +│   └── <도메인> # 각도메인 ex : order ,ticket +│   └── adaptor # 도메인 리포지토리를 한번 더 감싼 컴포넌트 +│   └── domain # 도메인 오브젝트 +│   └── exception # 도메인별 에러 정의 +│   └── repostiory # 도메인 리포지토리 +│   └── service # 도메인 서비스, 도메인 이벤트 핸들러 +├── DuDoong-Infrastructure # 레디스 , feignClient(외부 api 콜) , 메일 ( aws ses ) ,s3 등. +└── DuDoong-Socket ``` -머지시엔 스쿼시로 -커밋 전 spotlessApply 실행하기 \ No newline at end of file +## 💻 Developers + + + + + + + + + + + + + + + + + + + + + + +
Lead•BackendBackendBackendBackendBackend
이찬진김민준김원진노경민이채린
+ +
+ ImNM +
+ +
+ sanbonai06 +
+ +
+ kim-wonjin +
+ +
+ gengminy +
+ +
+ cofls6581 +
\ No newline at end of file From 62e8fa3e9806af18366b565aaab48f8b26273dd8 Mon Sep 17 00:00:00 2001 From: Chan Jin Date: Wed, 1 Mar 2023 16:12:32 +0900 Subject: [PATCH 2/2] feature : health check api (#505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat : health api * feat : security config permitall health api * docs : 코드 커버리지 추가 --- .../band/gosrock/api/config/security/SecurityConfig.java | 2 ++ .../gosrock/api/example/controller/ExampleController.java | 5 +++++ README.md | 6 ++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/config/security/SecurityConfig.java b/DuDoong-Api/src/main/java/band/gosrock/api/config/security/SecurityConfig.java index 90a8c59c..4706004c 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/config/security/SecurityConfig.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/config/security/SecurityConfig.java @@ -80,6 +80,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .permitAll() .mvcMatchers(HttpMethod.GET, "/v1/events/search") .permitAll() + .mvcMatchers(HttpMethod.GET, "/v1/examples/health") + .permitAll() .mvcMatchers(HttpMethod.POST, "/v1/coupons/campaigns") .hasRole("SUPER_ADMIN") // 인증 이필요한 모든 요청은 USER 권한을 최소한 가지고있어야한다. diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/example/controller/ExampleController.java b/DuDoong-Api/src/main/java/band/gosrock/api/example/controller/ExampleController.java index 5015b1ac..f0a71bb2 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/example/controller/ExampleController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/example/controller/ExampleController.java @@ -8,6 +8,7 @@ import band.gosrock.common.annotation.ApiErrorCodeExample; import band.gosrock.common.annotation.ApiErrorExceptionsExample; import band.gosrock.common.annotation.DevelopOnlyApi; +import band.gosrock.common.annotation.DisableSwaggerSecurity; import band.gosrock.common.exception.GlobalErrorCode; import band.gosrock.domain.domains.cart.exception.CartErrorCode; import band.gosrock.domain.domains.coupon.exception.CouponErrorCode; @@ -47,6 +48,10 @@ public ExampleResponse get() { return exampleApiService.getExample(); } + @GetMapping("/health") + @DisableSwaggerSecurity + public void health() {} + @PostMapping @ApiErrorExceptionsExample(ExampleException2Docs.class) public ExampleResponse create() { diff --git a/README.md b/README.md index 489ccc46..a28c2899 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ ![Frame 4](https://user-images.githubusercontent.com/55226431/221772740-e9946fda-a24c-4b90-8871-4d1d8a340725.png) - -

+[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Gosrock_DuDoong-Backend&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Gosrock_DuDoong-Backend) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Gosrock_DuDoong-Backend&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Gosrock_DuDoong-Backend) +[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=Gosrock_DuDoong-Backend&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=Gosrock_DuDoong-Backend) +
# 두둥