Skip to content

Commit 15b4a37

Browse files
HeeMang-LeeKsr-ccbcoderabbitai[bot]jong-0126crocusia
authored
10-11차 배포 (#416)
* chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * 도커에 레디스 설정파일 추가 (#7) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 도커 설정파일에 레디스 추가 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/6 카카오톡 소셜로그인 + jwt 토큰 발급 (#11) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 도커 설정파일에 레디스 추가 * feat: Jwt 토큰 로그인과 Oauth 기본설정 * fix: 오류수정 * fix: 생성자 누락값 수정 * fix: 생성자 누락값 수정 * chore: 코드정리 * feat: Oauth 구조 변경중.. * feat: 카카오톡 로그인 + jwt 생성 테스트 * feat: 레디스 설정추가 * chore: 코드 정리 * refactor: OAuth2LoginSuccessHandler 책임분리 * refactor: 필터에서 이중작업 정리 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/9 (#14) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/15 (#17) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/8 (#19) * feat(build.gradle): validation 의존성 추가 * feat : CreateQuizDto 생성 * feat : QuizCategoryRepository 추가 * feat(QuizService) : json 파일 데이터 Quiz 엔티티로 변환 후 저장 기능 추가 * feat : QuizCategory 예외 코드 추가 * feat : uploadQuizJson에 예외 코드 사용' 추가 * feat(QuizController) : quiz 업로드 api 추가 * feat(QuizController) : QuizService의 uploadQuizJson 연동 * Ignore application-local.properties * feat : 카테고리 타입 생성 api 추가 * refactor(QuizCategoryService) : 메서드 isPresent로 변경 * refactor : 코드래빗 피드백 기반 누락 및 오타 수정 * docker-compose.yml 케시 삭제 * feat: OAuth2 Github 기능추가 및 임시 메인페이지 추가 (#21) * chore: AuthUser, Role 클래스 global.dto 패키지로 이동 * chore: OAuth 패키지 이름 변경 * chore: 주석 및 띄어쓰기 수정 * feat: OAuth2 응답객체 생성 및 수정 * refactor: OAuth2 서비스 로직 리팩토링 * chore: 임시 랜딩페이지 추가 * chore: Role 클래스를 user.entity 패키지로 이동 * refactor: 소셜정보 가져올 때, 예외처리 추가 * Feat/15 (#18) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 * CI/CD AWS 연동 * CI/CD AWS 연동 * 수정 * commit * 환경변수로 수정 * commit * deploy.yml 수정 * commit * deploy 수정 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/10 (#23) * feat: Ai, 서비스 구현 및 Config 추가. 서비스와 빈 생성을 위한 해당 Config 추가. * feat:AiService * refactor: Ai, 서비스 및 컨트롤러 코드 수정. 작성했던 API 명세서에 맞추어 기능 및 동작 수정. * temp : commit for merge * feat: AI, 테스트코드 구현1. * refactor: aiService subscriptionId 반영 --------- Co-authored-by: Kimyoonbeom <kimybeom@naver.com> Co-authored-by: ChoiHyuk <wannabeing@naver.com> * Feat/13 구독 엔티티 구조 정리 및 구독 정보 조회 (#28) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 패키지 구조 정리 * feat: 요일->int, int->요일 바꾸기 * feat: 요일->int, int->요일 바꾸기 * chore: docker-compose.yml gitignore 추가 * temp: temp commit for pull * temp: temp commit for pull * feat: 구독 엔티티 구조 변경 및 구독 정보 조회 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/27 (#29) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 * CI/CD AWS 연동 * CI/CD AWS 연동 * 수정 * commit * 환경변수로 수정 * commit * deploy.yml 수정 * commit * deploy 수정 * commit * properties 중요정보 환경변수 처리 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/27 (#30) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 * CI/CD AWS 연동 * CI/CD AWS 연동 * 수정 * commit * 환경변수로 수정 * commit * deploy.yml 수정 * commit * deploy 수정 * commit * properties 중요정보 환경변수 처리 * deploy 파일 환경 변수 export --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Fix logging and import issues (#32) * feat: 구독정보/구독내역 생성/수정 로직 추가 및 공통응답 수정 (#33) * chore: 필요없는 어노테이션 삭제 * chore: 공통응답 DTO 수정 - `@RequiredArgsConstructor`는 빌더를 사용한다면 추후 삭제해야 함 * feat: 구독/구독로그 예외처리 추가 및 수정 * feat: 구독기간 enum 클래스 추가 * chore: 구독로그 엔티티에 누락된 컬럼 추가 및 생성자 수정 * refactor: 구독생성자 수정 및 업데이트메서드 추가 * feat: 구독(Subscription) 생성/수정 로직 추가 - SubscriptionLog도 함께 생성되게 추가 * chore: QuizCategory 엔티티에 Getter 추가 * chore: 공통응답 DTO 빌더 삭제 * refactor: 구독로그 테이블명 변경 → 구독내역(SubscriptionHistory) * refactor: 구독테이블에 N+1(QuizCategory) 문제 수정 문제카테고리(QuizCategory)의 경우, 구독내역이 생성될 때마다 쿼리가 중복되어 발생할 수있다고 판단되어 미리 FetchJoin 설정 * feat: 구독 취소 로직 추가 * refactor: QuizCategory 는 생성하는 것이 아닌 조회하는 방식으로 로직 수정 * chore: 예외처리 간단 수정 * refactor: 이메일 동시성문제를 유니크제약조건과 try-catch로 방지 * chore: 엔티티 수정시간과 시간이 다를 수 있기 때문에 엔티티자체의 수정시간을 사용하도록 변경 * chore: QuizCategoryRepository 알맞는 메서드명으로 변경 * chore: 날짜계산을 Days가 아닌 Month로 변경 `plusMonths()` 함수 사용 * Feat/13 로그인 마이페이지 (#35) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 패키지 구조 정리 * feat: 요일->int, int->요일 바꾸기 * feat: 요일->int, int->요일 바꾸기 * chore: docker-compose.yml gitignore 추가 * temp: temp commit for pull * temp: temp commit for pull * feat: 구독 엔티티 구조 변경 및 구독 정보 조회 * fix: 충돌수정 및 변수형 일치문제 해결 * feat: 구독취소, 회원탈퇴 * chore: 각 api별 권한 추가 (계속 추가되어야함) * chore: Quiz_category Enum 삭제 * feat: 로그인 회원 마이페이지 확인 (구독로그 포함) * feat: 구독 비활성화, (임시) 업데이트 * test: 구독 조회 비활성화(로그생성은 아직x) 테스트코드, 로그인 마이페이지 기본기능 테스트 기능 * test: 테스트코드수정 * chore: Quiz_category Enum 삭제 후처리 * chore: Dto 이름 수정 및 파일정리 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/22 인증 코드 이메일 발급 및 검증 (#36) * feat : 이메일 발송을 위한 SMTP 관련 의존성 추가 * feat : 유연성 및 확장성을 위해 MailConfig 추가 * feat : MimeMessage 기반 Html형식 메일 전송 메서드 추가 * feat(UserService) : 인증 코드 생성 * feat : VerificationCode 서비스, 예외 추가 * feat : 인증코드 검증 성공 시, 인증코드 삭제 기능 추가 * feat : 인증 코드 발급 Controller 클래스 추가 * feat : 인증 코드 발송 기능 추가 * refactor : verify 메서드 반환타입 void로 변경 * feat : 인증 코드 관련 api jwt 검증 제외 설정 * fix : 변경된 에러 코드로 인한 실행 오류 수정 * feat : 피드백 기반 수정 * feat : 인증코드 검증 시도 횟수 추가 * refactor : MailConfig 위치 변경 * Feat/31 (#40) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 * CI/CD AWS 연동 * CI/CD AWS 연동 * 수정 * commit * 환경변수로 수정 * commit * deploy.yml 수정 * commit * deploy 수정 * commit * properties 중요정보 환경변수 처리 * deploy 파일 환경 변수 export * 도커 추가하여 배포 * commit * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * commit * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/41 (#42) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 * CI/CD AWS 연동 * CI/CD AWS 연동 * 수정 * commit * 환경변수로 수정 * commit * deploy.yml 수정 * commit * deploy 수정 * commit * properties 중요정보 환경변수 처리 * deploy 파일 환경 변수 export * 도커 추가하여 배포 * commit * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * commit * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/41 (#43) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * Revert "Create run-test.yaml" This reverts commit 3ca826f60d3c9d74264e2213b0837ef3a90e6414. * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * ADD workflow * CI/CD AWS 연동 * CI/CD branches 범위 수정 * CI/CD AWS 연동 * CI/CD AWS 연동 * CI/CD AWS 연동 * 수정 * commit * 환경변수로 수정 * commit * deploy.yml 수정 * commit * deploy 수정 * commit * properties 중요정보 환경변수 처리 * deploy 파일 환경 변수 export * 도커 추가하여 배포 * commit * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * commit * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 * 도커 추가하여 배포 --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/39 AI, RAG 및 Chroma 연동 중간 커밋 (#45) * temp : commit for merge * feat: chroma 연동, RAG 구조 구현 그에 따른 AiService 파일 수정. * refactor: chroma 연동, RAG 구조 구현 수정. * Feat: OAuth2 Naver 로그인 기능 추가 및 관련 코드 수정 (#48) * build: mysql-connector 버전 업데이트 보안 이슈로 버전 업데이트 * refactor: OAuth2 예외 처리 수정 및 생성 UserException에서 분리했음 * chore: OAuth2 카카오 응답객체 예외처리 수정 * fix: OAuth2 Github 로그인 시, 이메일 누락 방지 로직 추가 accessToken 활용하여 이메일 가져오기 * feat: OAuth2 네이버 로그인 기능 추가 공통 유틸메서드를 제공하기 위해 추상클래스 생성 * chore: OAuth2 추상클래스 적용 * chore: OAuth2 데이터(attributes) 파싱 예외처리 코드 추가 * chore: OAuth2Service를 OAuth2 패키지로 이동 및 패키지명 수정 사용하지 않는 Controller, Service, Repository 삭제 * chore: 간단 로직 수정 * Feat/12 오늘의 문제 뽑아주기 & 하루에 한번씩 돌아가는 문제 정답률 계산 (#44) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * feat: 문제 추천1 차 * feat: 각 문제별 정답률 계산, 유저 개인의 정답률 계산 * feat: 문제를 내어주는 두가지 방법 * - getTodayQuiz -> getTodayQuizNew (O) - getTodayQuizNew -> getTodayQuiz (X) 둘중에 하나씩만 쓰거나 getTodayQuiz -> getTodayQuizNew 해야함 리턴값은 지금 api 형식으로 만든다고 QuizDto 인데, Quiz로 바꿔서 줄 수 있음 * feat: 문제를 내어주는 두가지 방법 * - getTodayQuiz -> getTodayQuizNew (O) - getTodayQuizNew -> getTodayQuiz (X) 둘중에 하나씩만 쓰거나 getTodayQuiz -> getTodayQuizNew 해야함 리턴값은 지금 api 형식으로 만든다고 QuizDto 인데, Quiz로 바꿔서 줄 수 있음 * test: 문제를 내어주는 두가지 방법 테스트코드 * fix: 포특밧 되돌려줌 * refactor: 정답률 포멧 스케일 통일화 * fix: 오류검증 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * chore/50 도커 컴포즈 파일 변경 (#52) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 도커 볼륨 구조 변경 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/49 github md파일 크롤링 기능 추가 (#53) * feat : 깃허브 url Parser 추가 * feat : 크롤링 기능 추가 * feat : 프로젝트 내에 저장 기능 추가 * feat : 크롤링한 파일을 프로젝트 폴더 내에 저장하는 기능 추가 * chore : chroma 설정 주석 해제 * feat : 컨트롤러 추가 * feat : VectorStore에 저장 메서드 추가 * refactor : List<Document> 전역변수에서 지역변수로 변경 * feat : CrawlerController 예외 추가 * feat: 답안 체점 로직 구현 (#55) test: - 정상 체점 후 데이터 저장 - 구독 정보 없는 경우 예외 처리 - 퀴즈 정보 없는 경우 예외 처리 * Feat/38 문제풀이 링크 이메일 발송 및 테스트 코드 (#56) * feat : 문제 발송용 이메일 sender 임시 생성 * feat : today-quiz.html 추가 * feat : 문제 발송 부분 추가 * feat : 수정사항 없음 * feat : 문제 선택 후, 이메일 발송 기능 추가 * feat : 문제 선정 후 발송하는 issueTodayQuiz 추가 * feat : 문제 발송 메일 로그 남기기 * feat : MailLogResponseDto 생성 * refactor : 변경에 따른 issueTodayQuiz 수정 * feat : 간단한 테스트 코드 추가 * feat : 이메일 발송 성공, 실패 테스트 케이스 추가 * feat : 동기일 때의 성능 측정 테스트 코드 추가 * feat : 속도 성능 테스트 추가 * Chore/54 중간 테스트, 필요한 예외처리 및 모니터링 도구 설치(그라파나, 프로메테우스) (#59) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 도커 볼륨 구조 변경 * chore: 실행오류 수정, 글로벌 오류 핸들링 경우의 수 추가 * fix: 구독 생성, 수정시 ModelAttribute 사용되게 변경 * refactor: 필요없는 함수삭제, url 정정 * refactor: dto에 카테고리 객체 반환하지 않도록 수정 * feat: jwt 리프래시 토큰 기반 로그인연장, 로그아웃 * chore: jwt 토큰 오류 반환하도록 설정 * fix: jwt 토큰 오류시 로그인 html 출력안되도록 설정 * fix: SecurityConfig 단에서 인증인가 오류 개선 * refactor: SecurityConfig 구조 변경 * refactor: 그라파나, 프로메테우스 적용, 로그인페이지 임시 제작 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * feat : 메일 발송 api 추가 (#63) * Feat/58 문제, 정답, 해설 조회 기능 구현 (#64) * feat: 답안 체점 로직 구현 test: - 정상 체점 후 데이터 저장 - 구독 정보 없는 경우 예외 처리 - 퀴즈 정보 없는 경우 예외 처리 * feat: 문제, 정답, 해설 조회 기능 구현 test: - 정상 조회 확인 - 퀴즈 없는 경우 예외처리 * feat: 문제, 정답, 해설 조회 기능 구현 test: - 정상 조회 확인 - 퀴즈 없는 경우 예외처리 * feat/39 RAG 구조 완성 및 서비스 컨트롤러 리팩토링. (#66) * temp : commit for merge * feat: chroma 연동, RAG 구조 구현 그에 따른 AiService 파일 수정. * refactor: chroma 연동, RAG 구조 구현 수정. * feat: 깃허브 document 생성을 위한 RagService 수정. * feat: 깃허브 document 생성을 위한 RagService 수정. * refactor: 경로 인코딩, API 호출 URL, 예외 발생 여부 확인을 위한 로그 추가. * refactor: 깃허브 크롤링, 로그 추가 및 파싱 방식 수정. * refactor: RagService의 세부 수치의 조정. * refactor: test코드 추가 수정. * Feat/62 문제 확인 페이지 생성 (#67) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * feat: 퀴즈 페이지 * feat: 퀴즈 페이지 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/SpringBatch (with Jenkins) 적용 (#70) * build: SpringBatch 설치 및 QueryDsl 버전 설정 * feat: Docker-Compose에 Jenkins 설정 * feat: SpringBatch 데일리 메일 전송 Job 설정 * Feat/71 (#73) * feat: 답안 체점 로직 구현 test: - 정상 체점 후 데이터 저장 - 구독 정보 없는 경우 예외 처리 - 퀴즈 정보 없는 경우 예외 처리 * feat: 문제, 정답, 해설 조회 기능 구현 test: - 정상 조회 확인 - 퀴즈 없는 경우 예외처리 * feat: 문제, 정답, 해설 조회 기능 구현 test: - 정상 조회 확인 - 퀴즈 없는 경우 예외처리 * feat: 퀴즈 정답 선택률 조회 기능 구현 test: - 정상 조회 확인 * Feat/57 이메일 발송 MQ + 비동기 처리 추가 (#72) * feat : Redis Streams 기반 메시지 큐 패턴 적용 * feat : 스프링 배치에 추가 * feat : 테스트 코드 추가 * refactor : 테스트 코드 실행 확인 완료 * refactor : 메일 로그 저장하는 aop 적용 * feat : 발송 실패한 메일 처리하는 큐 추가 * feat : Step 실행 logger 추가 * feat : 속도 성능 테스트 추가 * chore : 테스트 코드 메일 주소 변경 * chore : 테스트 코드 링크 변경 * Fix/프론트엔드 연동을 위한 최소한의 작업 (#75) * build: SpringBatch 설치 및 QueryDsl 버전 설정 * feat: Docker-Compose에 Jenkins 설정 * feat: SpringBatch 데일리 메일 전송 Job 설정 * feat: QuizCategory 조회 API 생성 * chore: 프론트단 데이터 받아오는 형식 JSON으로 변경 * chore: 이미구독중인지 확인하는 메서드 추가 * feat: 이메일 템플릿 추가 * chore: MYSQL 포트 3306 변경 * refactor : 변경된 html과 연동 --------- Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> * fix : 예외처리를 위한 조건문 추가 (#79) * Feat/76 (#80) * feat: 답안 체점 로직 구현 test: - 정상 체점 후 데이터 저장 - 구독 정보 없는 경우 예외 처리 - 퀴즈 정보 없는 경우 예외 처리 * feat: 문제, 정답, 해설 조회 기능 구현 test: - 정상 조회 확인 - 퀴즈 없는 경우 예외처리 * feat: 문제, 정답, 해설 조회 기능 구현 test: - 정상 조회 확인 - 퀴즈 없는 경우 예외처리 * feat: 퀴즈 정답 선택률 조회 기능 구현 test: - 정상 조회 확인 * feat: 퀴즈 정답 선택률 조회 기능 구현 test: - 정상 조회 확인 * refactor: - 도커 컴포즈 mysql 포트 3306 변경 - 레디스 버전 7.2로 변경 - mail test code 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * 도커 컴포즈 수정 * chore: forward-header 전략 설정 (#81) OAuth2 인증을 위한 설정 * 1차 배포 * 1차 배포 * 1차 병합 (#83) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. --------- Co-authored-by: Ksr-ccb <harang4282@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * fix: aiFeedback 컬럼 데이터길이 수정 (#88) * Chore: 메일서비스 링크 도메인 변경 (#89) * chore: 엔티티수정 * fix: 테스트코드 오류수정 * fix: 테스트코드 오류수정 * fix: 메일 서비스 도메인 수정 * Refactor/78 : 문제풀이 링크 발송 흐름 일부 수정, 성능 개선 1차 (#90) * chore : 테스트용 Job 주석 제거 및 용도별 Job 분리 * chore : batch 커스텀 컴포넌트 패키지 변경 * refactor : processor에 유효성 검증, 문제 출제 추가 * refactor : 문제 출제 위치 변경 * doc : 로그 주석 처리 * chore : 테스트 코드 주석처리 * feat : 테스트용 api 추가 * fix/78 : BatchService Bean 주입 오류 개선 (#93) * fix : BatchService에서 Qualifier 적용을 위해 직접 생성자 작성 * Feat/68 프롬프팅 적용 방식 리팩토링 및 RAG 문서분류성능평가 테스트 코드 작성 (#94) * temp : commit for merge * feat: chroma 연동, RAG 구조 구현 그에 따른 AiService 파일 수정. * refactor: chroma 연동, RAG 구조 구현 수정. * feat: 깃허브 document 생성을 위한 RagService 수정. * feat: 깃허브 document 생성을 위한 RagService 수정. * refactor: answerId 기반 AI 피드백 조회 로직으로 변경 * refactor: 프롬프트 하드코딩 제거 및 YAML 기반 구성 적용 * feat: 크로마 벡터 DB 문서 적재 후 원격 공유 가능하게함 * 변경 사항 저장용 * refactor: 문서 기반 서비스 테스트 리팩토링 * 1차 배포 (#86) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * 도커에 레디스 설정파일 추가 (#7) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 도커 설정파일에 레디스 추가 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/6 카카오톡 소셜로그인 + jwt 토큰 발급 (#11) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: * `src/main/java/com/example/cs25/domain/ai/exception/AiException.java` * `src/main/java/com/example/cs25/domain/mail/entity/MailLog.java` * `src/main/java/com/example/cs25/domain/mail/exception/MailException.java` * `src/main/java/com/example/cs25/domain/oauth/exception/OauthException.java` * `src/main/java/com/example/cs25/domain/quiz/exception/QuizException.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/entity/UserQuizAnswer.java` * `src/main/java/com/example/cs25/domain/userQuizAnswer/exception/UserQuizAnswerException.java` * `src/main/java/com/example/cs25/domain/users/entity/User.java` * `src/main/java/com/example/cs25/domain/users/exception/UserException.java` * `src/main/java/com/example/cs25/domain/users/vo/Subscription.java` * `src/main/java/com/example/cs25/global/exception/BaseException.java` * `src/main/java/com/example/cs25/global/exception/GlobalExceptionHandler.java` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Create run-test.yaml * Create PULL_REQUEST_TEMPLATE.md * refactor: ERD 수정으로 인한 Entity 수정 (#4) * refactor: ERD 수정으로 인한 Entity 수정. * refactor: ERD 수정으로 인한 Entity 수정2. * chore: 도커 설정파일에 레디스 추가 * feat: Jwt 토큰 로그인과 Oauth 기본설정 * fix: 오류수정 * fix: 생성자 누락값 수정 * fix: 생성자 누락값 수정 * chore: 코드정리 * feat: Oauth 구조 변경중.. * feat: 카카오톡 로그인 + jwt 생성 테스트 * feat: 레디스 설정추가 * chore: 코드 정리 * refactor: OAuth2LoginSuccessHandler 책임분리 * refactor: 필터에서 이중작업 정리 --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Baek jonghyun <69610809+jong-0126@users.noreply.github.com> Co-authored-by: crocusia <132359536+crocusia@users.noreply.github.com> Co-authored-by: Kimyoonbeom <101162650+Kimyoonbeom@users.noreply.github.com> * Feat/9 (#14) * chore : initialize project structure (#2) * chore: initialize project structure * chore: initialize project structure * chore: initialize project structure * fix: 엔티티 오류수정 및 설정파일 오류 수정 * 📝 Add docstrings to `dev` (#3) Docstrings generation was requested by @Ksr-ccb. * https://github.com/NBC-finalProject/CS25/pull/2#issuecomment-2914743195 The following files were modified: *…
1 parent 2cc6c83 commit 15b4a37

5 files changed

Lines changed: 119 additions & 30 deletions

File tree

cs25-service/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ dependencies {
3333
implementation "org.springframework.ai:spring-ai-starter-mcp-client:1.0.0"
3434
implementation "org.springframework.ai:spring-ai-starter-mcp-client-webflux:1.0.0"
3535

36+
// resilience4j
37+
implementation 'io.github.resilience4j:resilience4j-spring-boot3:2.3.0'
38+
implementation 'io.github.resilience4j:resilience4j-circuitbreaker:2.3.0'
39+
implementation 'io.github.resilience4j:resilience4j-retry:2.3.0'
40+
implementation 'io.github.resilience4j:resilience4j-reactor:2.3.0'
41+
3642
//JavaMailSender
3743
implementation 'jakarta.mail:jakarta.mail-api:2.1.0'
3844

cs25-service/src/main/java/com/example/cs25service/domain/ai/client/ClaudeChatClient.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.example.cs25service.domain.ai.exception.AiException;
44
import com.example.cs25service.domain.ai.exception.AiExceptionCode;
5+
import com.example.cs25service.domain.ai.resilience.AiResilience;
56
import org.springframework.ai.chat.client.ChatClient;
67
import org.springframework.beans.factory.annotation.Qualifier;
78
import org.springframework.stereotype.Component;
@@ -11,18 +12,23 @@
1112
public class ClaudeChatClient implements AiChatClient {
1213

1314
private final ChatClient anthropicChatClient;
15+
private final AiResilience resilience;
1416

15-
public ClaudeChatClient(@Qualifier("anthropicChatClient") ChatClient anthropicChatClient) {
17+
public ClaudeChatClient(@Qualifier("anthropicChatClient") ChatClient anthropicChatClient,
18+
AiResilience resilience) {
1619
this.anthropicChatClient = anthropicChatClient;
20+
this.resilience = resilience;
1721
}
1822

1923
@Override
2024
public String call(String systemPrompt, String userPrompt) {
21-
return anthropicChatClient.prompt()
22-
.system(systemPrompt)
23-
.user(userPrompt)
24-
.call()
25-
.content();
25+
return resilience.executeSync("claude", () ->
26+
anthropicChatClient.prompt()
27+
.system(systemPrompt)
28+
.user(userPrompt)
29+
.call()
30+
.content()
31+
);
2632
}
2733

2834
@Override
@@ -32,13 +38,12 @@ public ChatClient raw() {
3238

3339
@Override
3440
public Flux<String> stream(String systemPrompt, String userPrompt) {
35-
return anthropicChatClient.prompt()
36-
.system(systemPrompt)
37-
.user(userPrompt)
38-
.stream()
39-
.content()
40-
.onErrorResume(error -> {
41-
throw new AiException(AiExceptionCode.INTERNAL_SERVER_ERROR);
42-
});
41+
return resilience.executeStream("claude", () ->
42+
anthropicChatClient.prompt()
43+
.system(systemPrompt)
44+
.user(userPrompt)
45+
.stream()
46+
.content()
47+
).onErrorMap(e -> new AiException(AiExceptionCode.INTERNAL_SERVER_ERROR));
4348
}
4449
}

cs25-service/src/main/java/com/example/cs25service/domain/ai/client/OpenAiChatClient.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.example.cs25service.domain.ai.exception.AiException;
44
import com.example.cs25service.domain.ai.exception.AiExceptionCode;
5+
import com.example.cs25service.domain.ai.resilience.AiResilience;
56
import org.springframework.ai.chat.client.ChatClient;
67
import org.springframework.beans.factory.annotation.Qualifier;
78
import org.springframework.stereotype.Component;
@@ -11,19 +12,25 @@
1112
public class OpenAiChatClient implements AiChatClient {
1213

1314
private final ChatClient openAiChatClient;
15+
private final AiResilience resilience;
1416

15-
public OpenAiChatClient(@Qualifier("openAiChatModelClient") ChatClient openAiChatClient) {
17+
public OpenAiChatClient(
18+
@Qualifier("openAiChatModelClient") ChatClient openAiChatClient,
19+
AiResilience resilience) {
1620
this.openAiChatClient = openAiChatClient;
21+
this.resilience = resilience;
1722
}
1823

1924
@Override
2025
public String call(String systemPrompt, String userPrompt) {
21-
return openAiChatClient.prompt()
22-
.system(systemPrompt)
23-
.user(userPrompt)
24-
.call()
25-
.content()
26-
.trim();
26+
return resilience.executeSync("openai", () ->
27+
openAiChatClient.prompt()
28+
.system(systemPrompt)
29+
.user(userPrompt)
30+
.call()
31+
.content()
32+
.trim()
33+
);
2734
}
2835

2936
@Override
@@ -33,13 +40,12 @@ public ChatClient raw() {
3340

3441
@Override
3542
public Flux<String> stream(String systemPrompt, String userPrompt) {
36-
return openAiChatClient.prompt()
37-
.system(systemPrompt)
38-
.user(userPrompt)
39-
.stream()
40-
.content()
41-
.onErrorResume(error -> {
42-
throw new AiException(AiExceptionCode.INTERNAL_SERVER_ERROR);
43-
});
43+
return resilience.executeStream("openai", () ->
44+
openAiChatClient.prompt()
45+
.system(systemPrompt)
46+
.user(userPrompt)
47+
.stream()
48+
.content()
49+
).onErrorMap(e -> new AiException(AiExceptionCode.INTERNAL_SERVER_ERROR));
4450
}
4551
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.example.cs25service.domain.ai.resilience;
2+
3+
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
4+
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
5+
import io.github.resilience4j.reactor.circuitbreaker.operator.CircuitBreakerOperator;
6+
import io.github.resilience4j.reactor.retry.RetryOperator;
7+
import io.github.resilience4j.retry.Retry;
8+
import io.github.resilience4j.retry.RetryRegistry;
9+
import java.util.function.Supplier;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Component;
12+
import reactor.core.publisher.Flux;
13+
14+
@Component
15+
@RequiredArgsConstructor
16+
public class AiResilience {
17+
18+
private final CircuitBreakerRegistry cbRegistry;
19+
private final RetryRegistry retryRegistry;
20+
21+
/**
22+
* 동기 호출: Retry → CircuitBreaker 순서
23+
*/
24+
public <T> T executeSync(String name, Supplier<T> supplier) {
25+
CircuitBreaker cb = cbRegistry.circuitBreaker(name);
26+
Retry retry = retryRegistry.retry(name);
27+
28+
Supplier<T> withRetry = Retry.decorateSupplier(retry, supplier);
29+
Supplier<T> withCb = CircuitBreaker.decorateSupplier(cb, withRetry);
30+
31+
return withCb.get();
32+
}
33+
34+
/**
35+
* Flux 스트리밍: RetryOperator → CircuitBreakerOperator 순서
36+
*/
37+
public <T> Flux<T> executeStream(String name, Supplier<Flux<T>> supplier) {
38+
CircuitBreaker cb = cbRegistry.circuitBreaker(name);
39+
Retry retry = retryRegistry.retry(name);
40+
41+
return supplier.get()
42+
.transformDeferred(RetryOperator.of(retry))
43+
.transformDeferred(CircuitBreakerOperator.of(cb));
44+
}
45+
}

cs25-service/src/main/resources/application.properties

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,39 @@ spring.ai.mcp.client.enabled=true
6767
spring.ai.mcp.client.type=SYNC
6868
spring.ai.mcp.client.request-timeout=60s
6969
spring.ai.mcp.client.root-change-notification=false
70-
# STDIO Connect: Brave Search
70+
# Brave Search
7171
spring.ai.mcp.client.stdio.connections.brave.command=server-brave-search
7272
spring.ai.mcp.client.stdio.connections.brave.args[0]=--transport
7373
spring.ai.mcp.client.stdio.connections.brave.args[1]=stdio
7474
spring.ai.mcp.client.stdio.connections.brave.env.BRAVE_API_KEY=${BRAVE_API_KEY}
7575
spring.autoconfigure.exclude=org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration
76+
# CircuitBreaker
77+
resilience4j.circuitbreaker.configs.default.slidingWindowType=COUNT_BASED
78+
resilience4j.circuitbreaker.configs.default.slidingWindowSize=10
79+
resilience4j.circuitbreaker.configs.default.failureRateThreshold=50
80+
resilience4j.circuitbreaker.configs.default.slowCallDurationThreshold=5s
81+
resilience4j.circuitbreaker.configs.default.slowCallRateThreshold=70
82+
resilience4j.circuitbreaker.configs.default.minimumNumberOfCalls=6
83+
resilience4j.circuitbreaker.configs.default.waitDurationInOpenState=30m
84+
resilience4j.circuitbreaker.configs.default.permittedNumberOfCallsInHalfOpenState=1
85+
resilience4j.circuitbreaker.configs.default.automaticTransitionFromOpenToHalfOpenEnabled=true
86+
resilience4j.circuitbreaker.instances.openai.baseConfig=default
87+
resilience4j.circuitbreaker.instances.claude.baseConfig=default
88+
resilience4j.circuitbreaker.configs.default.ignoreExceptions[0]=org.springframework.web.reactive.function.client.WebClientResponseException.BadRequest
89+
resilience4j.circuitbreaker.configs.default.ignoreExceptions[1]=org.springframework.web.reactive.function.client.WebClientResponseException.Unauthorized
90+
resilience4j.circuitbreaker.configs.default.ignoreExceptions[2]=org.springframework.web.reactive.function.client.WebClientResponseException.Forbidden
91+
resilience4j.circuitbreaker.configs.default.ignoreExceptions[3]=org.springframework.web.reactive.function.client.WebClientResponseException.NotFound
92+
# Retry
93+
resilience4j.retry.configs.default.maxAttempts=2
94+
resilience4j.retry.configs.default.waitDuration=200ms
95+
resilience4j.retry.configs.default.enableExponentialBackoff=true
96+
resilience4j.retry.configs.default.exponentialBackoffMultiplier=2
97+
resilience4j.retry.instances.openai.baseConfig=default
98+
resilience4j.retry.instances.claude.baseConfig=default
99+
resilience4j.retry.configs.default.ignoreExceptions[0]=org.springframework.web.reactive.function.client.WebClientResponseException.BadRequest
100+
resilience4j.retry.configs.default.ignoreExceptions[1]=org.springframework.web.reactive.function.client.WebClientResponseException.Unauthorized
101+
resilience4j.retry.configs.default.ignoreExceptions[2]=org.springframework.web.reactive.function.client.WebClientResponseException.Forbidden
102+
resilience4j.retry.configs.default.ignoreExceptions[3]=org.springframework.web.reactive.function.client.WebClientResponseException.NotFound
76103
#MAIL
77104
spring.mail.host=smtp.gmail.com
78105
spring.mail.port=587

0 commit comments

Comments
 (0)