Skip to content

Commit

Permalink
[release] v0.1.0 (#508)
Browse files Browse the repository at this point in the history
* feat: 구글 캘린더 이벤트 조회 기능 추가

* feat: ExternalCalendarService 로직 정리

* refactor: 일정 우선순위 커스텀훅 view 사이즈 증가 및 리팩토링

* feat: 일정 더보기 기능 구현

* style: 일정 추가 버튼 스타일 수정

* fix: 시작 페이지 애니메이션 초기값 수정

* refactor: api 관련 상수 분리

* feat: access token 유효성 검사 기능 구현

* feat: 메인 페이지 접속 시 access token의 유효성 검사

* refactor: 로컬 스토리지 관련 상수 분리

* fix: 구글 로그인 에러 수정

* refactor: access token의 유효성을 검사하는 커스텀 훅 구현 및 분리

* refactor: 전역 사용자 상태 setter 함수명 변경

* refactor: hook 호출 순서 변경

* feat: access token 유효성 검사 결과에 따라 전역 사이드 바 상태 변경

* feat: 로그인 사용자용 페이지 접속 시 access token의 유효성 검사

* refactor: 불필요한 access token 타입 제거

* refactor: 컬럼명을 member_id에서 members_id로 변경

* feat: prod 환경에서 사용될 DDL 작성

* feat: prod 환경 db 설정 변경

* ci: 개별 클래스의 라인 커버리지가 75% 이하라면, 빌드가 실패하도록 설정

* fix: Jpa 오류를 해결하기 위한 getter 제거

* feat: 카테고리 삭제 시 연관된 스케줄도 삭제한다.

* fix: 회원과 연관된 구독 정보들을 모두 삭제하도록 수정

* refactor: queryClient useErrorBoundary 디폴트 옵션 추가

* refactor: 에러 바운더리 컴포넌트 타입 수정

* fix: 에러 바운더리 컴포넌트 children prop 타입 수정

* feat: 통합 일정을 관리하기 위한 IntegrationSchedule 추가

* feat: spring jdbc 의존성 추가

* feat: 누락된 DB 컬럼 이름 추가

* feat: 통합 스케줄 형식으로 조회하기 위한 Dao 추가

* feat: 기존 로직 이전 및 테스트 이전

* feat: 불필요 파일 제거

* test: 불필요 메서드 삭제 및 누락된 테스트 추가

* feat: 소나큐브 오류원인이 되는 build.gradle 파일 수정

* chore: 젠킨스 CD 시점에 소나큐브를 수행 하도록 수정

* feat: Not Found 페이지 컴포넌트 구현

* fix: access token 유효성 검사 로직 error 처리 수정

* refactor: 불필요한 코드 제거

* feat: 입력창 공통 컴포넌트에 value props 추가

* feat: 일정 시작 및 종료 날짜 자동 설정 기능 구현

* fix: 종일 일정 수정 시 날짜 기본값이 보이지 않는 에러 수정

* ci: 프론트엔드 개발 서버 스크립트 추가

Co-authored-by: Daye Lee <[email protected]>

* feat(Category): 카테고리 타입 필드를 추가한다

* feat(Category): 외부 캘린더를 저장하기 위한 table 생성

* refactor: 네이밍 및 필드 타입 변경

* feat: 외부 카테고리를 저장하는 기능 구현

* test: ExternalService 테스트 구현

* test: CategorySubscriptionService 테스트 구현

* test: ExternalCalendarController 검증 추가

* test: ExternalCalendar 인수테스트 추가

* refactor: 오타 수정

* fix: 프론트엔드 개발 서버 discord web hook 환경 변수 변경

Co-authored-by: Daye Lee <[email protected]>

* chore: 불필요한 소나큐브 관련 xml 파일 제거

* chore: 프로덕션을 위한 DDL 파일 수정

* feat: 서브모듈 업데이트

* feat: data.sql 제거

* feat: schema.sql 갱신

* feat: 서브모듈 갱신

* refactor: 개인 카테고리 이름 변경

* feat: 개인 카테고리는 삭제할 수 없다

* feat: 개인 카테고리는 이름을 수정할 수 없다

* feat: 외부 캘린더 조회 반환 타입 변경

* feat: 외부 일정 및 개인 일정 조회 로직 개선

* feat: 외부 일정 및 개인 일정 조회 로직 개선

* feat: response에 categoryType 추가

* test: 커버리지를 위한 테스트 코드 수정

* feat: data.sql 제거

* test: 누락된 문서화 추가

* feat: GoogleExternalCalendarClient getExternalCalendars 요청 방식 변경

* feat: google 일정 종일 판단 로직 수정

* feat: NotFound 페이지 진입 시 사이드바 감추기

* style: NotFound 페이지 스타일 수정

* chore: 코드 스타일 수정

* feat: 날짜 단건 조회 모달 컴포넌트 구현

* style: 카테고리 페이지 버튼 스타일링 수정

* feat: 구글 캘린더 가져오기 모달 UI 구현

* feat: 구글 캘린더 연동 상수 및 api 구현

* feat: 입력 제어 커스텀훅에 select 태그를 위한 기능 추가

* feat: 구글 캘린더 연동 시 유효성 검사

* refactor: 타입 분리 및 불필요한 옵션 제거

* chore: react query client retry option 추가

* ci: 프론트엔드 배포 파이프라인 스크립트 수정

* feat: 프론트엔드 dev 서버 대응을 위한 CORS 규칙 업데이트

* feat: 프론트엔드 dev 서버 대응을 위한 oauth redirect uri 변경

* ci: 캐시 제거 방법 변경

* ci: 워딩 수정

* fix: 카테고리 타입이 잘못 들어온 경우를 처리한다

* fix: 외부 연동 카테고리에는 일정을 등록할 수 없다

* fix: 전체 일반 카테고리 조회 시 외부 연동 카테고리는 제외한다

* test: CategoryType 테스트 추가

* refactor: 던지는 예외 변경

* test: CategoryType 테스트 추가

* refactor: 메서드명 수정

* refactor: 메서드명 수정

* refactor: 메서드명 수정

* chore: script 수정

* feat: 외부 카테고리 중복 저장 시 예외를 던지도록 수정

* test: 외부 캘린더 중복 저장 시 예외 추가

* fix: 불필요 개행 제거

* feat: 외부 일정 종일 판단 수정

* ci: 프론트엔드 패키지 매니저를 yarn으로 변경

* feat: oauth uri를 생성할 때 redirect uri를 외부에서 직접 전달받도록 개선

* feat: Access token을 생성할 때 redirect URI를 함께 보내도록 수정

* fix: 로그인 요청 수정

* refactor: 카테고리 이름 유효성 검사를 위한 상수 분리

* feat: 특정 문자열과 같은지 비교하는 유효성 검사 함수 구현

* feat: 카테고리 이름 유효성 검사 커스텀훅 구현 및 적용

* feat: 구글 캘린더 가져오기를 위한 카테고리 생성 유효성 검사 수정

* feat: 카테고리 생성 시 body에 categoryType 추가

* fix: 일정 제목이 null인 경우 디폴트 값이 들어가도록 수정

* refactor: 디폴트값 수정

* refactor: memo에 notnull 검증 추가

* refactor: 외부로 부터 연동한 카테고리도 삭제 가능하도록 변경

* refactor: 외부 카테고리를 삭제하는 로직의 순서 변경

* refactor: access token 유효성 검사를 페이지에서 분리

* refactor: ExternalCategoryDetailRepository의 불필요한 메서드 제거

* refactor: 변경된 일정 id 타입 대응

* fix: 일정 변경 에러 변경

* feat: 개인정보처리방침 페이지 컴포넌트 구현

* feat: footer 컴포넌트 구현

* style: 개인정보처리방침의 margin 변경

* feat: 카테고리 조회 시 카테고리 타입도 함께 전달하도록 개선

* feat: 구글 연동 일정 편집 및 삭제 권한 해제

* feat: 카테고리과 일정 타입에 따라 구독, 삭제, 편집 권한 개별 부여

* refactor: 툴팁 메세지 상수 수정

* fix: 객체 추가가 불가능한 불변 객체 수정

* fix: 겹치는 복수일정에서 렌더링되지 않는 일정 더보기 에러 수정

* fix: 달력 뷰를 넘어가는 장기 일정의 렌더링 오류 수정

* feat: Period를 다른 Period로 자르는 기능 구현

* feat: 일정 목록을 통해 비어있는 기간 목록을 계산하는 기능 구현

* feat: 카테고리를 통해 해당 카테고리를 구독하는 모든 유저의 기간을 만족하는 일정을 통해 겹치지 않는 기간을 계산하는 기능을 서비스에 구현

* docs: 일정 조율 API 문서 작성

* test: 인수 테스트 작성

* refactor: 컨트롤러 분리

* refactor: SchedulerService 리팩토링

* feat: IntegrationSchedule 대응

* test: CategoryType 대응

* docs: adoc 경로 변경

* chore: TODO 추가

* refactor: 개행 추가

* refactor: 구독ID로 멤버를 찾을 때 MemberRepository 대신 SubscriptionRepository를 사용하도록 개선

* refactor: 구독자 멤버의 ID목록을 반환하도록 메서드 개선

* feat: 중복되는 카테고리 제거

* refactor: isNotOverlapped 가독성 개선

* feat: 날짜뿐만 아니라 시간까지 일정 조율 범위를 조정할 수 있도록 개선

* fix: 일정 수정 시 빈 제목을 넣을 수 있도록 변경

* refactor: 사용하지 않는 dto 삭제 및 검증 어노테이션 추가

* fix: 일정 제목이 null인 경우 디폴트 값이 들어가도록 수정

* fix: 일정 삭제 시 달력에 바로 반영

* feat: 카테고리 타입에 따라 description 추가

* feat: 공백 특수 문자 제거 및 나의 카테고리 목록에도 description 추가

* refactor: react query cache key 상수 분리

* fix: 에러 메시지 조건부 렌더링

* feat: 일정 조율 기능 구현

* feat: 일정 조율 페이지 컴포넌트 구현

* feat: 내비게이션 바에 일정 조율 메뉴 추가

* style: 카테고리 페이지 컴포넌트 스타일 변경

* feat: 시간 형식 변경

* style: 시간 목록의 overflow 스타일 변경

* fix: 시간에서 시작 날짜와 종료 날짜 분리

* fix: 시간 형식 변경

* fix: 카테고리 목록에서 일반 카테고리만 필터링

* fix: 복수 일정의 우선순위 에러 해결

* feat: 구독 카테고리 필터링 시 일정 로딩을 위한 스피너 추가

* refactor: 불필요한 코드 정리

* fix: 프로필 수정 시 카테고리 생성자에 바로 반영

* feat: 입력 필드에 label 추가

* style: label 스타일 수정

* style: 버튼 사이즈 수정

* feat: 일정 제목이 없는 경우 '제목없음' 렌더링

* refactor: 상수 변경

* docs: 자신의 구독 목록 조회 API 문서 추가

* feat: 외부 일정을 포함하여 일정 조율할 수 있도록 개선

* feat: 일정 추가 시 카테고리 디폴트 값 설정 및 스타일 변경

* style: 입력 필드 에러메세지 스타일 수정

* feat: 구글 캘린더를 일정 조율 대상에 포함시키도록 개선

* docs: build.gradle의 소나큐브 코드 커버리지를 위한 설정 추가

* docs: build.gradle의 소나큐브 코드 커버리지를 위한 설정 변경

* docs: build.gradle의 소나큐브 코드 커버리지를 위한 설정 추가변경

* docs: build.gradle의 소나큐브 코드 커버리지를 위한 설정 jacoco 설정변경

* style: 카테고리 페이지 모드 선택 버튼 토글로 변경

* fix: access token 유효성 검사 성공 시의 전역 사이드 바 상태 변경

* fix: 404 페이지 접속 시 access token의 유효성 검사

* fix: 사이드 바 컴포넌트 조건부 렌더링 방식 변경

* fix: 전역 사이드 바 default 상태 변경

* style: 시작 페이지 콘텐츠 수정

* style: 구독 카테고리 목록 스켈레톤 UI 수정

* fix: 누락된 사이드 바 애니메이션 추가

* fix: 구글 캘린더 가져오기 버튼을 사이드 바로 이동

* style: 카테고리 페이지 헤더 스타일 변경

Co-authored-by: hyeonic <[email protected]>
Co-authored-by: mat <[email protected]>
Co-authored-by: jhy979 <[email protected]>
Co-authored-by: jhy979 <[email protected]>
Co-authored-by: Daye Lee <[email protected]>
Co-authored-by: devHudi <[email protected]>
Co-authored-by: koo <[email protected]>
Co-authored-by: 구동희 <[email protected]>
  • Loading branch information
9 people authored Aug 18, 2022
1 parent a67eaf6 commit 5eeb3a9
Show file tree
Hide file tree
Showing 362 changed files with 35,160 additions and 34 deletions.
3 changes: 1 addition & 2 deletions .github/ISSUE_TEMPLATE/bug-template.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: Bug Template
about: 버그를 이슈에 등록한다.
title: ""
title: '이슈의 제목을 입력해주세요!'
labels: ''
assignees: ''
---
Expand All @@ -16,4 +16,3 @@ assignees: ''
## 📸 스크린샷

## 👄 참고 사항

3 changes: 1 addition & 2 deletions .github/ISSUE_TEMPLATE/feature-template.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: Feature Template
about: 구현할 기능을 이슈에 등록한다.
title: ""
title: '이슈의 제목을 입력해주세요!'
labels: ''
assignees: ''
---
Expand All @@ -17,4 +17,3 @@ assignees: ''
## 📄 참고 사항

## ⏰ 예상 소요 기간

3 changes: 2 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
- [ ] 🔀 PR 제목의 형식을 잘 작성했나요? e.g. `[feat] PR을 등록한다.`
- [ ] 💯 테스트는 잘 통과했나요?
- [ ] 🏗️ 빌드는 성공했나요?
- [ ] 🧹 불필요한 코드는 제거했나요?
- [ ] 💭 이슈는 등록했나요?
- [ ] 🏷️ 라벨은 등록했나요?
- [ ] 💻 git rebase를 사용했나요?
- [ ] 🌈 알록달록한가요?

## 작업 내용
Expand All @@ -12,4 +14,3 @@
## 주의사항

Closes #{이슈 번호}

39 changes: 39 additions & 0 deletions .github/workflows/backend-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Backend CI

on:
pull_request:
branches:
- main
- develop
paths:
- backend/**
- .github/** # Github Actions 작업을 위한 포함

jobs:
build:
runs-on: ubuntu-latest

defaults:
run:
working-directory: ./backend

steps:
- uses: actions/checkout@v3

- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: "11"
distribution: "temurin"

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew build

- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
if: ${{ always() }}
with:
files: build/test-results/**/*.xml
38 changes: 38 additions & 0 deletions .github/workflows/frontend-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Frontend CI

on:
pull_request:
branches:
- main
- develop
paths:
- frontend/**
- .github/** # Github Actions 작업을 위한 포함

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./frontend

steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "14"

- name: Install node packages
run: npm install

- name: Check lint
run: npm run check-lint

- name: Check prettier
run: npm run check-prettier

- name: Build
run: npm run dev-build

- name: Component test
run: npm run test
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "backend/src/main/resources/config"]
path = backend/src/main/resources/config
url = https://github.com/dallog/config.git
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
# 2022-dallog

## 알록달록🌈 팀원 소개

| Backend | Backend | Backend | Backend | Frontend | Frontend |
| :------------------------------------------: | :------------------------------------------------: | :----------------------------------------------: | :------------------------------------------: | :--------------------------------------------: | :-----------------------------------------: |
| ![](https://github.com/hyeonic.png?size=120) | ![](https://github.com/gudonghee2000.png?size=120) | ![](https://github.com/summerlunaa.png?size=120) | ![](https://github.com/devHudi.png?size=120) | ![](https://github.com/daaaayeah.png?size=120) | ![](https://github.com/jhy979.png?size=120) |
| [매트(최기현)](https://github.com/hyeonic) | [리버(구동희)](https://github.com/gudonghee2000) | [파랑(이하은)](https://github.com/summerlunaa) | [후디(조동현)](https://github.com/devHudi) | [티거(이다예)](https://github.com/daaaayeah) | [나인(장호영)](https://github.com/jhy979) |
6 changes: 6 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,9 @@ out/

### VS Code ###
.vscode/

### resources ###
/src/main/resources/static/docs

### logs ###
logs/
151 changes: 140 additions & 11 deletions backend/build.gradle
Original file line number Diff line number Diff line change
@@ -1,25 +1,154 @@
plugins {
id 'org.springframework.boot' version '2.7.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'org.springframework.boot' version '2.7.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'org.asciidoctor.jvm.convert' version '3.3.2'
id 'org.sonarqube' version '3.3'
id 'java'
id 'jacoco'
}

group = 'com.allog'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

ext {
snippetsDir = file('build/generated-snippets')
}

configurations {
asciidoctorExtensions
}

repositories {
mavenCentral()
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'

runtimeOnly 'mysql:mysql-connector-java'
runtimeOnly 'com.h2database:h2'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.rest-assured:rest-assured:4.4.0'

// JWT를 위한 의존성
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'

// Restdocs를 위한 의존성
asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'

// Sonarqube를 위한 의존성
implementation 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3'
}

test {
outputs.dir snippetsDir
useJUnitPlatform()
finalizedBy 'jacocoTestReport'
}

jacoco {
toolVersion = "0.8.8"
}

jacocoTestReport {
reports {
xml.enabled true
csv.enabled true
html.enabled true

xml.destination file("${buildDir}/jacoco/index.xml")
csv.destination file("${buildDir}/jacoco/index.csv")
html.destination file("${buildDir}/jacoco/index.html")
}

afterEvaluate {
classDirectories.setFrom(
files(classDirectories.files.collect {
fileTree(dir: it, excludes: [
'**/*Application*',
'**/*Exception*',
'**/dto/**',
'**/infrastructure/**',
'**/global/config/**',
'**/BaseEntity*',
'**/ControllerAdvice*',
'**/AuthorizationExtractor*'
])
})
)
}

finalizedBy 'jacocoTestCoverageVerification'
}

jacocoTestCoverageVerification {
violationRules {
rule {
enabled = true
element = "CLASS"

// 모든 클래스 각각 라인 커버리지 75% 만족시 빌드 성공
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.75
}

excludes = [
'*.*Application',
'*.*Exception',
'*.dto.*',
'*.infrastructure.*',
'*.global.config.*',
'*.BaseEntity',
'*.ControllerAdvice',
'*.AuthorizationExtractor'
]
}
}
}

sonarqube {
properties {
property 'sonar.projectKey', 'dallog'
property "sonar.sources", "src"
property "sonar.language", "java"
property "sonar.sourceEncoding", "UTF-8"
property "sonar.profile", "Sonar way"
property "sonar.java.binaries", "${buildDir}/classes"
property "sonar.test.inclusions", "**/*Test.java"
property 'sonar.exclusions', '**/jacoco/**'
property 'sonar.coverage.exclusions', '**/test/**/*, **/*Application*, **/global/config/**, **/dto/**, **/*Exception*, **/infrastructure/**, **/BaseEntity*, **/ControllerAdvice*, **/AuthorizationExtractor*'
property "sonar.coverage.jacoco.xmlReportPaths", "${buildDir}/jacoco/index.xml"
}
}

asciidoctor {
configurations 'asciidoctorExtensions'
baseDirFollowsSourceFile()
inputs.dir snippetsDir
dependsOn test
}

asciidoctor.doFirst {
delete file('src/main/resources/static/docs')
}

task copyDocument(type: Copy) {
dependsOn asciidoctor

from "${asciidoctor.outputDir}"
into file("src/main/resources/static/docs")
}

tasks.named('test') {
useJUnitPlatform()
bootJar {
dependsOn copyDocument
}
59 changes: 59 additions & 0 deletions backend/src/docs/asciidoc/auth.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
== Auth(인증)

=== OAuth 로그인 링크 생성

==== Request

include::{snippets}/auth/link/http-request.adoc[]

==== Path Parameters

include::{snippets}/auth/link/path-parameters.adoc[]

==== Request Parameters

include::{snippets}/auth/link/request-parameters.adoc[]

==== Response

include::{snippets}/auth/link/http-response.adoc[]

==== ResponseFields

include::{snippets}/auth/link/response-fields.adoc[]

=== OAuth 로그인

==== Request

include::{snippets}/auth/token/http-request.adoc[]

==== PathParameters

include::{snippets}/auth/token/path-parameters.adoc[]

==== RequestFields

include::{snippets}/auth/token/request-fields.adoc[]

==== Response

include::{snippets}/auth/token/http-response.adoc[]

=== OAuth 로그인 : Resource Server 에러

==== Request

include::{snippets}/auth/exception/token/http-request.adoc[]

==== PathParameters

include::{snippets}/auth/exception/token/path-parameters.adoc[]

==== RequestFields

include::{snippets}/auth/exception/token/request-fields.adoc[]

==== Response

include::{snippets}/auth/exception/token/http-response.adoc[]
Loading

0 comments on commit 5eeb3a9

Please sign in to comment.