Skip to content

Commit

Permalink
v0.0.0 (#41)
Browse files Browse the repository at this point in the history
* Test/test ci (#2)

* Gitactions Test (#1)

* feat : 소나큐브 플러그인 의존성추가

* fix: 그래들 파일 수정

* feat: CI용 워크플로우생성

* feat : 테스트용 커밋

* fix: 잘못된 디렉토리명 수정

* feat : CI실패 시 디스코드 알림 추가

* test : CI 테스트를 위한 커밋

* feat: 그래들 캐시 추가, 불필요한 스크립트 제거

* Bp 3 spring project  (#3)

* chore : h2, p6spy의존성 추가

* feat : 응답을 위한 클래스 생성

* feat : 에러코드 공통 관리를 위한 Enum생성

* feat : 전역 에러 핸들러 추가

* remove : 불필요한 파일 삭제

* feat : 워크플로우 수정

* feat : 생성자 파라매터 수정, Of 메소드 수정

* Bp 4 swagger configuration (#4)

* chore : RestDocs, Swagger 의존성추가

* feat : 테스트용 컨트롤러 작성

* feat : RestDocsTest 어노테이션 생성

* test : 스웨거 컨트롤러를 위한 테스트 코드 작성

* Bp 12 implement user login (#5)

* chore : 스프링 시큐리티, 테스트 모듈 추가

* Feat : 스프링 시큐리티를 위한 UserDetail기능 재작성, 핸들러 작성

* feat : 전역 에러 핸들러에 비즈니스 에러 핸들러 추가

* feat : 비즈니스 로직에서 발생하는 예외를 정의하는 클래스 정의

* feat : 사용자 인증관련 에러코드 추가, 응답클래스에 메소드 추가

* refactor : 사용하지 않는 클래스 의존 삭제

* test : 로그인 기능 테스트 코드 작성

* remove : 필요없는 파일 삭제

* feat : 유저 권한 Enum클래스와 로그인 시 권한을 부여하는 기능 추가

* feat : 멤버 엔티티, 레포지토리 생성

* test : 로그인 통합 테스트 작성

* hotfix : 불필요한 파라매터설정 제거

* fix : 코드리뷰 적용 csrf 적용 및 스프링시큐리티로 세션저장 활성화

* refactor : 불필요한 상태값 제거에 따른 타입 변경

* Bp 24 implement user crud (#9)

* Bp 25 implement user registration (#6)

* feat : 회원가입 api 권한 수정, 엔드포인트 prefix 메소드 추가

* feat : 에러코드, 커스텀 에러 추가, 전역 핸들러에 로직구현

* feat : 회원가입 DTO추가, 멤버 컨트롤러 추가

* feat : 멤버 서비스 추가, 회원가입 기능 추가

* test : 컨트롤러 테스트, 유닛테스트 작성

* feat : 유저 비밀번호 암호화 추가

* rename : 파일 위치 수정

* test : 암호화 로직 추가

* rename : DTO 컨트롤러 패키지로 이동

* refactor : 매직넘버 삭제, HttpStatus사용

* refactor : 기존 ErrorCode를 인터페이스화, 도메인마다 에러코드 정의

* refactor : 에러코드 구조 변경에 따른 코드 수정

* chore : spring-validation 추가

* Bp 26 implement user withdraw (#8)

* feat : 객체 생성 시 필드 체크를 위한 Validator생성

* feat : 멤버 엔티티객체 필드 기본값 수정, 탈퇴로직 구현

* feat : 회원 탈퇴 로직 구현

* feat : 시큐리티 회원가입, 로그인 csrf해제

* feat : 시큐리티 유틸성 클래스 추가

* feat : 멤버 서비스 예외 추가와 에러코드 추가

* style : 코드 포맷 수정

* test: 테스트코드 수정, 삭제 테스트코드 작성

* feat : Spring Validation에서 발생하는 에러 핸들링

* test : mock user 어노테이션추가

* refactor : 코드리뷰 적용

* fix ; csrf 비활성화

* feat : 식별자 전략 명시 IDENTITY

* Bp 14  attendance api (#7)

* feat: Event 엔티티 생성

* feat: 특정 달의 이벤트 목록 조회

* feat: Participants 엔티티

* feat: 출석 기능 (Google Oauth 부분은 뼈대만)

* feat: Event Controller 작성 및 테스트, 문서 생성

* chore: validator와 Oauth Client 추가

* feat: Google OIDC를 이용한 사용자 출석 (draft)

* feat: 이벤트 출석 등록 -> 출석 URL (for QR Code) 생성

* comment: TODO, 출석 만료 기능 필요

* fix: 출석 API를 GET으로 변경, security matcher 수정 및 request 유지

* feat: security config conflict 정리

* feat: validation 책임을 Entity가 아닌 Factory로 전가

* feat: dto를 service layer가 아닌 presentational layer에서 정의

* feat: Event 도메인의 Custom ErrorCode와 Exception 정의

* style: `@RequiredArgsConstructor` 활용

* style: gwt 다듬기

* chore: 실 credential 반영

* fix: presentational layer test에 `@SpringbootTest`를 사용하도록 일괄 변경

* fix: HTTP METHOD 정정 (post -> get)

* feat: QR Login 구현

* chore: build 실패시 artifact로 report 보관

* fix: spring build directory 정정

* fix: CI, application.yml profile 맞춤

* fix: CI, yml 문법

* chore: jacoco 추가

* fix: jacocoTestReport

* Bp 35 implement email sending (#10)

* chore : Spring-mail 의존성 추가

* feat : 이메일, 수신자 엔티티, 레포지토리 생성

* feat : Email전송 컨트롤러 작성

* feat : 이메일서비스 작성

* feat : 이메일 전송 클라이언트 설정, 전송 로직작성

* test : 컨트롤러 테스트 작성

* format : reformat codes indentation 2space로 수정

* feat : 클래스 이름 수정, 연관관계 매핑

* feat : toEntity생성, 적용

* rename : 네이밍 수정

* refactor : 컨벤션에 맞게 의존성 변경

* feat : 기본 트랜잭션 설정 read only로 명시

* refactor : 불필요한 import 제거

* feat : 에러 처리 분기 수정

* test : 이메일 기능 테스트코드 작성

* Bp 27  출석현황조회 api (#11)

* feat: 학과 필드 추가

* feat: `AttendanceInfo` DTO, query 구현

* feat: 출석 현황 조회 Controller & Test

* feat: 출석 현황 조회 Service

* feat: `AttendanceInfo`에 participantId field 추가

* fix: 출석 현황 조회에 멤버 외의 인원이 출석한 경우 error가 발생하지 않도록 수정

* feat: 멤버 출석 현황 수정 기능

* feat: 멤버 출석 현황 수정 controller 작성 및 test

* fix: DTO 전환 과정에서 immutable list로 초기화되어 이후 수정이 불가능했던 문제 해결

* fix: 유효하지 않은 `participantId`의 출석 수정 요청 exception handling

* fix: Event에 이미 출석이 존재할 경우, 중복 생성을 막음

* chore: gradle task `openapi3`, type casting

* style: `MemberToParticipantMapper`에서 `ParticipantMapper`로 이름 변경

* feat: 출석 현황 수정 request payload 형식 변경

* refactor: `Member` To` Participant` Mapping 과정에서 `Member`에 존재하지 않던 `attendance` field를 기본으로 false로 설정

* Bp 36 implement email cancellation (#14)

* feature : EmailTask로 네이밍 변경, VO 생성

* remove : 엔티티이름 변경에 따른 클래스 삭제

* feat : 이메일작업 레포지토리생성

* feature : 이메일 작업등록 관련 에러, 에러코드 추가

* feature : 이메일 작업 수정, 조회, 삭제 로직 추가

* feature : DTO와 Mapper 작성

* test : 컨트롤러 테스트 작성

* feat : 이메일 서비스 작성, 헬퍼 클래스 추가

* test : 이메일 서비스 코드 추가

* refactor : 팀 컨벤션 적용

* refactor : 생성자 접근 범위 조정

* refactor : 엔티티 이름 변경에 따른 수정

* test : 테스트코드 수정

* rename : 이메일 클라이언트에서 발생하는 에러코드로 이름 수정

* test : EmailTask 테스트코드 작성

* Bp 38 retrospect crud api implementation (#12)

* feat: 이벤트 및 회고 등록 기능

* feat: 이벤트 등록 controller 작성 및 테스트

* feat: 이벤트 회고 조회 기능

* feat: 이벤트 회고 조회 controller & 테스트

* feat: 이벤트 회고 수정 기능

* feat: 이벤트 회고 수정 controller 및 test

* refactor: `Retrospect`를 `Event`의 Embedding으로 변경

* fix: `@Valid`를 통한 dto 검증 추가

* Bp 39 implement email scheduler (#15)

* feat : 미전송 작업 조회, 작업완료 메소드 추가

* feat : 미전송 작업 쿼리 추가

* feat : 스케줄러 설정파일 작성

* feat : 작업 정보 메모리 저장소 작성

* feat : 작업 조회 관련 에러 및 코드 추가

* feat : 작업 스케줄러 추가

* feat : DTO에서 entity로 파라매터 수정

* feat : 스케줄 관련 업데이트 적용

* feat : 이메일 전송 로그 추가

* test : 이메일 스케줄 서비스 테스트코드 작성

* refactor : unused import 삭제

* test : 이메일 스케줄링 통합테스트 작성

* feat : 작업 스케줄 서비스 추가

* test : 로직 수정 테스트코드에 반영

* style : 카멜케이스 적용

* feat : 에러코드 정의 변경

* feat : cancel중 다른 스레드 접근 불가능하게 락 적용

* refactor : 함수 네이밍 변경

* refactor : remove save() method

* rename : EmailScheduleServiceTest 이름 수정

* feat : 디스코드 알림 웹 훅을 위한 클라이언트 작성

* feat : RestTemplate 설정파일 작성

* feat : 디스코드 문자열 상수 정의

* feat : 이메일 전송 에러처리 추가

* rename : 위치 수정

* test : 이메일 전송 실패시 디스코드 알림 테스트 추가

* refactor : 에러를 받아서 디스코드 메세지를 만드는 로직을 디스코드 메세지에서 작성

* test : 디스코드 메세지 테스트 작성

* refactor : 반드시 발생하는 상황 finally로 실행부분 변경

* fix : 이메일 저장후 바로 조회 시 조회가 안되는 이슈 수정 (#16)

* fix : 이메일 저장후 바로 조회 시 조회가 안되는 이슈 수정

* fix : 사용하는 메소드 수정에 따른 test코드 모킹 변경

* Bp 37 event crud api implementation (#13)

* chore: aws-s3 모듈 추가

* feat: s3 presigned url 기능

* feat: 당장 불필요한 Member Profile Image 주석처리

* change: 이달의 출석 조회를 `EventController`에서 `AttendanceController`로 이동

* feat: S3 Storage Client

* feat: `EventImages`

* feat: 불필요한 파일 삭제 (`ImageController/Service`)

* feat: `Event` CRUD 기능

* feat: `Event` CRUD Controller

* fix: 일대다 Mapping에서 변경이 전파되도록 수정

* fix: 이미지 URL을 반환하도록 변경

* fix: 이벤트 상세 조회에 Image key를 반환하도록 수정

* fix: 사진 추가를 Optional하게 변경

* fix: 잘못된 에러 메시지 수정 + object key에 확장자 포함

* fix: Spring Security Matcher가 정상 동작하도록 변경 (출석 Entry 수정)

* fix: Spring Security Matcher가 정상 동작하도록 변경 (출석 Entry 수정)

* test: 회원 출석 url 변경 반영

* test: 누락되었던 인증 정보 추가

* test: 이벤트 CRU 테스트

* style: redundant 삭제

* refactor: 혼동을 줄이기 위해 `equals` override

* refactor: 혼동을 줄이기 위해 `equals`를 `isKeyEqual`로 변경

* feat: S3 object URL에 object key가 포함되어 있음!!

* refactor: DTO에 생성 위임

* style: rename(`S3Config` -> `S3Properties`)

* refactor: String format으로 + 연산 줄이기

* fix: S3 property를 제대로 읽어오도록 수정

* fix: 모든 Event 조회에 N+1 문제 해결

* Fix redefine email receivers (#17)

* fix : 이메일 개수가 증가할 시 제한에 걸리는 이슈로 컬렉션 테이블 분리

* feat : 트랜잭션 템플릿으로 새로운 트랜잭션 생성 및 롤백

* fix : Resttemplate Post요청시 URI타입 캐스팅

* Fix: 로그인 성공 후 스태틱 페이지가 없어 발생하는 에러 수정 (#18)

* fix: 로그인 성공 후 스태틱 페이지가 없어 발생하는 에러 수정

* fix: test가 3xx가 아닌 200을 기다리도록 수정

* fix: test가 redirection url을 기대하지 않음

* Fix: error response (#21)

* fix: `BusinessException`을 response 할 때, name 대신 `logMessage`를 반환하던 문제 해결

* fix: 4xx 대신 5xx를 반환하던 문제 해결

* fix: fallback handler의 인자를 `RuntimeException`에서 `Exception`으로 변경

* Fix jpa element collection type (#20)

* fix : List에서 Set으로 자료구조 변경

* feat : EmailReceviers 자료구조 변경 적용

* feat : Set 삭제, 추가 메소드

* feat : 변경전 수신자들과 비교하는 함수 추가

* feat : 시그니처 변경 및 타입수정

* feat : 업데이트된 수신자와 기존 값 비교후 병합메소드 추가

* refactor : optimize imports

* test: 이메일 작업 전송대상 업데이트 필터링 테스트

* Fix: `not found` and `login failure` response (#22)

* fix: 404 응답이 500으로 가던 문제 해결

* fix: 로그인 Content-Type이 `x-www-urlencoded`가 아니어서 회원 정보가 제대로 전달되지 않는 경우의 에러 코드 변경

* fix: 로그인 실패 테스트 입력이 의도와 달랐던 문제 해결

* fix: [dev] CORS 비활성화 (#23)

* feat: 사용자가 로그인 된 상태인지 확인하는 API (#24)

* fix: API에 인증받지 않은 사용자가 요청 시 302 대신 401로 반환하도록 수정 (#25)

* fix: 이벤트 이미지가 없을 경우 이벤트를 조회할 수 없던 문제 해결 (#26)

* fix: 이벤트에 누락된 속성(`장소`) 추가 (#27)

* Refactor attendance api (#28)

* Change: include retrospect into event detail (#29)

* change: 이벤트 조회에 이벤트 회고가 함께 조회되도록 변경

* style: DTO 파일 위치 컨벤션 통일

* feat: Event 삭제 API (#30)

* Fix: cors without nginx (#32)

* feat: cors custom filter

* feat: cors custom filter 적용

* fix: cors allowed origin을 `localhost:*`에서 `localhost:5173`으로 변경 (#33)

* fix: preflight시에 security filter chain을 거치기 전에 성공하도록 수정 (#34)

* Change: attendance registration response (#35)

* style: image upload/delete method 분리

* change: 출석 및 출석 URL 생성 응답에 body 추가

* change: 출석 QR 만료 요청에 QR UUID가 불필요하게끔 수정

* test: 수정 사항 반영

* fix: 출석 URI이 제대로 생성되도록 수정

* Feat: include receiver name into mail registration (#31)

* fix: 확률적으로 실패하던 Test Case 보완

* feat: `EmailReceiver`에 이름 정보가 누락되어 있던 문제 해결

* feat: `{이름}`을 통해 대상 이름을 이메일 양식에 포함할 수 있도록 기능 추가

* test: 수정 사항 반영 (이메일 수신자에 이름 속성 추가)

* refactor: 이름 토큰(`{이름}`)을 상수로 정의, 메서드 분리

* test: 이름 토큰(`{이름}`) 치환 동작 확인 테스트 작성

* Feat: request attendance state (#37)

* feat: Attendance Status 조회 API

* test: Attendance Status 조회 API Test

* fix: CORS 재수정 (`List.of` 대신 `Arrays.asList` 사용) + origin에 개발/배포 서버 추가 (#36)

* change: EmailTask 전체 조회시, 응답 양식을 EmailTaskDetail 양식처럼 `ReceiverInfos`를 묶음으로 표시 (#39)

* Test: use fixture (#38)

* test: Fixture 작성 (`Member`, `Event`)

* change: 멤버 등록 필요 속성 수정

* change: `WithCustomUser` Annotation을 사용하도록 통일, 관리자 권한이 필요한 API일 경우 해당 권한 테스트에 미리 반영

* test: `MemberFixture` 적용

* test: GWT 다듬기

* style: `EmailDetails`가 Entity가 아닐 경우 단일 Data인 점을 반영하여 `EmailDetail`로 이름 변경

* test: Email Fixture 작성

* test: Email Fixture 적용

* style: `given`절의 메서드가 when보다는 given을 사용하도록 변경

* test: `Attendance` Fixture 작성

* test: `Attendance` Fixture 적용

* test: `Event` Fixture 작성

* test: `Event` Fixture 적용

* test: `Controller` Test를 단위 테스트로 전환

* test: EmailFixture 적용

* fix: 이미 인증된 사용자를 통해 로그인 테스트를 하던 문제 해결

* change: 멤버 출석 성공 시 보여주는 정보 축소

* change: 멤버 출석 등록 시 `Role`을 받도록 수정

* feat: feedback 반영, Test Fixture를 좀 더 Verbose 하게

* test: 변경한 Fixture 반영

* chore: test build에 lombok 사용

* Docs: readme (#19)

* docs: readme 초본

* docs: Readme에 다이어그램 추가

* [Draft] Release: `v0.0.0` (#40)

* chore: Dockerfile이 app version에 의존적이지 않도록 수정

* chore: spring actuator 추가

* style: `build.gradle` re-format

* chore: 기본 타임존을 한국으로 설정

* chore: API 접속 권한 조정

* fix: OAuth redirect URL scheme을 https로 변경

* fix: 로그인 요청은 로그아웃 상태에서도 허용하도록 변경

* fix: csrf 비활성화 (Client Side 추가 설정 필요)

* chore: CI를 위해, github action이 h2를 사용하도록

---------

Co-authored-by: ekgns33 <[email protected]>
  • Loading branch information
goldentrash and ekgns33 authored Aug 27, 2024
1 parent 8832e10 commit a40717e
Show file tree
Hide file tree
Showing 142 changed files with 6,918 additions and 4 deletions.
60 changes: 60 additions & 0 deletions .github/workflows/ci-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: SonarCloud
on:
push:
branches:
- main
pull_request:
types: [ opened, synchronize, reopened ]
jobs:
build:
name: Build and analyze
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: 'temurin'
cache: 'gradle'

- name: grant permission to gradle
run: chmod +x gradlew

- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar

- name: touch application.yml
run: |
mkdir ./src/main/resources
touch ./src/main/resources/application.yml
echo "${{ secrets.APPLICATION_DEV_YML }}" > ./src/main/resources/application.yml
shell: bash

- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew build sonar --info

- name: Upload Gradle Report
uses: actions/upload-artifact@v4
if: ${{ failure() }}
with:
name: gradle-report
path: build/reports

- name: Backend CI Discord Notification
uses: sarisia/actions-status-discord@v1
if: ${{ failure() }}
with:
title: ❗️ Backend CI failed ❗️
webhook: ${{ secrets.DISCORD_URL }}
color: FF0000
14 changes: 14 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Start with a base image containing Java runtime
FROM openjdk:17-jdk-alpine

# Set the working directory in the container
WORKDIR /app

# Copy the executable jar file to the working directory
COPY build/libs/platform-core-*.jar app.jar

# Expose the port the application runs on
EXPOSE 8080

# Command to run the executable jar file
ENTRYPOINT ["java", "-jar", "app.jar"]
54 changes: 54 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# GDSC Konkuk Internal Platform

## 소개

본 프로그램은 GDSC Konkuk 운영진이 사용할 동아리 관리 시스템입니다.
이 프로그램을 통해 운영진은 회원 정보를 관리하고 공지 사항을 전달할 수 있습니다.
동아리를 운영하며 기획 및 진행할 다양한 이벤트 정보를 기록하고 회고를 작성할 수 있습니다.

### 동기

GDSC Konkuk이 매 기수 성장하며 건국대학교의 활발한 학생 개발 커뮤니티가 되기를 기원합니다.
이를 위해서 운영진은 회원과 유기적으로 소통하며 회원이 동아리 활동에 적극적으로 참여하며 성장할 수 있도록 지원해야 합니다.
하지만 동아리 운영은 그리 간단하지만은 않아서 이 모든 일들은 많은 시간과 노력이 필요합니다.
우리는 GDSC Konkuk의 개발팀으로서 관리 시스템을 개발하여 이러한 문제를 해결하고자 합니다.

### 기능

- 회원 관리
- QR을 통한 이벤트 출결
- E-mail 예약 발송을 통한 공지 발송
- 이벤트 및 회고 Archiving

## 구현

### Architecture

![image](https://github.com/user-attachments/assets/2fab3b13-1aec-4c2f-ad23-3892be3d617d)

### 기술 스택

> Web Frontend는 다음 [repo](https://github.com/gdsc-konkuk/platform-core-front)를 참고하세요!
- Java 17 / Gradle
- Spring Boot 3.3.1
- Spring Data JPA / MySQL 8 (H2 for test)
- Spring Security (Traditional Session & Google OIDC)
- Spring Rest Docs / JUnit 5
- Spring Mail & S3

## ETC

### Developers

- [goldentrash](https://github.com/goldentrash)
- 출석
- 이벤트 CRUD
- [ekgns33](https://github.com/ekgns33)
- 메일 예약 발송
- 회원 CRUD

### In the future...

- Study Archiving
- SSO 개발, General Member와 Guest에게 제한된 인가 제공
101 changes: 99 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
import io.swagger.v3.oas.models.servers.Server
import org.hidetake.gradle.swagger.generator.GenerateSwaggerUI
import org.springframework.boot.gradle.tasks.bundling.BootJar

buildscript {
ext {
restdocsApiSpecVersion = '0.19.2'
}
}

plugins {
id 'java'
id 'org.springframework.boot' version '3.3.1'
id 'io.spring.dependency-management' version '1.1.5'
id "org.sonarqube" version "4.4.1.3373"

id 'com.epages.restdocs-api-spec' version '0.19.2'
id 'org.hidetake.swagger.generator' version '2.19.2'
id 'jacoco'
}

group = 'gdsc.konkuk'
Expand All @@ -15,6 +27,10 @@ java {
}
}

jar {
enabled = false
}

configurations {
compileOnly {
extendsFrom annotationProcessor
Expand All @@ -28,15 +44,95 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security:2.3.3.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.0")
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3'

compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

runtimeOnly 'com.h2database:h2:2.2.224'
// implementation 'mysql:mysql-connector-java:8.0.32'
implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.1")


// test dependencies
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
testImplementation 'com.epages:restdocs-api-spec:0.19.2'
testImplementation 'com.epages:restdocs-api-spec-mockmvc:0.19.2'
testImplementation 'org.springframework.security:spring-security-test:6.3.1'

swaggerUI 'org.webjars:swagger-ui:5.0.0'
}

openapi3 {
servers = [
{ url = 'http://localhost:8080' },
{ url = 'https://stage.gdsc-konkuk.dev' },
{ url = 'https://gdsc-konkuk.dev' },
] as List<? extends Closure<Server>>
title = 'Post Service API'
description = 'Post Service API description'
version = '1.0.0'
format = 'yaml'
}

swaggerSources {
sample {
setInputFile(file("${project.buildDir}/api-spec/openapi3.yaml"))
}
}

tasks.named('test') {
useJUnitPlatform()
finalizedBy 'jacocoTestReport'
}

jacoco {
toolVersion = "0.8.7"
}

jacocoTestReport {
dependsOn 'copySwaggerUI'

reports {
html.required = true
xml.required = true
}
}

tasks.withType(GenerateSwaggerUI).configureEach {
dependsOn 'openapi3'
}

tasks.register('copySwaggerUI', Copy) {
dependsOn 'generateSwaggerUISample'

def generateSwaggerUISampleTask = tasks.named('generateSwaggerUISample', GenerateSwaggerUI).get()

from("${generateSwaggerUISampleTask.outputDir}")
into("${project.buildDir}/resources/main/static/docs")
}

tasks.resolveMainClassName {
dependsOn 'copySwaggerUI'
}

tasks.withType(BootJar).configureEach {
dependsOn 'copySwaggerUI'
}

tasks.named('jar').configure {
dependsOn 'copySwaggerUI'
}

// sonarqube plugins
Expand All @@ -45,5 +141,6 @@ sonar {
property "sonar.projectKey", "gdsc-konkuk_platform-core"
property "sonar.organization", "gdsc-konkuk"
property "sonar.host.url", "https://sonarcloud.io"
property 'sonar.coverage.jacoco.xmlReportPaths', 'build/reports/jacoco/test/jacocoTestReport.xml'
}
}
}
13 changes: 13 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

# 프로젝트 클린 및 빌드
./gradlew clean bootJar

# Docker 이미지 빌드
docker build -t ekgns33/gdsc-spring:latest .

# Docker 이미지 푸시
docker push ekgns33/gdsc-spring:latest

# 완료 메시지
echo "Docker image pushed to ekgns33/gdsc-spring:latest successfully."
Empty file modified gradlew
100644 → 100755
Empty file.
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
package gdsc.konkuk.platformcore;

import jakarta.annotation.PostConstruct;
import java.util.TimeZone;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;

@SpringBootApplication
@ConfigurationPropertiesScan
public class PlatformCoreApplication {

public static void main(String[] args) {
SpringApplication.run(PlatformCoreApplication.class, args);
}

@PostConstruct
public void init() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
}
Loading

0 comments on commit a40717e

Please sign in to comment.