Skip to content

Commit

Permalink
스프린트 4 Merge (#292)
Browse files Browse the repository at this point in the history
* fix: 스터디 가입 후 유저 role을 refetch하도록 수정

* [FE] issue226: 각종 오류 수정 (#228)

* fix: 싴, 뷁 등 나눔폰트에서 지원되지 않는 글자가 있기 때문에 폰트 변경

Co-authored-by: TaeYoon <uni613@naver.com>

* fix: 스터디 디테일 페이지에서 인원이 7명일때 더보기 버튼이 보이지 않는 오류

Co-authored-by: TaeYoon <uni613@naver.com>

* fix: 스터디 생성시 etc(미분류) 태그를 기본으로 선택하도록 수정 및 선택 안함 제거

Co-authored-by: TaeYoon <uni613@naver.com>

* fix: 최대 모집 인원이 없을때 무한대 텍스트 표시

Co-authored-by: TaeYoon <uni613@naver.com>

* refactor: Tag파일 이름을 Subject로 수정

Co-authored-by: TaeYoon <uni613@naver.com>

* WIP

* feat: svg 직접 사용

Co-authored-by: TaeYoon <uni613@naver.com>

* [BE] 테스트 리팩터링 (#222)

* refactor: 인수 테스트 픽스처 생성 메서드 추가

* refactor: 인수 테스트 픽스처 정리

* refactor: 테스트 setUp 제거

* refactor: Steps를 추상 클래스로 변경

* [BE] issue223: �테스트 코드 최적화 (#224)

* refactor: 제약 조건 임시 제거 및 데이터 삭제 TRUNCATE로 변경

* feat: 인증 exception 추가

* refactor: WebMvcTest 테스트 환경 통일

* refactor: 불필요한 SpringBootTest 환경 제거

* refactor: AuthentiactionRequestMatcher 빈 실제 객체 사용

* [BE] issue221: 내가 참여한 스터디 조회 오류 (#233)

* refactor: 스터디 ID가 비어있는 경우, findStudyOwnerWithTags 메서드에서 빈 Map을 바로 반환하도록 변경

* fix: 스터디에 태그가 없는 경우 발생했던 NPE 문제 해결

* fix: 내가 참여한 스터디 JOIN 쿼리 변경

* refactor: tags가 없는 경우 빈 리스트를 반환하도록 변경

* refactor: tags null인 경우 빈 리스트 반환

* refactor: ids String 변환 제거

* [FE] issue238: 빌드 프로세스 개선 (#239)

* feat: esbuild 적용

* refactor: 사용하지 않는 prop 삭제

* refactor: babel 삭제

* refactor: classnames package 삭제

* feat: esnext로 타겟 변경

* refactor: 절대 경로 수정

* chore: js 문법지원을 es2022로 변경

* chore: @types/classname pacakge 제거

* feat: Refresh Token 적용하기 (#236)

* feat: Refresh Token 추가

* feat: 만료 토큰 예외 처리 및 액세스 토큰 재발급 구현

* feat: 토큰 재발급 요청 처리 구현

* feat: 리프래시 토큰 쿠키에 담기로 변경

* feat: RefreshToken을 통해 AccessToken 재발급 구현

* test: 테스트 수정

* feat: RefreshToken 저장 로직 추가

* feat: DB 검증 코드 추가

* fix: STRING 수정

* feat: index.adoc 수정

* docs: index.adoc 수정

* feat: Origin 설정

* feat: 로그아웃 기능 구현

* feat: 4001 코드 추가 & expiredTime 추가

* feat: 피드백 반영 및 application.yml 수정

* feat: 쿠키 sameSite 제거 및 Transactional 명시

* refactor: 테스트 코드 수정

* refactor: response DTO 네이밍 변경

* fix: INTERNAL_SERVER_ERROR -> UNAUTHORIZED 로 수정

* refactor: 메소드 AuthAcceptanceTest 로 내림

* [FE] 리프레시 토큰 방식 적용 (#244)

* feat: Error -> AxiosError 타입 수정

* feat: refreshToken 조회 api 및 모킹 서버 구현

* feat: Header 컴포넌트 로그아웃 기능 수정

* feat: 사용자 친화 에러 메세지로 수정

* refactor: MyStudyPage에서 useMyStudyPage 훅 분리

* chore: auth 절대 경로 추가

* feat: accessToken저장 장소 변경

sessionStorage -> 지역 변수

* refactor: import문 및 파일명 변경

getRefreshToken -> getAccessToken
postAccessToken -> postLogin

* feat: 로그아웃시 refreshToken 삭제 요청

* refactor: 타입명 수정

* feat: tokenHandlers 수정

refreshToken 로직 추가

* refactor: console 제거

* feat: AccessTokenController 수정

* feat: silent refresh 적용

로그인 또는 refresh 요청 시 새로운 accessToken을 발급 받으면, 주기마다 silent refresh
발급 실패 시 로그아웃

* refactor: 사용하지 않는 로직 제거

* feat: 401에러가 났을 시 처리

* refactor: 주석 제거

* refactor: eslint에 따라 수정

* fix: cypress 오류 수정

* fix: ts cypress 메서드 인식 오류 수정

* fix: 드롭박스 버그 수정

* style: 스터디 생성 페이지 스타일 수정

* refactor: prettier 및 eslint 적용

* refactor: type EmptyObject -> null

* refactor: type EmptyObject -> null

* refactor: 메서드에 private 키워드 추가

* chore: tsconfig 수정

- lib 삭제: target이 관련 lib을 불러오므로 필요 없음
- types cypress/tsconfig.json으로 이동

* refactor: 에러 코드 상수 분리

* refactor: 로직 리팩토링

- early return
- AccessTokenController 리팩토링

* chore: 프론트엔드 ci workflow에 테스트 추가

* feat: 토큰 만료 시간 수정

* fix: login api 경로 수정 (#249)

* fix: sameSite("None") 추가 (#250)

* [BE] issue231: 커뮤니티 CRUD (#235)

* test: 커뮤니티 생성 인수 테스트 중 RestDoc 적용

* test: 스터디 조회 Rest docs 생성

* test: 커뮤니티 게시글 단건 조회 인수 테스트 추가

* test: 스터디 커뮤니티 게시글 응답 검증 추가중

* test: 게시글 작성 및 단건 조회 인수테스트 최종 작성

Co-authored-by: jaejae-yoo
<wotj102@gmail.com>

* test: 잘못된 토큰으로 커뮤니티 글을 생성하는 경우 컨트롤러 테스트 작성중

Co-authored-by: wilgur513 <wilgur513@naver.com>

* test: WebMvcTest를 위한 Service 객체 자동 목킹 추가"

Co-authored-by: jaejae-yoo <wotj102@gmail.com>

* test: 스터디 커뮤니티 작성 study ID 형식이 잘못된 경우 400에러 반환 테스트 작성

Co-authored-by: wilgur513 <wilgur513@naver.com>

* test: 커뮤니티 게시글 작성 통합 테스트 작성

* feat: 스터디 커뮤니티 게시글 작성

* test: 요청 바디 잘못된 형식 테스트 추가

* test: 커뮤니티 제목 및 글 공백,null,길이 검증

* feat: 사용자 또는 스터디가 없는 경우 예외 발생

* test: 스터디에 작성된 사용자인지 검증 테스트

* feat: 스터디 참가자만 게시글 작성 가능

* feat: 스터디 커뮤니티 게시글 작성 기능

* feat: 잘못된 게시글 단건 조회 시 401, 400 반환

* test: 스터디 게시글 단건 조회 테스트

* feat: 단건 조회를 위한 Service 메서드 추가

* feat: 스터디 커뮤니티 게시물 단건 조회

* test: 단건 조회 인수 테스트

* feat: 게시글 조회 시 예외 상황 처리

* feat: 스터디 커뮤니티 게시글 단건 조회

* feat: 스터디 커뮤니티 게시글 삭제

* test: 스터디 전체 게시글 인수 테스트

* test: 커뮤니티 게시글 목록 조회 인수 테스트 작성

* test: 스터디 커뮤니티 400 에러 확인

* feat: 게시글 목록 조회 시 400 에러 처리

* test: 스터디 글 목록 조회 통합 테스트 작성중

* feat: 스터디 커뮤니티 게시글 목록 조회

* feat: 스터디 커뮤니티 게시글 전체 조회

* test: 스터디 커뮤니티 게시글 수정 인수 테스트

* feat: 커뮤니티 게시글을 수정한다

* refactor: 커뮤니티 게시글 관련 도메인 구조 변경

* refactor: 스터디 커뮤니티 게시글 도메인으로 검증 이동

* feat: 스터디 게시글을 볼 수 없는 경우 예외 메시지 추가

* style: 불푤요한 코드 제거

* style: 중복된 코드 제거

Co-authored-by: jaejae-yoo <wotj102@gmail.com>

* [BE] issue227: 스터디원을 위한 링크공유 CRUD (#237)

* test: 링크 공유글 생성 관련 인수 테스트 추가

* test: 링크 공유글 생성 관련 인수 테스트 수정

* feat: 링크 공유 생성 기능 구현

* test: 링크 공유글 수정 관련 인수 테스트 추가

* feat: 존재하지 않는 링크 공유글인 경우 예외 처리 구현

* feat: 내가 작성한 링크 공유글이 아닌 경우 예외 처리 및 기능 구현

* test: 링크 공유글 삭제 관련 인수 테스트 추가

* feat: 존재하지 않는 링크 공유글 삭제 시 예외 처리 구현

* feat: 내가 작성하지 않은 링크 공유글 삭제 시 예외 처리 및 기능 구현

* test: 링크 공유 전체 조회 관련 인수 테스트 추가

* feat: 링크 전체 조회 쿼리 작성

* feat: 링크 전체 조회 기능 구현

* test: 깨지는 테스트 수정

* refactor: 링크 공유 리팩토링

* feat: 링크 공유글 수정, 삭제 시 해당 스터디에 속해있는지 검증

* feat: 링크 공유글 수정, 삭제 시 작성자가 해당 스터디에 참여하고 있는지 검증

* test: 링크 공유글 수정, 삭제 인수 테스트 수정

* refactor: 링크 공유글 설명 최대 글자수 50자에서 25자로 변경

* refactor: 피드백 반영

* refactor: REST Docs 전체 조회 response-fields 추가

* refactor: BaseEntity LocalDate -> LocalDateTime으로 변경

* refactor: 피드백 반영

* refactor: 커뮤니티 관련 REST Docs 설정 추가

* [BE] issue252: 링크 공유 설명란 최대 글자수 40자로 변경 (#253)

* [BE] issue229 : refresh token (#257)

* feat: Refresh Token 추가

* feat: 만료 토큰 예외 처리 및 액세스 토큰 재발급 구현

* feat: 토큰 재발급 요청 처리 구현

* feat: 리프래시 토큰 쿠키에 담기로 변경

* feat: RefreshToken을 통해 AccessToken 재발급 구현

* test: 테스트 수정

* feat: RefreshToken 저장 로직 추가

* feat: DB 검증 코드 추가

* fix: STRING 수정

* feat: index.adoc 수정

* docs: index.adoc 수정

* feat: Origin 설정

* feat: 로그아웃 기능 구현

* feat: 4001 코드 추가 & expiredTime 추가

* feat: 피드백 반영 및 application.yml 수정

* feat: 쿠키 sameSite 제거 및 Transactional 명시

* refactor: 테스트 코드 수정

* refactor: response DTO 네이밍 변경

* fix: INTERNAL_SERVER_ERROR -> UNAUTHORIZED 로 수정

* refactor: 메소드 AuthAcceptanceTest 로 내림

* fix: exposedHeaders "Set-Cookie" 추가

* Merge branch 'develop' of https://github.com/woowacourse-teams/2022-moamoa into feat/229-refresh-token

# Conflicts:
#	backend/src/main/java/com/woowacourse/moamoa/auth/config/AuthRequestMatchConfig.java
#	backend/src/main/java/com/woowacourse/moamoa/auth/controller/AuthController.java
#	backend/src/main/java/com/woowacourse/moamoa/common/config/WebConfig.java
#	backend/src/test/java/com/woowacourse/moamoa/auth/controller/AuthControllerTest.java
#	backend/src/test/java/com/woowacourse/moamoa/auth/service/AuthServiceTest.java
#	backend/src/test/resources/schema.sql

* feat: accessToken 세션 스토리지에 저장 (#262)

* [FE] issue256: atomic css 방식을 css props에 적용하는 유틸 함수 생성 (#259)

* refactor: tailwind 같은 atomic css util함수 생성

* feat: top right bottom left 추가

* refactor: css prop -> tw

* refactor: 사용하지 않는 module import 제거

* feat: Interceptor refresh 요청 제외 (#267)

* feat: sonarqube 적용을 위한 build.gradle 수정
Co-authored-by: sc0116 <ssc6839@gmail.com>

* [BE] issue241: 테스트 코드 리팩토링 (#242)

* refactor: ReviewDaoTest 리팩토링

* refactor: createdDate 수정 및 schema 변경

* refactor: ReviewControllerTest 리팩토링

* refactor: MemberData Fixture 사용

* refactor: MyStudyControllerTest 리팩토링

* refactor: MyStudyControllerTest 리팩토링 완료

* refactor: MyStudyDaoTest

* refactor: MyStudyDaoTest 수정 중

* refactor: MyStudyDaoTest 완료

* fix: 깨지는 테스트 수정

* fix: id 값은 알 수 없으므로 null만 검사하도록 수정

* refactor: MemberFixtures에서 Member 상수 -> 메서드로 변경

* refactor: ReviewFixtures에서 Review 상수 -> 메서드로 변경

* refactor: StudyDetailsDaoTest 리팩토링

* refactor: MyStudyServiceTest 리팩토링

* refactor: 불필요한 StudyFixtures 제거

* refactor: TagDaoTest 수정

* refactor: ReviewDaoTest 리팩토링

* refactor: 사용하지 않는 Fixture 제거

* fix: ReviewDaoTest 수정

* feat: 스터디 최대 인원이 한명인 경우 바로 모집 종료가 된다.

* fix: 테스트 코드 통과하도록 수정

* refactor: 린론 피드백 반영

* refactor: DTO 검증문 추가

* fix: 테스트 수정

* refactor: 픽스쳐 추가

Co-authored-by: SeungCheol <ssc6839@gmail.com>

* feat: sonarqube 적용을 위한 build.gradle 수정

Co-authored-by: sc0116 <ssc6839@gmail.com>

* Create sonarqube.yml

* chore: 충돌 해결

* Update sonarqube.yml

* Update sonarqube.yml

* Update sonarqube.yml

* [BE] issue277: SonarQube Pull Request Decoration (#283)

* style: EOL 추가

* refactor: sonarqube secret 변경

* Update sonarqube.yml

* chore: sonarqube build.gradle 수정

* fix: develop 브랜치 제거

* fix: sonar secret key 설정

* Update sonarqube.yml

* Update sonarqube.yml

* Update sonarqube.yml

* Update sonarqube.yml

* Update sonarqube.yml

* Update build.gradle

* Update build.gradle

* Update build.gradle

* Update sonarqube.yml

* Update sonarqube.yml

* refactor: 사용자 정보 조회 컨트롤러에 HTTP 메서드 지정

* Update backend.yml

* Delete sonarqube.yml

* Update frontend.yml

* Update deploy-backend-dev.yml

* Update deploy-frontend-dev.yml

* Update deploy-backend-dev.yml

* [BE] issue245: 스터디 가입날짜 및 스터디 개수 (#246)

* feat: 임시 커밋

* feat: 스터디 단건조회시 가입 개수도 함께 조회

* feat: 스터디 단건조회시 가입날짜도 포함

* refactor: createdDate -> participationDate

* refactor: 메소드 분리를 통해 가독성 증가

* refactor: 불필요한 where 절 제거

* fix: test 코드 수정

* refactor: 메소드명 수정

* fix: 테스트 깨짐 해결

* refactor: MemberFullData -> ParticipatingMemberData

* [FE] issue243: 링크 모음 CRUD + 링크 미리보기 구현 (#274)

* fix: 스토리북 오류 수정

babel-loader -> esbuild-loader로 바꾸면서 생긴 오류

* feat: UserDescription 컴포넌트 구현

* feat: Image 컴포넌트 -> CenterImage 컴포넌트

* feat: LinkPreview 컴포넌트 구현

* feat: LinkPreview 컴포넌트 수정

* chore: storybook main.js 수정

css props 지원

* feat: DropDownBox 컴포넌트 구현

* feat: DropDownBox 컴포넌트 적용

* refactor: eslint 적용

* feat: LinkItem 컴포넌트 구현

* refactor: icon svg 컴포넌트 분리

* feat: LinkForm 컴포넌트 구현

* refactor: Input.style.js 공통 컴포넌트 폴더로 이동

* feat: LinkForm 컴포넌트 로직 수정

useForm 적용

* feat: url 정규식 검증 로직 추가

* feat: LinkRoomTabPanel 컴포넌트 구현

* style: 스터디 방 페이지 반응형 UI 적용

* feat: Modal 컴포넌트 구현

react portal 사용

* feat: 링크 모음탭에 모달 적용

* feat: 링크 모킹 서버 구현

* feat: 링크 조회 무한 스크롤 구현

* feat: 링크 등록 기능 구현

* feat: 링크 삭제 기능 구현

* feat: 링크 수정 기능 구현

* refactor: eslint, prettier 적용

* feat: 메타 태그 추가

* feat: 내 링크만 수정/삭제 가능하도록 수정

+ 링크 폼에 프로필 추가

* chore: api 환경변수 추가

* feat: 링크 미리보기 구현

링크 미리보기 서버 배포 필요

* feat: 도메인네임만 보여주도록 수정

https://www.moamoa.space -> moamoa.space

* test: 테스트 수정

* feat: 링크 미리보기 서버와 연결

* fix: domainName이 유효하지 않은 url인 오류 수정

domainName이 올바른 url 형태가 아닐 때 에러가 발생하여 앱이 멈추는 오류 해결

* refactor: lint, type 수정

* chore: api url 변경

* refactor: AxiosError 타입 수정

* refactor: Noop 타입 분리

* refactor: linkHandler 수정

* refactor: CenterImage src 타입 수정

* refactor: useForm onChange 함수 분리

* refactor: list -> 복수형

컴포넌트는 list를 사용하지만, 데이터의 경우 list 대신 복수형 단어를 사용하도록 수정
- 예시: linkList -> links / studyList -> studies

* refactor: 상대경로 -> 절대경로

* refactor: api 폴더 구조 변경

api 아래 도메인 폴더를 만들고 index.ts 파일에 해당 도메인 관련 api타입, api 함수, 리액트 쿼리 커스텀 훅을 포함

* feat: 링크 클릭시 새 탭 열리게 수정

* refactor: lint, ts 에러 수정

* refactor: z-index 위치 수정

* refactor: css props에 tw 함수 적용

* [BE] issue255: 스터디 상세 정보 수정 (#278)

* feat: 임시 커밋

* chore: 충돌 해결

* feat: 스터디 업데이트 구현

* refactor: 피드백 반영

* docs: asciidocs 추가

* refactor: 피드백 반영

* [FE] issue275: 스터디원 스터디 탈퇴 (#287)

* fix: MyStudyCard 수정

탈퇴 버튼을 클릭하면 스터디 룸으로 이동하는 버그가 있어 컴포넌트를 분리하고 스타일을 수정
e.stopPropagation을 해도 기본 a, button의 동작은 막지 않음

* feat: 스터디원 탈퇴 구현

내 스터디 목록 페이지에서 쓰레기통 버튼 클릭시 탈퇴

* [BE] issue254: 스터디 탈퇴 (#281)

* test: 스터디 탈퇴 인수테스트 작성

* feat: 스터디에 참여하지 않은 회원이 탈퇴하려는 경우 예외 처리 구현

* feat: 스터디장이 스터디를 탈퇴하려는 경우 예외 처리 구현

* test: 스터디 탈퇴 인수 테스트 수정

* feat: 스터디 탈퇴 구현

* feat: 스터디 탈퇴 리팩토링

* refactor: 스터디 참여 로직 위치 변경

* refactor: 피드백 반영

* refactor: 피드백 반영

* refactor: 코드 구린내 청소

* refactor: 피드백 반영

* refactor: 피드백 반영

* [BE] issue248: 스터디 공지사항 CRUD  (#260)

* refactor: ArticleController 이름 변경 및 PathVariable 추가

* feat: 스터디 공지사항 CRUD 구현

* refactor: 레포지토리 정리 및 ArticleType 추가

* refactor: PermittedParticipants 추가  (#264)

* refactor: PermittedParticipants 추가

* refactor: StudyRoom, PermittedParticipants 추출

* chore: 충돌 해결

* refactor: 리뷰 반영

* fix: 네이밍 수정

Co-authored-by: 정진혁 <wilgur513@naver.com>
Co-authored-by: Donggyu <a29661498@gmail.com>

* [BE] issue284: Code smell 제거 (#286)

* chore: 충돌 해결

* refactor: Code smell 제거

* refactor: 중복 문자열 rollback

* fix: 깨지는 테스트 수정

* fix: 버그 수정

* fix: `Participant` eq&hc 수정

* refactor: Link limit, offset 추가

* refactor: 디버깅용 stack trace 추가

* refactor: 링크 조회 로직 수정 (#288)

Co-authored-by: SeungCheol <ssc6839@gmail.com>

* fix: refreshToken 로직 수정 (#289)

* [BE] issue290: SonarQube PostgreSQL 연동 (#291)

* feat: postgresql DB 연동 확인

* feat: postgresql DB 세팅

* feat: postgresql DB 세팅

* feat: postgresql DB 세팅

Co-authored-by: TaeYoon <uni613@naver.com>
Co-authored-by: airman5573 <68623798+airman5573@users.noreply.github.com>
Co-authored-by: 정진혁 <wilgur513@naver.com>
Co-authored-by: jaeseo yoo <wotj102@gmail.com>
Co-authored-by: SeungCheol Shin <47477359+sc0116@users.noreply.github.com>
Co-authored-by: SeungCheol <ssc6839@gmail.com>
  • Loading branch information
7 people authored Aug 18, 2022
1 parent dab2ba3 commit 27b97f6
Show file tree
Hide file tree
Showing 410 changed files with 15,297 additions and 6,409 deletions.
28 changes: 22 additions & 6 deletions .github/workflows/backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,30 @@ on:
branches:
- main
pull_request:
paths:
- 'backend/**'
branches:
- main
- develop
types: [opened, synchronize]

defaults:
run:
working-directory: backend

jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_PROJECT_KEY: moamoa
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
SONAR_TOKEN : ${{ secrets.SONAR_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
client-id: ${{ secrets.CLIENT_ID }}
client-secret: ${{ secrets.CLIENT_SECRET }}
jwt-secret-key: ${{ secrets.JWT_SECRET_KEY }}
jwt-expire-length: ${{ secrets.JWT_EXPIRE_LENGTH }}
steps:
- name: Checkout
uses: actions/checkout@v3
Expand All @@ -30,9 +43,12 @@ jobs:
run: ./gradlew build --exclude-task test --exclude-task asciidoctor

- name: Test
env:
client-id: ${{ secrets.CLIENT_ID }}
client-secret: ${{ secrets.CLIENT_SECRET }}
jwt-secret-key: ${{ secrets.JWT_SECRET_KEY }}
jwt-expire-length: ${{ secrets.JWT_EXPIRE_LENGTH }}
run: ./gradlew test -Doauth2.github.client-id=${{ env.client-id }} -Doauth2.github.client-secret=${{ env.client-secret }} -Dsecurity.jwt.token.secret-key=${{ env.jwt-secret-key }} -Dsecurity.jwt.token.expire-length=${{ env.jwt-expire-length }}

- name: SonarQube
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
run: ./gradlew sonarqube --info

9 changes: 9 additions & 0 deletions .github/workflows/deploy-backend-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ name: Deploy Backend Dev
on:
push:
branches : develop
paths:
- 'backend/**'

defaults:
run:
Expand Down Expand Up @@ -39,6 +41,13 @@ jobs:
jwt-expire-length: ${{ secrets.JWT_EXPIRE_LENGTH }}
run: ./gradlew test -Doauth2.github.client-id=${{ env.client-id }} -Doauth2.github.client-secret=${{ env.client-secret }} -Dsecurity.jwt.token.secret-key=${{ env.jwt-secret-key }} -Dsecurity.jwt.token.expire-length=${{ env.jwt-expire-length }}

- name: SonarQube
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
run: ./gradlew sonarqube --info

- name : Deploy
run: |
curl ${{ secrets.DEPLOY_REQUEST_URL }}
7 changes: 5 additions & 2 deletions .github/workflows/deploy-frontend-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ name: Deploy Frontend Dev
on:
push:
branches: ["develop"]

paths:
- 'frontend/**'

defaults:
run:
working-directory: frontend
Expand Down Expand Up @@ -32,7 +34,8 @@ jobs:
- name: Build
run: npm run build-dev

- uses: cypress-io/github-action@v2
- name: Test
uses: cypress-io/github-action@v2
with:
start: npm run start
wait-on: "http://localhost:3000"
Expand Down
41 changes: 25 additions & 16 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,42 @@ name: frontend

on:
pull_request:
branches: [ "main", "develop" ]
branches: ["main", "develop"]
paths:
- 'frontend/**'

defaults:
run:
working-directory: frontend

jobs:
build:

runs-on: ubuntu-latest

strategy:
matrix:
node-version: [16.x]

steps:
- uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: "./frontend/package-lock.json"

- name: Install
run: npm install

- name: Build
run: npm run build
- uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
cache-dependency-path: "./frontend/package-lock.json"

- name: Install
run: npm install

- name: Build
run: npm run build

- name: Test
uses: cypress-io/github-action@v2
with:
start: npm run start
wait-on: "http://localhost:3000"
working-directory: frontend
config-file: cypress.config.ts
30 changes: 30 additions & 0 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ plugins {
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'org.asciidoctor.jvm.convert' version "3.3.2"
id "org.sonarqube" version "3.4.0.2513"
id 'jacoco'
}

group = 'com.woowacourse'
Expand Down Expand Up @@ -39,6 +41,8 @@ dependencies {

asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation 'org.springframework.restdocs:spring-restdocs-restassured'

implementation 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3'
}

ext {
Expand All @@ -50,6 +54,19 @@ tasks.named('test') {
useJUnitPlatform()
systemProperties = System.getProperties()
finalizedBy 'asciidoctor'
finalizedBy 'jacocoTestReport'
}

jacoco {
toolVersion = "0.8.7"
}

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

asciidoctor.doFirst {
Expand Down Expand Up @@ -79,3 +96,16 @@ task moveDocument(type: Copy) {
bootJar {
dependsOn moveDocument
}

sonarqube {
properties {
property "sonar.projectKey", "woowacourse-teams_2022-moamoa_AYKvd_z4VbW_bWBvgn13"
property "sonar.sources", "src"
property "sonar.language", "java"
property "sonar.sourceEncoding", "UTF-8"
property "sonar.profile", "moamoa"
property "sonar.java.binaries", "${buildDir}/classes"
property "sonar.test.inclusions", "**/*Test.java"
property "sonar.coverage.jacoco.xmlReportPaths", "${buildDir}/reports/jacoco/test/jacocoTestReport.xml"
}
}
45 changes: 45 additions & 0 deletions backend/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
=== Github 로그인
operation::auth/login[snippets='http-request,request-parameters,http-response,response-fields']

=== 리프래시 토큰
operation::auth/refresh[snippets='http-request,http-response']

=== 로그아웃
operation::auth/logout[snippets='http-request,http-response']

[[Member]]
== 회원

Expand Down Expand Up @@ -45,6 +51,45 @@ operation::studies/details[snippets='http-request,http-response']
=== 참여한 스터디 목록 조회
operation::studies/myStudy[snippets='http-request,http-response']

=== 스터디 상세 정보 수정
operation::studies/update[snippets='http-request,http-response']

=== 스터디 탈퇴
operation::studies/leave[snippets='http-request,request-headers,http-response']

[[Comunity]]
== 커뮤니티

=== 커뮤니티 생성
operation::article/create[snippets='http-request,request-headers,request-fields,http-response']

=== 커뮤니티 단건 조회
operation::article/get[snippets='http-request,request-headers,http-response,response-fields']

=== 커뮤니티 전체 조회
operation::article/list[snippets='http-request,request-headers,http-response,response-fields']

=== 커뮤니티 수정
operation::article/update[snippets='http-request,request-headers,http-response']

=== 커뮤니티 삭제
operation::article/delete[snippets='http-request,request-headers,http-response']

[[Reference-Room]]
== 링크 공유

=== 링크 공유글 생성
operation::reference-room/create[snippets='http-request,request-headers,request-fields,http-response']

=== 링크 공유글 전체 조회
operation::reference-room/list[snippets='http-request,request-headers,http-response,response-fields']

=== 링크 공유글 수정
operation::reference-room/update[snippets='http-request,request-headers,http-response']

=== 링크 공유글 삭제
operation::reference-room/delete[snippets='http-request,request-headers,http-response']

[[Tag]]
== 태그

Expand Down
4 changes: 2 additions & 2 deletions backend/src/docs/asciidoc/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ <h3 id="_github_로그인"><a class="link" href="#_github_로그인">Github 로
<h4 id="_github_로그인_http_request"><a class="link" href="#_github_로그인_http_request">HTTP request</a></h4>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-http hljs" data-lang="http">POST /api/login/token?code=authorization-code HTTP/1.1
<pre class="highlightjs highlight nowrap"><code class="language-http hljs" data-lang="http">POST /api/auth/login?code=authorization-code HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:8080</code></pre>
Expand Down Expand Up @@ -890,4 +890,4 @@ <h4 id="My-Role_response_fields"><a class="link" href="#My-Role_response_fields"
}
</script>
</body>
</html>
</html>
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.woowacourse.moamoa.auth.config;

import com.woowacourse.moamoa.auth.controller.AuthenticatedMemberResolver;
import com.woowacourse.moamoa.auth.controller.AuthenticatedRefreshArgumentResolver;
import com.woowacourse.moamoa.auth.controller.AuthenticationArgumentResolver;
import com.woowacourse.moamoa.auth.controller.AuthenticationInterceptor;

import java.util.List;

import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
Expand All @@ -13,21 +16,19 @@
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@RequiredArgsConstructor
public class AuthConfig implements WebMvcConfigurer {

private final AuthenticatedRefreshArgumentResolver authenticatedRefreshArgumentResolver;
private final AuthenticationInterceptor authenticationInterceptor;
private final AuthenticationArgumentResolver authenticationArgumentResolver;

public AuthConfig(
final AuthenticationInterceptor authenticationInterceptor,
final AuthenticationArgumentResolver authenticationArgumentResolver) {
this.authenticationInterceptor = authenticationInterceptor;
this.authenticationArgumentResolver = authenticationArgumentResolver;
}
private final AuthenticatedMemberResolver authenticatedMemberResolver;

@Override
public void addArgumentResolvers(final List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(authenticationArgumentResolver);
resolvers.add(authenticatedMemberResolver);
resolvers.add(authenticatedRefreshArgumentResolver);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.woowacourse.moamoa.auth.config;

import static org.springframework.http.HttpMethod.*;

import com.woowacourse.moamoa.auth.controller.matcher.AuthenticationRequestMatcher;
import com.woowacourse.moamoa.auth.controller.matcher.AuthenticationRequestMatcherBuilder;
import lombok.AllArgsConstructor;
Expand All @@ -14,10 +16,28 @@ public class AuthRequestMatchConfig {
@Bean
public AuthenticationRequestMatcher authenticationRequestMatcher() {
return new AuthenticationRequestMatcherBuilder()
.addUpAuthenticationPath(HttpMethod.POST, "/api/studies", "/api/studies/\\d+/reviews", "/api/studies/\\d+/reviews/\\d+")
.addUpAuthenticationPath(HttpMethod.GET, "/api/my/studies", "/api/members/me", "/api/members/me/role")
.addUpAuthenticationPath(HttpMethod.PUT, "/api/studies/\\d+/reviews/\\d+")
.addUpAuthenticationPath(HttpMethod.DELETE, "/api/studies/\\d+/reviews/\\d+")
.addUpAuthenticationPath(POST,
"/api/studies/\\d+/reviews",
"/api/studies/\\d+/reviews/\\d+",
"/api/studies/\\w+/\\w+/articles",
"/api/studies")
.addUpAuthenticationPath(GET,
"/api/my/studies",
"/api/auth/refresh",
"/api/members/me",
"/api/members/me/role",
"/api/studies/\\w+/community/articles/\\w+",
"/api/studies/\\w+/community/articles",
"/api/studies/\\d+/reference-room/links"
)
.addUpAuthenticationPath(HttpMethod.PUT,
"/api/studies/\\d+/reviews/\\d+",
"/api/studies/\\d+/reference-room/links/\\d+",
"/api/study/\\d+"
)
.addUpAuthenticationPath(HttpMethod.DELETE,
"/api/studies/\\d+/reviews/\\d+",
"/api/studies/\\w+/\\w+/articles/\\w+")
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.woowacourse.moamoa.auth.config;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthenticatedMember {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.woowacourse.moamoa.auth.config;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthenticatedRefresh {
}
Loading

0 comments on commit 27b97f6

Please sign in to comment.