Skip to content

Commit 9f601f9

Browse files
Ssamssamukjayongjun0511juuuuone2ghrmsdev2yup
authored
[Merge/#161] develop to main (#164)
* [chore/#1] initial setting (#3) * chore: PR 리뷰 요청 자동화 * chore: Issue template 추가 * chore: PR Template * chore: root module build.gradle 설정 * chore: api, batch, infrastructure, common, 그리고 domain 모듈 생성 * [chore/#1] spotless 적용 * [chore/#1] pre-commit과 gradle task설정 * chore: testing pre-commit * style: spotless * style: spotless * fix: git permission 추가 * [chore/#1] trigger review * [chore/#1] trigger review * [chore/#1] reviewer trigger try --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#4] api 전역 에러 처리 구현 (#5) * chore: clokey-common-web 모듈 추가 * chore: 전역 에러 구현 * chore: 성공 코드 구현 * feat: api용 전역 에러 처리 구현 * refactor: BaseResponse record화 및 timeStamp 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#6] QueryDSL 설정 및 Swagger 설정 (#7) * [chore/#6] queryDSL 설정 완료 * chore: Swagger Config 구현 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#8] 모듈 의존성 추가 (#9) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#10] jacoco & sonarcloud 설정 (#11) * [chore/#10] batch 의존성 임시 주석 처리 * feat: build gradle에 sonar cloud와 jacoco설정 * [feat/#10] CI 파이프라인 구현 * [fix/#10] sonarcloud key 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#12] DB 세팅과 flyway 세팅 (#13) * [chore/#12] .env gitIgnore 추가 * [chore/#12] 의존성 추가 * [chore/#12] 테스트 환경용 yml 추가 * [chore/#12] 환경별 yml 구현 * [feat/#12] test전용 redis container 구현 * [feat/#10] redis config및 infra 모듈 설정 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [test/#14] 테스트 유틸리티 구현 (#15) * [chore/#14] 디렉토리 구조 수정 * [feat/#14] DB Cleaner 도입 및 Integration 상속 추상 클래스 구현 * [feat/#14] redis cleaner 구현 * [feat/#14] Transaction Util 구현 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#16] db migration (#17) * [feat/#16] db 마이그레이션 적용 * [refactor/#16] 엔티티 순서 변경 * [fix/#16] spotless * [fix/#16] sql 문법 수정 * [fix/#16] sql 문법 수정 * refactor: repository 래픽토링 및 도메인 분리 * refactor: 카테고리 엔티티 리팩토링 * refactor: cloth 도메인 리팩토링 완료 * refactor: comment 도메인 리팩토링 완료 * refactor: folder 도메인 리팩터링 * refactor: 기록 도메인 리팩터링 * refactor: like 도메인 리팩터링 * refactor: notification 도메인 리팩터링 * refactor: 도메인 리팩터링 * refactor: init script Base Entity 필드 NOT NULL 추가 * refactor: comment 도메인 댓글 제한 완화 * feat: HistoryType 추가 * feat: HistoryClothTag 엔티티 추가 * feat: 양방향 매핑 추가 * refactor: member 인증 정보 Embedded로 관리 * refactor: init sql 동기호 * fix: H2와 MySQL의 uk 중복 문제 해결 * chore: 양방향 매핑 주석화 * refactor: report 관련 enum 경로 변경 * refactor: 좌표 명명 변경 * refactor: notnull 수정 * refactor: nullable = false 삭제 및 NotNull 추가 * refactor: Comment 테이블 parent_id 삭제 * refactor: HistoryClothTag 변수명 변경 (coordinateX) * refactor: NotNull로 변경 * refactor: sql문 enum필드 길이 255로 변경 * refactor: column명 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: Ssamssamukja <109636635+Ssamssamukja@users.noreply.github.com> * [feat/#19] 옷 생성 API 구현 (#20) * feat: 옷 생성 로직 구현 * fix: 에러 핸들러 수정 * test: 컨트롤러 테스트 작성 * test: service test 작성 * refactor: 업데이트 로직 정정 * fix: 에러 핸들러 수정 * fix: 오타 정정 * test: service 에러 컨트롤러 테스트 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat] 댓글 및 대댓글 작성 API 구현 (#24) * feat: 기능 구현 완료 * fix: test 오류 수정 * fix: 권한 확인 로직 수정 * refactor: 수정 사항 반영 * feat: 동시성 에러 처리 로직 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/28] 기록의 댓글 목록 조회 API 구현 (#29) * refactor: 동시성 처리 로직 리팩토링 * feat: SliceResponse 생성 * feat: 댓글 조회 기능 구현 * refactor: API 주소 정정 * refactor: 대댓글 존재 여부 추가 * test: controller test 작성 완료 * refactor: 동시성 테스트 방식 spy로 변경 * test: service 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#22] 프로필수정 api 구현 (#26) * [feat/#22] 프로필 수정 api 구현 * [feat/#22] 테스트 추가 * [fix/#22] spotless 추가 * [refactor/#22 bio 길이 수정 * [refactor/#22 dto 업데이트 시간 제거] * [refactor/#22] response Dto 제거 * [refactor/#22] 테스트 수정 * [refactor/#22] registerStatus 제거 * [fix/#22] 테스트 오류 수정 * [refactor/#22] 피드백 반영 수정 * [fix/#22] test 오류 해결 * [feat/#30] 대댓글 조회 API 구현 (#31) * feat: 대댓글 조회 API 구현 * feat: service 테스트 작성 완료 * test: controller test 작성 * fix: custom annotation의 에러 메시지가 출력되지 않던 에러 수정 * fix: 테스트 조건 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#25] OIDC 기반 소셜 로그인 구현 (#34) * chore: 파일 경로 수정 * feat: OauthProperties 추가 * feat: feign config 구현 * feat: Kakao client 추가 * feat: KakaoAuthConfig 구현 * feat: Oauth에 필요한 DTO * feat: Kakao Client 구현 * feat: 소셜 로그인 구현 중간 저장 * feat: OIDC기반 회원가입 구현 * feat: 유저 정보 조회 API 구현 * feat: yml에 JWT 관련 사항 추가 * chore: 디렉토리 구조 수정 * feat: 인증 실패 헨들러 구현 * feat: security chain 구현 * chore: yml docs 정렬 기준 설정 * refactor: member에 visibility 조정 메서드 추가 * chore: security 관련 Util 및 필터 테스트 커버 대상 제외 * chore: Properties 및 Principle 테스트 커버리지 대상 제외 * test: 유저 상태 확인 테스트 코드 작성 * fix: clokey-domain 모듈만 커버리지 제외 * refactor: 테스트 커버리지용 테스트 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#27] id duplicate check (#33) * [feat/#27] api 작업중 * [feat/#27] id 중복검사 api 구현 * [fix/#27]-test로직 수정 * [refactor/#27] 불필요한 주석 제거 * [fix/#27] 에러코드수정 * [refactor/#27] 컨트롤러수정 * [refactor/#27] 서비스수정 * [refactor/#27] 테스트 수정 * [fix/#27] test 오류 수정중 * [fix/#27] 테스트 수정중 * [fix/#27] 서비스테스트 수정중 * [fix/#27] 오타 수정 * refactor: API 구조 개편 * refactor: 컨트롤러 테스트 개편 * refactor: 임시 저장 * fix: 로그인 오류 해결 * refactor: 서비스 테스트 리팩토링 완료 * fix: 컨트롤러 테스트 오류 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#35] 토큰 재발급 기능 구현 (#36) * fix: 누락된 대댓글 테스트 추가 * feat: 토큰 재발급 기능 구현 * test: 컨트롤러 테스트 작성 * test: 서비스 테스트 작성 * chore: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#37] 로그아웃 API 구현 (#38) * feat: 기능 구현 * test: 테스트 코드 작성 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#39] 약관 동의 API (#40) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [refactor/#41] 약관 동의 API에서 device token 입력 분리 (#42) * feat: 기능 구현 및 테스트 완료 * refactor: 약관 동의 API에서 device token을 받는 부분 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#43] 전체 약관 조회 API (#44) * feat: 기능 구현 * test: 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [docs/#49] Clokey Docs 작성 (#50) * docs: 코드 컨벤션 작성 * docs: 문서 작성 완료 * docs: layered Dto 설명 추가 * docs: clokey discord thread 사용방법 추가 * docs: flyway 명명규칙 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: 이호근 <aa020228@gmail.com> Co-authored-by: paeng <127924700+juuuuone@users.noreply.github.com> * [feat/#45] 나의 선택 약관 정보 조회 및 변경 API 구현 (#46) * feat: 기능 구현 * fix: 에러 수정 * test: controller test 구현 * test: service test 구현 * refactor: 누락된 테스트 추가 * refactor: 에러 코드 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#52] 회원 차단 API 구현 (#53) * feat: 차단 기능 구현 * feat: 차단 대상이 존재하지 않는 경우 예외 처리 * test: 테스트 코드 작성 * refactor: path variable 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#56] 댓글 & 대댓글 삭제 API (#57) * [feat/#56] 기능 구현 완료 * [test/#56] service test 작성 완료 * [test/#56] 컨트롤러 테스트 작성 완료 * [test/#56] 컨트롤러 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#58] Presigned URL 관련 유틸리티 함수 구현 (#59) * [feat/#58] 기능 구현 완료 * [chore/58] 신입 멤버 CODEOWNERS 추가 * [fix/#58] test yml에 더미값 추가 * [fix/#58] 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [docs/#61] flyway 누락 이미지 추가 (#62) * [docs/#61] 이미지 url 수정 * [docs/#61] 사진 업데이트 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#63] 오늘의 코디 생성 API 구현 (#64) * [feat/#63] 도메인 및 init script 추가 * feat: coordinate 생성 기능 구현 * [feat/#63] 코디 생성 로직 구현 * [feat/#63] controller test 작성 완료 * [test/#63] test 작성 완료 * [docs/#63] 레디스 키 관련 문서화 추가 * [fix/#63] 테스트 오류 수정 * fix: clothes 오타 정정 * feat: 옷의 개수에 관한 검증 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#60] 신고 생성 api 구현 (#65) * [fix]@tag순서 명세서대로 재배치 * feat: Report 엔티티 생성 * Revert "feat: Report 엔티티 생성" This reverts commit 21511d7. * feat: Report 엔티티 생성 * feat: 신고사유 및 신고컨텐츠타입 ENUM작성 * feat: ReportCreate 요청/응답DTO 작성 * fix: ReportCreateRequest 수정 * feat: ReportController 생성 * feat: ReportService 생성, reportCreate구현 * feat: Report repository 및 exception 생성 * feat: Report 도메인 로직 추가 * fix: validateTargetExists로직 수정 * [docs/#61] flyway 누락 이미지 추가 (#62) * [docs/#61] 이미지 url 수정 * [docs/#61] 사진 업데이트 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#63] 오늘의 코디 생성 API 구현 (#64) * [feat/#63] 도메인 및 init script 추가 * feat: coordinate 생성 기능 구현 * [feat/#63] 코디 생성 로직 구현 * [feat/#63] controller test 작성 완료 * [test/#63] test 작성 완료 * [docs/#63] 레디스 키 관련 문서화 추가 * [fix/#63] 테스트 오류 수정 * fix: clothes 오타 정정 * feat: 옷의 개수에 관한 검증 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * delete: 기존 엔티티 및 레포지토리 삭제 * feat: Report ddl 작성 * delete: 기존 Report 관련 enum 삭제 * fix: ReportController 수정 * feat: @JsonCreator 메서드 작성 * fix: ReportErrorCode 수정 * fix: creatHistory -> createHistory오타수정 * fix: creatHistory -> createHistory오타수정 * Refactor: 신고 생성 검증 로직 변경 * feat: 신고 생성 테스트 코드 추가 * fix: JsonCreator애노테이션 누락 추가 * fix: 기타 누락 및 오타 수정 --------- Co-authored-by: 나용준 <dydwnssk99@gmail.com> Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [fix/#69] S3 Utils 문제 & 양방향 삭제 로직 제거 (#70) * fix: S3 문제 사항 수정 * refactor: 양방향 삭제 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#72] 본인 확인 API 구현 (#73) * feat: 본인확인 api response dto 생성 * feat: 본인확인 API 컨트롤러, 서비스 구현 * feat: 본인확인 API 서비스 로직 구현 * test: 본인확인 API 테스트 코드 추가 * [refactor/#66] 기타 수정 사항 반영 (#75) * fix: 댓글과 대댓글 API에 isMine 필드 추가 * refactor: 오늘의 코디 생성 API에서 각도 추가 * fix: init script 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#76] 코디 생성 기능 구현 (#77) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#74] 차단 멤버 조회 API 구현 (#78) * fix: BaseEntity 상속 누락 추가 * feat: 차단 멤버 조회 API 컨트롤러 작성 * feat: 차단 멤버 조회 API Response DTO 작성 * fix: OauthInfo BaseEnity상속 삭제(@Embedded 문제 발생) * feat: 차단 멤버 조회 API Service 작성 * feat: BlockRepository 쿼리메소드 작성 * test: 차단 멤버 조회 API 테스트 코드 작성 * refactor: QueryDSL을 이용한 페이징 구현으로 수정 * refactor: 페이징 스펙 통일 * test/refactor: 스펙 통일에 맞춰 테스트 코드 수정 * [feat/#79] 코디 수정 & 삭제 API 구현 (#80) * feat: 기능 구현 완료 * test: controller test 작성 * test: service test 작성 * refactor: 코디 타입 필드 추가에 따른 변경 사항 * feat: 삭제 로직 구현 * test: 삭제 로직 컨트롤러 테스트 구현 * test: 서비스 테스트 구현 * test: 테스트 케이스 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#48] follow api (#51) * [feat/#48] 팔로우 api 구현 * feat: 컨트롤러 테스트 구현 * feat: 서비스 테스트 구현 * fix: 서비스 수정 * refactor: 순서 변경 * fix: 순서 변경 * fix: 이름 수정 * refactor : 팔로우/요청 분리 * refactor : 컨트롤러 리팩토링 * refactor : 서비스 리팩토링 * fix : pendingFollow 리네임 * refactor : 테스트 리팩토링 * feat : pendingFollow Flyway 추가 * fix : V1 오류 수정 * feat : 차단 반영 * refactor : 공개범위 validate 변경 * refactor : 테스트 리팩토링 * refactor : 서비스, 테스트 수정 * [feat/#71] 카테고리 조회 (#81) * feat : 컨트롤러 테스트 * feat : 서비스 테스트 구현 * refactor : 트랜잭션 추가 * refactor : 테스트 리팩토링 * [feat/#83] 코디 관련 조회 기능 구현 (#84) * feat: 과거 오늘의 코디 목록 조회 기능 구현 * test: controller test 작성 * test: service test 작성 * feat: 기능 구현 완료 * test: controller test 작성 * test: service test 작성 * feat: 카테고리 추가 * fix: 테스트 오류 수정 * fix: @validated 어노테이션 추가 * fix: 오타 정정 * refactor: 부모 카테고리 조회 추가 * test: 테스트 코드 리팩토링 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#89] 코디 좋아요 토글 (#90) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 * chore: 에러 문구 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#91] 룩북 도메인 API 개발 (#92) * feat: 룩북 생성 API 구현 * test: controller test 작성 완료 * test: service test 작성 * feat: 룩북 업데이트 기능 구현 * test: controller test 작성 * test: service test 작성 * feat: 룩북 삭제 기능 구현 * test: controller test 작성 * test: service test 작성 * feat: 룩북 전체 조회 기능 구현 * test: controller test 작성 * test: service test작성 * feat: 개별 룩북 코디 목록 조회 기능 구현 * test: controller test 작성 * test: service test 작성 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#82] 팔로잉 / 팔로워 목록 조회 API (#88) * feat: 팔로잉/팔로워 조회 API 컨트롤러 및 Response DTO 생성 * feat: 팔로잉/팔로워 조회 API 컨트롤러, 서비스 작성 * feat: 팔로잉/팔로워 조회 API QueryDSL 작성 * feat: 관련 레포지토리 메서드 및 response 필드 추가 * test: 테스트 코드 작성 * fix/refactor: 머지 충돌 문제 해결 * fix: 병합 후 문제 해결 * refactor: 요청 파라미터 codiveId -> memberId로 변경 * refactor: 오타 수정 및 반환값 memberId, isMe 추가 * Revert "refactor: 오타 수정 및 반환값 memberId, isMe 추가" This reverts commit 3d8d590. * refactor: 오타 수정 및 반환값 memberId, isMe 추가 * refactor/test: 테스트 코드 수정 및 isMe 테스트 추가 * [refactor/#93] 댓글 도메인 리팩토링 (#94) * chore: 중간 저장 * refactor: 테스트 수정 * feat: 나의 댓글 조회 기능 구현 * test: controller test 작성 * test: service test 작성 * fix: sonar cloud 오류 해결 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#96] 옷 도메인 API 개발 (#99) * feat: cloth 엔티티에 Season 추가 * feat: 카테고리별로 계절에 맞는 옷 조회 API * test: controller test 작성 * test: service test 작성 * feat: 옷 목록 조회 API 구현 * chore: 주석 메시지 변경 * test: controller test * test: service test 작성 * feat: 옷 상세 조회 API * test: controller test 작성 * refactor: 옷 생성자 변경 * test: service test 작성 * feat: 옷 업데이트 API 구현 * test: controller test 작성 * test: service test 작성 * refactor: 옷 생성 API 리팩토링 * chore: 중간 저장 * chore: 삭제 코드 정리 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * fix: 옷 이미지 반환 로직 추가 (#101) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * 회원 조회 API (#97) * feat: 회원 조회 API 컨트롤러, 서비스, 레포지토리, response 구현 * test: 회원 조회 API 테스트 코드 작성 * fix: 서비스 테스트 수정 * [feat/#102] 나의 최애 코디 조회 API (#103) * feat: 기능 구현 * test: controller test * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * feat: tag 추가 및 update 로직 구현 (#108) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#21] 기록 생성 api 구현 (#98) * refactor: 엔티티 수정 및 sql 업데이트 * refactor: repository 생성/수정/삭제 * feat: history 생성 api 구현 * refactor: 기존 Test 수정 * feat: 기록 생성 test 구현 * refactor: errorcode 통일 * fix: merge 오류 수정 * fix: merge 문제 해결 * refactor: 양방향 매핑 추가 * refactor: spotless 적용 * refactor: errorcode 수정 * refactor: builder 패턴 적용 * refactor: hashtag bulkinsert jdbc 적용 * refactor: jdbcTemplete bulkInsert 적용 * refactor: spotless 적용 * refactor: null 허용 수정 * refactor: spotless 적용 * refactor: 연관된 엔티티들(hashtag, historyImage) 관련 jdbc batchUpdate 삭제 원인 : 영속성 컨텍스트 문제. batchUpdate시 id를 가져올 수 없음. 왜? 엔티티 객체 필드에 id 설정 안 해주기 때문. * fix: merge 수정 * refactor: 기록 이미지 개수 제한 추가 및 test 코드 추가 * [Feat/#104] 팔로우 푸시 알림 구현 (#110) * feat: firebase 의존성 추가 및 설정파일 작성 * feat: 팔로우 알림 API 이벤트, 리스너, response * feat: 팔로우 알림 API 컨트롤러, 서비스, 예외 작성 * refactor: 팔로우 이벤트 퍼블리셔 추가 * chore: firebase 의존성 추가 및 기타 수정 * refactor: 팔로우 알림 로직 수정 * feat: 비공개/공개 팔로우 알림 분리 구현 * feat: 비공개/공개 팔로우 알림 분리 구현(notiification service) * test: 팔로우 푸시 알림 테스트 작성 * test: firebaseMessaging mocking * delete: 팔로우 알림 response 삭제 * [Feat/#112] 댓글 / 대댓글 푸시알림 구현 (#113) * feat: 댓글 푸시 알림 이벤트, 이벤트 리스너 추가 * feat: 대댓글 푸시알림 이벤트, 리스너 추가 * feat: 댓글/대댓글 푸시알림 서비스 작성 * test: 댓글/대댓글 푸시알림 테스트 코드 작성 * [refactor/#116: 팔로워/팔로잉 목록 조회 시 차단관계 멤버 제외 (#117) * refactor: 팔로월/팔로잉 목록 조회 시 차단관계 멤버 제외 * test/fix: 테스트 수정 * test/fix: 테스트 수정 * [feat/#118] 옷 삭제 API 구현 (#120) * feat: 기능 구현 * test: 테스트 코드 작성 * fix: 오류 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#115] 안읽은 알림 유무 확인 API (#119) * feat: 안읽은 알림 유무 확인API 컨트롤러/서비스 작성 * feat: CodiveNotification 도메인 메서드 추가 * test: 컨트롤러/서비스 테스트 작성 * feat: UnreadNotificationResponse * fix: 변수명 수정 * fix: 변수명 수정 * fix: 변수명 수정 * [Feat/#109] 기록 수정 api 구현 (#122) * feat: Controller 생성 * feat: Service 로직 구현 * feat: Test 구현 * feat: spotless 적용 * refactor: test 수정 * update: sql * [Feat/#121] 알림 목록 조회 API 구현 (#124) * feat: NotificationListResponse 작성 * feat: 알림 목록 조회 컨트롤러, 서비스 작성 * feat: 알림 목록 조회 레포지토리 작성 * test: 컨트롤러/서비스 테스트 작성 * [Fix/#125] 차단 관계 멤버 팔로잉/팔로워 수 집계에 미포함 (#126) * fix: 차단관계 멤버 팔로잉/팔로워 수 집계에 미포함 * test:차단관계 멤버 팔로잉/팔로워 수 집계 미포함 테스트 추가 * [feat/#128] 전체 스타일, 상황 조회 API (#129) * feat: 기능 구현 * test: controller test 구현 * test: service test 작성 * fix: cloth 테스트 실패 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#130] 옷 이미지 업로드 API 구현 (#131) * feat: presignedUrl 생성 기능 구현 * test: controller test 작성 * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#127] 알림 읽음 처리 API 구현 (#133) * feat: 알림 읽음 처리 API 컨트롤러 / 서비스 작성 * test: 컨트롤러/서비스 테스트 작성 * [Feat/#134] 알림 전체 읽음 처리 API 구현 (#135) * feat: 알림 전체 읽음 처리 API 컨트롤러, 서비스 작성 * feat: 알림 전체 읽음 처리 API 레포지토리 작성 * test: 컨트롤러/서비스 테스트 작성 * feat: 알림 읽음 상태 업데이트 시 updatedAt 갱신 * fix: 테스트 메서드명 수정 * [chore/#67] CI/CD 파이프라인 구현 (#68) * [chore/#67] CI/CD 파이프라인 구현 * refactor: 카카오와 APPLE DEV PROD 환경 통일 * chore: 테스트 용도로 임시로 Github Action 발동 조건 변경 * fix: 오타 수정 * fix: Dockerfile 경로 수정 * fix: 오타 수정 * fix: jdk 버전 수정 * fix: compose 파일명 수정 * fix: 경로 수정 * fix: 이름 정정 * fix: 도커 허브 로그인 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#146] CD workflow (#147) * refactor: cd workflow Refactor environment variable exports and improve error handling in deployment script. * refactor: eclipse-temurin:21-jdk-jammy * [Chore/#149] dev-cd.yml, prod-cd.yml 수정 (#150) * chore: environment variables for production deployment prod 변경 * refactor: dev-cd.yml Refactor environment variable exports and streamline Docker commands. * [Chore/#153] add firebase environment (#154) * chore: Firebase environment Added Firebase environment variables to the dev compose file. * chore: Firebase environment Added Firebase environment variables to the production compose file. * chore: firebase environment 설정 * chore: workflows 수정 * [Merge/#155] update develop (#156) * [Merge] Develop -> Main 머지 (#148) * [chore/#1] initial setting (#3) * chore: PR 리뷰 요청 자동화 * chore: Issue template 추가 * chore: PR Template * chore: root module build.gradle 설정 * chore: api, batch, infrastructure, common, 그리고 domain 모듈 생성 * [chore/#1] spotless 적용 * [chore/#1] pre-commit과 gradle task설정 * chore: testing pre-commit * style: spotless * style: spotless * fix: git permission 추가 * [chore/#1] trigger review * [chore/#1] trigger review * [chore/#1] reviewer trigger try --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#4] api 전역 에러 처리 구현 (#5) * chore: clokey-common-web 모듈 추가 * chore: 전역 에러 구현 * chore: 성공 코드 구현 * feat: api용 전역 에러 처리 구현 * refactor: BaseResponse record화 및 timeStamp 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#6] QueryDSL 설정 및 Swagger 설정 (#7) * [chore/#6] queryDSL 설정 완료 * chore: Swagger Config 구현 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#8] 모듈 의존성 추가 (#9) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#10] jacoco & sonarcloud 설정 (#11) * [chore/#10] batch 의존성 임시 주석 처리 * feat: build gradle에 sonar cloud와 jacoco설정 * [feat/#10] CI 파이프라인 구현 * [fix/#10] sonarcloud key 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#12] DB 세팅과 flyway 세팅 (#13) * [chore/#12] .env gitIgnore 추가 * [chore/#12] 의존성 추가 * [chore/#12] 테스트 환경용 yml 추가 * [chore/#12] 환경별 yml 구현 * [feat/#12] test전용 redis container 구현 * [feat/#10] redis config및 infra 모듈 설정 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [test/#14] 테스트 유틸리티 구현 (#15) * [chore/#14] 디렉토리 구조 수정 * [feat/#14] DB Cleaner 도입 및 Integration 상속 추상 클래스 구현 * [feat/#14] redis cleaner 구현 * [feat/#14] Transaction Util 구현 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#16] db migration (#17) * [feat/#16] db 마이그레이션 적용 * [refactor/#16] 엔티티 순서 변경 * [fix/#16] spotless * [fix/#16] sql 문법 수정 * [fix/#16] sql 문법 수정 * refactor: repository 래픽토링 및 도메인 분리 * refactor: 카테고리 엔티티 리팩토링 * refactor: cloth 도메인 리팩토링 완료 * refactor: comment 도메인 리팩토링 완료 * refactor: folder 도메인 리팩터링 * refactor: 기록 도메인 리팩터링 * refactor: like 도메인 리팩터링 * refactor: notification 도메인 리팩터링 * refactor: 도메인 리팩터링 * refactor: init script Base Entity 필드 NOT NULL 추가 * refactor: comment 도메인 댓글 제한 완화 * feat: HistoryType 추가 * feat: HistoryClothTag 엔티티 추가 * feat: 양방향 매핑 추가 * refactor: member 인증 정보 Embedded로 관리 * refactor: init sql 동기호 * fix: H2와 MySQL의 uk 중복 문제 해결 * chore: 양방향 매핑 주석화 * refactor: report 관련 enum 경로 변경 * refactor: 좌표 명명 변경 * refactor: notnull 수정 * refactor: nullable = false 삭제 및 NotNull 추가 * refactor: Comment 테이블 parent_id 삭제 * refactor: HistoryClothTag 변수명 변경 (coordinateX) * refactor: NotNull로 변경 * refactor: sql문 enum필드 길이 255로 변경 * refactor: column명 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: Ssamssamukja <109636635+Ssamssamukja@users.noreply.github.com> * [feat/#19] 옷 생성 API 구현 (#20) * feat: 옷 생성 로직 구현 * fix: 에러 핸들러 수정 * test: 컨트롤러 테스트 작성 * test: service test 작성 * refactor: 업데이트 로직 정정 * fix: 에러 핸들러 수정 * fix: 오타 정정 * test: service 에러 컨트롤러 테스트 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat] 댓글 및 대댓글 작성 API 구현 (#24) * feat: 기능 구현 완료 * fix: test 오류 수정 * fix: 권한 확인 로직 수정 * refactor: 수정 사항 반영 * feat: 동시성 에러 처리 로직 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/28] 기록의 댓글 목록 조회 API 구현 (#29) * refactor: 동시성 처리 로직 리팩토링 * feat: SliceResponse 생성 * feat: 댓글 조회 기능 구현 * refactor: API 주소 정정 * refactor: 대댓글 존재 여부 추가 * test: controller test 작성 완료 * refactor: 동시성 테스트 방식 spy로 변경 * test: service 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#22] 프로필수정 api 구현 (#26) * [feat/#22] 프로필 수정 api 구현 * [feat/#22] 테스트 추가 * [fix/#22] spotless 추가 * [refactor/#22 bio 길이 수정 * [refactor/#22 dto 업데이트 시간 제거] * [refactor/#22] response Dto 제거 * [refactor/#22] 테스트 수정 * [refactor/#22] registerStatus 제거 * [fix/#22] 테스트 오류 수정 * [refactor/#22] 피드백 반영 수정 * [fix/#22] test 오류 해결 * [feat/#30] 대댓글 조회 API 구현 (#31) * feat: 대댓글 조회 API 구현 * feat: service 테스트 작성 완료 * test: controller test 작성 * fix: custom annotation의 에러 메시지가 출력되지 않던 에러 수정 * fix: 테스트 조건 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#25] OIDC 기반 소셜 로그인 구현 (#34) * chore: 파일 경로 수정 * feat: OauthProperties 추가 * feat: feign config 구현 * feat: Kakao client 추가 * feat: KakaoAuthConfig 구현 * feat: Oauth에 필요한 DTO * feat: Kakao Client 구현 * feat: 소셜 로그인 구현 중간 저장 * feat: OIDC기반 회원가입 구현 * feat: 유저 정보 조회 API 구현 * feat: yml에 JWT 관련 사항 추가 * chore: 디렉토리 구조 수정 * feat: 인증 실패 헨들러 구현 * feat: security chain 구현 * chore: yml docs 정렬 기준 설정 * refactor: member에 visibility 조정 메서드 추가 * chore: security 관련 Util 및 필터 테스트 커버 대상 제외 * chore: Properties 및 Principle 테스트 커버리지 대상 제외 * test: 유저 상태 확인 테스트 코드 작성 * fix: clokey-domain 모듈만 커버리지 제외 * refactor: 테스트 커버리지용 테스트 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#27] id duplicate check (#33) * [feat/#27] api 작업중 * [feat/#27] id 중복검사 api 구현 * [fix/#27]-test로직 수정 * [refactor/#27] 불필요한 주석 제거 * [fix/#27] 에러코드수정 * [refactor/#27] 컨트롤러수정 * [refactor/#27] 서비스수정 * [refactor/#27] 테스트 수정 * [fix/#27] test 오류 수정중 * [fix/#27] 테스트 수정중 * [fix/#27] 서비스테스트 수정중 * [fix/#27] 오타 수정 * refactor: API 구조 개편 * refactor: 컨트롤러 테스트 개편 * refactor: 임시 저장 * fix: 로그인 오류 해결 * refactor: 서비스 테스트 리팩토링 완료 * fix: 컨트롤러 테스트 오류 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#35] 토큰 재발급 기능 구현 (#36) * fix: 누락된 대댓글 테스트 추가 * feat: 토큰 재발급 기능 구현 * test: 컨트롤러 테스트 작성 * test: 서비스 테스트 작성 * chore: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#37] 로그아웃 API 구현 (#38) * feat: 기능 구현 * test: 테스트 코드 작성 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#39] 약관 동의 API (#40) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [refactor/#41] 약관 동의 API에서 device token 입력 분리 (#42) * feat: 기능 구현 및 테스트 완료 * refactor: 약관 동의 API에서 device token을 받는 부분 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#43] 전체 약관 조회 API (#44) * feat: 기능 구현 * test: 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [docs/#49] Clokey Docs 작성 (#50) * docs: 코드 컨벤션 작성 * docs: 문서 작성 완료 * docs: layered Dto 설명 추가 * docs: clokey discord thread 사용방법 추가 * docs: flyway 명명규칙 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: 이호근 <aa020228@gmail.com> Co-authored-by: paeng <127924700+juuuuone@users.noreply.github.com> * [feat/#45] 나의 선택 약관 정보 조회 및 변경 API 구현 (#46) * feat: 기능 구현 * fix: 에러 수정 * test: controller test 구현 * test: service test 구현 * refactor: 누락된 테스트 추가 * refactor: 에러 코드 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#52] 회원 차단 API 구현 (#53) * feat: 차단 기능 구현 * feat: 차단 대상이 존재하지 않는 경우 예외 처리 * test: 테스트 코드 작성 * refactor: path variable 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#56] 댓글 & 대댓글 삭제 API (#57) * [feat/#56] 기능 구현 완료 * [test/#56] service test 작성 완료 * [test/#56] 컨트롤러 테스트 작성 완료 * [test/#56] 컨트롤러 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#58] Presigned URL 관련 유틸리티 함수 구현 (#59) * [feat/#58] 기능 구현 완료 * [chore/58] 신입 멤버 CODEOWNERS 추가 * [fix/#58] test yml에 더미값 추가 * [fix/#58] 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [docs/#61] flyway 누락 이미지 추가 (#62) * [docs/#61] 이미지 url 수정 * [docs/#61] 사진 업데이트 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#63] 오늘의 코디 생성 API 구현 (#64) * [feat/#63] 도메인 및 init script 추가 * feat: coordinate 생성 기능 구현 * [feat/#63] 코디 생성 로직 구현 * [feat/#63] controller test 작성 완료 * [test/#63] test 작성 완료 * [docs/#63] 레디스 키 관련 문서화 추가 * [fix/#63] 테스트 오류 수정 * fix: clothes 오타 정정 * feat: 옷의 개수에 관한 검증 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#60] 신고 생성 api 구현 (#65) * [fix]@tag순서 명세서대로 재배치 * feat: Report 엔티티 생성 * Revert "feat: Report 엔티티 생성" This reverts commit 21511d7. * feat: Report 엔티티 생성 * feat: 신고사유 및 신고컨텐츠타입 ENUM작성 * feat: ReportCreate 요청/응답DTO 작성 * fix: ReportCreateRequest 수정 * feat: ReportController 생성 * feat: ReportService 생성, reportCreate구현 * feat: Report repository 및 exception 생성 * feat: Report 도메인 로직 추가 * fix: validateTargetExists로직 수정 * [docs/#61] flyway 누락 이미지 추가 (#62) * [docs/#61] 이미지 url 수정 * [docs/#61] 사진 업데이트 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#63] 오늘의 코디 생성 API 구현 (#64) * [feat/#63] 도메인 및 init script 추가 * feat: coordinate 생성 기능 구현 * [feat/#63] 코디 생성 로직 구현 * [feat/#63] controller test 작성 완료 * [test/#63] test 작성 완료 * [docs/#63] 레디스 키 관련 문서화 추가 * [fix/#63] 테스트 오류 수정 * fix: clothes 오타 정정 * feat: 옷의 개수에 관한 검증 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * delete: 기존 엔티티 및 레포지토리 삭제 * feat: Report ddl 작성 * delete: 기존 Report 관련 enum 삭제 * fix: ReportController 수정 * feat: @JsonCreator 메서드 작성 * fix: ReportErrorCode 수정 * fix: creatHistory -> createHistory오타수정 * fix: creatHistory -> createHistory오타수정 * Refactor: 신고 생성 검증 로직 변경 * feat: 신고 생성 테스트 코드 추가 * fix: JsonCreator애노테이션 누락 추가 * fix: 기타 누락 및 오타 수정 --------- Co-authored-by: 나용준 <dydwnssk99@gmail.com> Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [fix/#69] S3 Utils 문제 & 양방향 삭제 로직 제거 (#70) * fix: S3 문제 사항 수정 * refactor: 양방향 삭제 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#72] 본인 확인 API 구현 (#73) * feat: 본인확인 api response dto 생성 * feat: 본인확인 API 컨트롤러, 서비스 구현 * feat: 본인확인 API 서비스 로직 구현 * test: 본인확인 API 테스트 코드 추가 * [refactor/#66] 기타 수정 사항 반영 (#75) * fix: 댓글과 대댓글 API에 isMine 필드 추가 * refactor: 오늘의 코디 생성 API에서 각도 추가 * fix: init script 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#76] 코디 생성 기능 구현 (#77) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#74] 차단 멤버 조회 API 구현 (#78) * fix: BaseEntity 상속 누락 추가 * feat: 차단 멤버 조회 API 컨트롤러 작성 * feat: 차단 멤버 조회 API Response DTO 작성 * fix: OauthInfo BaseEnity상속 삭제(@Embedded 문제 발생) * feat: 차단 멤버 조회 API Service 작성 * feat: BlockRepository 쿼리메소드 작성 * test: 차단 멤버 조회 API 테스트 코드 작성 * refactor: QueryDSL을 이용한 페이징 구현으로 수정 * refactor: 페이징 스펙 통일 * test/refactor: 스펙 통일에 맞춰 테스트 코드 수정 * [feat/#79] 코디 수정 & 삭제 API 구현 (#80) * feat: 기능 구현 완료 * test: controller test 작성 * test: service test 작성 * refactor: 코디 타입 필드 추가에 따른 변경 사항 * feat: 삭제 로직 구현 * test: 삭제 로직 컨트롤러 테스트 구현 * test: 서비스 테스트 구현 * test: 테스트 케이스 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#48] follow api (#51) * [feat/#48] 팔로우 api 구현 * feat: 컨트롤러 테스트 구현 * feat: 서비스 테스트 구현 * fix: 서비스 수정 * refactor: 순서 변경 * fix: 순서 변경 * fix: 이름 수정 * refactor : 팔로우/요청 분리 * refactor : 컨트롤러 리팩토링 * refactor : 서비스 리팩토링 * fix : pendingFollow 리네임 * refactor : 테스트 리팩토링 * feat : pendingFollow Flyway 추가 * fix : V1 오류 수정 * feat : 차단 반영 * refactor : 공개범위 validate 변경 * refactor : 테스트 리팩토링 * refactor : 서비스, 테스트 수정 * [feat/#71] 카테고리 조회 (#81) * feat : 컨트롤러 테스트 * feat : 서비스 테스트 구현 * refactor : 트랜잭션 추가 * refactor : 테스트 리팩토링 * [feat/#83] 코디 관련 조회 기능 구현 (#84) * feat: 과거 오늘의 코디 목록 조회 기능 구현 * test: controller test 작성 * test: service test 작성 * feat: 기능 구현 완료 * test: controller test 작성 * test: service test 작성 * feat: 카테고리 추가 * fix: 테스트 오류 수정 * fix: @validated 어노테이션 추가 * fix: 오타 정정 * refactor: 부모 카테고리 조회 추가 * test: 테스트 코드 리팩토링 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#89] 코디 좋아요 토글 (#90) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 * chore: 에러 문구 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#91] 룩북 도메인 API 개발 (#92) * feat: 룩북 생성 API 구현 * test: controller test 작성 완료 * test: service test 작성 * feat: 룩북 업데이트 기능 구현 * test: controller test 작성 * test: service test 작성 * feat: 룩북 삭제 기능 구현 * test: controller test 작성 * test: service test 작성 * feat: 룩북 전체 조회 기능 구현 * test: controller test 작성 * test: service test작성 * feat: 개별 룩북 코디 목록 조회 기능 구현 * test: controller test 작성 * test: service test 작성 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#82] 팔로잉 / 팔로워 목록 조회 API (#88) * feat: 팔로잉/팔로워 조회 API 컨트롤러 및 Response DTO 생성 * feat: 팔로잉/팔로워 조회 API 컨트롤러, 서비스 작성 * feat: 팔로잉/팔로워 조회 API QueryDSL 작성 * feat: 관련 레포지토리 메서드 및 response 필드 추가 * test: 테스트 코드 작성 * fix/refactor: 머지 충돌 문제 해결 * fix: 병합 후 문제 해결 * refactor: 요청 파라미터 codiveId -> memberId로 변경 * refactor: 오타 수정 및 반환값 memberId, isMe 추가 * Revert "refactor: 오타 수정 및 반환값 memberId, isMe 추가" This reverts commit 3d8d590. * refactor: 오타 수정 및 반환값 memberId, isMe 추가 * refactor/test: 테스트 코드 수정 및 isMe 테스트 추가 * [refactor/#93] 댓글 도메인 리팩토링 (#94) * chore: 중간 저장 * refactor: 테스트 수정 * feat: 나의 댓글 조회 기능 구현 * test: controller test 작성 * test: service test 작성 * fix: sonar cloud 오류 해결 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#96] 옷 도메인 API 개발 (#99) * feat: cloth 엔티티에 Season 추가 * feat: 카테고리별로 계절에 맞는 옷 조회 API * test: controller test 작성 * test: service test 작성 * feat: 옷 목록 조회 API 구현 * chore: 주석 메시지 변경 * test: controller test * test: service test 작성 * feat: 옷 상세 조회 API * test: controller test 작성 * refactor: 옷 생성자 변경 * test: service test 작성 * feat: 옷 업데이트 API 구현 * test: controller test 작성 * test: service test 작성 * refactor: 옷 생성 API 리팩토링 * chore: 중간 저장 * chore: 삭제 코드 정리 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * fix: 옷 이미지 반환 로직 추가 (#101) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * 회원 조회 API (#97) * feat: 회원 조회 API 컨트롤러, 서비스, 레포지토리, response 구현 * test: 회원 조회 API 테스트 코드 작성 * fix: 서비스 테스트 수정 * [feat/#102] 나의 최애 코디 조회 API (#103) * feat: 기능 구현 * test: controller test * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * feat: tag 추가 및 update 로직 구현 (#108) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#21] 기록 생성 api 구현 (#98) * refactor: 엔티티 수정 및 sql 업데이트 * refactor: repository 생성/수정/삭제 * feat: history 생성 api 구현 * refactor: 기존 Test 수정 * feat: 기록 생성 test 구현 * refactor: errorcode 통일 * fix: merge 오류 수정 * fix: merge 문제 해결 * refactor: 양방향 매핑 추가 * refactor: spotless 적용 * refactor: errorcode 수정 * refactor: builder 패턴 적용 * refactor: hashtag bulkinsert jdbc 적용 * refactor: jdbcTemplete bulkInsert 적용 * refactor: spotless 적용 * refactor: null 허용 수정 * refactor: spotless 적용 * refactor: 연관된 엔티티들(hashtag, historyImage) 관련 jdbc batchUpdate 삭제 원인 : 영속성 컨텍스트 문제. batchUpdate시 id를 가져올 수 없음. 왜? 엔티티 객체 필드에 id 설정 안 해주기 때문. * fix: merge 수정 * refactor: 기록 이미지 개수 제한 추가 및 test 코드 추가 * [Feat/#104] 팔로우 푸시 알림 구현 (#110) * feat: firebase 의존성 추가 및 설정파일 작성 * feat: 팔로우 알림 API 이벤트, 리스너, response * feat: 팔로우 알림 API 컨트롤러, 서비스, 예외 작성 * refactor: 팔로우 이벤트 퍼블리셔 추가 * chore: firebase 의존성 추가 및 기타 수정 * refactor: 팔로우 알림 로직 수정 * feat: 비공개/공개 팔로우 알림 분리 구현 * feat: 비공개/공개 팔로우 알림 분리 구현(notiification service) * test: 팔로우 푸시 알림 테스트 작성 * test: firebaseMessaging mocking * delete: 팔로우 알림 response 삭제 * [Feat/#112] 댓글 / 대댓글 푸시알림 구현 (#113) * feat: 댓글 푸시 알림 이벤트, 이벤트 리스너 추가 * feat: 대댓글 푸시알림 이벤트, 리스너 추가 * feat: 댓글/대댓글 푸시알림 서비스 작성 * test: 댓글/대댓글 푸시알림 테스트 코드 작성 * [refactor/#116: 팔로워/팔로잉 목록 조회 시 차단관계 멤버 제외 (#117) * refactor: 팔로월/팔로잉 목록 조회 시 차단관계 멤버 제외 * test/fix: 테스트 수정 * test/fix: 테스트 수정 * [feat/#118] 옷 삭제 API 구현 (#120) * feat: 기능 구현 * test: 테스트 코드 작성 * fix: 오류 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#115] 안읽은 알림 유무 확인 API (#119) * feat: 안읽은 알림 유무 확인API 컨트롤러/서비스 작성 * feat: CodiveNotification 도메인 메서드 추가 * test: 컨트롤러/서비스 테스트 작성 * feat: UnreadNotificationResponse * fix: 변수명 수정 * fix: 변수명 수정 * fix: 변수명 수정 * [Feat/#109] 기록 수정 api 구현 (#122) * feat: Controller 생성 * feat: Service 로직 구현 * feat: Test 구현 * feat: spotless 적용 * refactor: test 수정 * update: sql * [Feat/#121] 알림 목록 조회 API 구현 (#124) * feat: NotificationListResponse 작성 * feat: 알림 목록 조회 컨트롤러, 서비스 작성 * feat: 알림 목록 조회 레포지토리 작성 * test: 컨트롤러/서비스 테스트 작성 * [Fix/#125] 차단 관계 멤버 팔로잉/팔로워 수 집계에 미포함 (#126) * fix: 차단관계 멤버 팔로잉/팔로워 수 집계에 미포함 * test:차단관계 멤버 팔로잉/팔로워 수 집계 미포함 테스트 추가 * [feat/#128] 전체 스타일, 상황 조회 API (#129) * feat: 기능 구현 * test: controller test 구현 * test: service test 작성 * fix: cloth 테스트 실패 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#130] 옷 이미지 업로드 API 구현 (#131) * feat: presignedUrl 생성 기능 구현 * test: controller test 작성 * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#127] 알림 읽음 처리 API 구현 (#133) * feat: 알림 읽음 처리 API 컨트롤러 / 서비스 작성 * test: 컨트롤러/서비스 테스트 작성 * [Feat/#134] 알림 전체 읽음 처리 API 구현 (#135) * feat: 알림 전체 읽음 처리 API 컨트롤러, 서비스 작성 * feat: 알림 전체 읽음 처리 API 레포지토리 작성 * test: 컨트롤러/서비스 테스트 작성 * feat: 알림 읽음 상태 업데이트 시 updatedAt 갱신 * fix: 테스트 메서드명 수정 * [chore/#67] CI/CD 파이프라인 구현 (#68) * [chore/#67] CI/CD 파이프라인 구현 * refactor: 카카오와 APPLE DEV PROD 환경 통일 * chore: 테스트 용도로 임시로 Github Action 발동 조건 변경 * fix: 오타 수정 * fix: Dockerfile 경로 수정 * fix: 오타 수정 * fix: jdk 버전 수정 * fix: compose 파일명 수정 * fix: 경로 수정 * fix: 이름 정정 * fix: 도커 허브 로그인 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#146] CD workflow (#147) * refactor: cd workflow Refactor environment variable exports and improve error handling in deployment script. * refactor: eclipse-temurin:21-jdk-jammy --------- Co-authored-by: 나용준 <dydwnssk99@gmail.com> Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: paeng <127924700+juuuuone@users.noreply.github.com> Co-authored-by: 이호근 <aa020228@gmail.com> Co-authored-by: leedy5521 <80202719+dev2yup@users.noreply.github.com> * [Merge/#151] main <- develop (#152) * [chore/#1] initial setting (#3) * chore: PR 리뷰 요청 자동화 * chore: Issue template 추가 * chore: PR Template * chore: root module build.gradle 설정 * chore: api, batch, infrastructure, common, 그리고 domain 모듈 생성 * [chore/#1] spotless 적용 * [chore/#1] pre-commit과 gradle task설정 * chore: testing pre-commit * style: spotless * style: spotless * fix: git permission 추가 * [chore/#1] trigger review * [chore/#1] trigger review * [chore/#1] reviewer trigger try --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#4] api 전역 에러 처리 구현 (#5) * chore: clokey-common-web 모듈 추가 * chore: 전역 에러 구현 * chore: 성공 코드 구현 * feat: api용 전역 에러 처리 구현 * refactor: BaseResponse record화 및 timeStamp 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#6] QueryDSL 설정 및 Swagger 설정 (#7) * [chore/#6] queryDSL 설정 완료 * chore: Swagger Config 구현 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [chore/#8] 모듈 의존성 추가 (#9) Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#10] jacoco & sonarcloud 설정 (#11) * [chore/#10] batch 의존성 임시 주석 처리 * feat: build gradle에 sonar cloud와 jacoco설정 * [feat/#10] CI 파이프라인 구현 * [fix/#10] sonarcloud key 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#12] DB 세팅과 flyway 세팅 (#13) * [chore/#12] .env gitIgnore 추가 * [chore/#12] 의존성 추가 * [chore/#12] 테스트 환경용 yml 추가 * [chore/#12] 환경별 yml 구현 * [feat/#12] test전용 redis container 구현 * [feat/#10] redis config및 infra 모듈 설정 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [test/#14] 테스트 유틸리티 구현 (#15) * [chore/#14] 디렉토리 구조 수정 * [feat/#14] DB Cleaner 도입 및 Integration 상속 추상 클래스 구현 * [feat/#14] redis cleaner 구현 * [feat/#14] Transaction Util 구현 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#16] db migration (#17) * [feat/#16] db 마이그레이션 적용 * [refactor/#16] 엔티티 순서 변경 * [fix/#16] spotless * [fix/#16] sql 문법 수정 * [fix/#16] sql 문법 수정 * refactor: repository 래픽토링 및 도메인 분리 * refactor: 카테고리 엔티티 리팩토링 * refactor: cloth 도메인 리팩토링 완료 * refactor: comment 도메인 리팩토링 완료 * refactor: folder 도메인 리팩터링 * refactor: 기록 도메인 리팩터링 * refactor: like 도메인 리팩터링 * refactor: notification 도메인 리팩터링 * refactor: 도메인 리팩터링 * refactor: init script Base Entity 필드 NOT NULL 추가 * refactor: comment 도메인 댓글 제한 완화 * feat: HistoryType 추가 * feat: HistoryClothTag 엔티티 추가 * feat: 양방향 매핑 추가 * refactor: member 인증 정보 Embedded로 관리 * refactor: init sql 동기호 * fix: H2와 MySQL의 uk 중복 문제 해결 * chore: 양방향 매핑 주석화 * refactor: report 관련 enum 경로 변경 * refactor: 좌표 명명 변경 * refactor: notnull 수정 * refactor: nullable = false 삭제 및 NotNull 추가 * refactor: Comment 테이블 parent_id 삭제 * refactor: HistoryClothTag 변수명 변경 (coordinateX) * refactor: NotNull로 변경 * refactor: sql문 enum필드 길이 255로 변경 * refactor: column명 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: Ssamssamukja <109636635+Ssamssamukja@users.noreply.github.com> * [feat/#19] 옷 생성 API 구현 (#20) * feat: 옷 생성 로직 구현 * fix: 에러 핸들러 수정 * test: 컨트롤러 테스트 작성 * test: service test 작성 * refactor: 업데이트 로직 정정 * fix: 에러 핸들러 수정 * fix: 오타 정정 * test: service 에러 컨트롤러 테스트 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat] 댓글 및 대댓글 작성 API 구현 (#24) * feat: 기능 구현 완료 * fix: test 오류 수정 * fix: 권한 확인 로직 수정 * refactor: 수정 사항 반영 * feat: 동시성 에러 처리 로직 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/28] 기록의 댓글 목록 조회 API 구현 (#29) * refactor: 동시성 처리 로직 리팩토링 * feat: SliceResponse 생성 * feat: 댓글 조회 기능 구현 * refactor: API 주소 정정 * refactor: 대댓글 존재 여부 추가 * test: controller test 작성 완료 * refactor: 동시성 테스트 방식 spy로 변경 * test: service 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#22] 프로필수정 api 구현 (#26) * [feat/#22] 프로필 수정 api 구현 * [feat/#22] 테스트 추가 * [fix/#22] spotless 추가 * [refactor/#22 bio 길이 수정 * [refactor/#22 dto 업데이트 시간 제거] * [refactor/#22] response Dto 제거 * [refactor/#22] 테스트 수정 * [refactor/#22] registerStatus 제거 * [fix/#22] 테스트 오류 수정 * [refactor/#22] 피드백 반영 수정 * [fix/#22] test 오류 해결 * [feat/#30] 대댓글 조회 API 구현 (#31) * feat: 대댓글 조회 API 구현 * feat: service 테스트 작성 완료 * test: controller test 작성 * fix: custom annotation의 에러 메시지가 출력되지 않던 에러 수정 * fix: 테스트 조건 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#25] OIDC 기반 소셜 로그인 구현 (#34) * chore: 파일 경로 수정 * feat: OauthProperties 추가 * feat: feign config 구현 * feat: Kakao client 추가 * feat: KakaoAuthConfig 구현 * feat: Oauth에 필요한 DTO * feat: Kakao Client 구현 * feat: 소셜 로그인 구현 중간 저장 * feat: OIDC기반 회원가입 구현 * feat: 유저 정보 조회 API 구현 * feat: yml에 JWT 관련 사항 추가 * chore: 디렉토리 구조 수정 * feat: 인증 실패 헨들러 구현 * feat: security chain 구현 * chore: yml docs 정렬 기준 설정 * refactor: member에 visibility 조정 메서드 추가 * chore: security 관련 Util 및 필터 테스트 커버 대상 제외 * chore: Properties 및 Principle 테스트 커버리지 대상 제외 * test: 유저 상태 확인 테스트 코드 작성 * fix: clokey-domain 모듈만 커버리지 제외 * refactor: 테스트 커버리지용 테스트 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#27] id duplicate check (#33) * [feat/#27] api 작업중 * [feat/#27] id 중복검사 api 구현 * [fix/#27]-test로직 수정 * [refactor/#27] 불필요한 주석 제거 * [fix/#27] 에러코드수정 * [refactor/#27] 컨트롤러수정 * [refactor/#27] 서비스수정 * [refactor/#27] 테스트 수정 * [fix/#27] test 오류 수정중 * [fix/#27] 테스트 수정중 * [fix/#27] 서비스테스트 수정중 * [fix/#27] 오타 수정 * refactor: API 구조 개편 * refactor: 컨트롤러 테스트 개편 * refactor: 임시 저장 * fix: 로그인 오류 해결 * refactor: 서비스 테스트 리팩토링 완료 * fix: 컨트롤러 테스트 오류 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#35] 토큰 재발급 기능 구현 (#36) * fix: 누락된 대댓글 테스트 추가 * feat: 토큰 재발급 기능 구현 * test: 컨트롤러 테스트 작성 * test: 서비스 테스트 작성 * chore: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#37] 로그아웃 API 구현 (#38) * feat: 기능 구현 * test: 테스트 코드 작성 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#39] 약관 동의 API (#40) * feat: 기능 구현 * test: controller test 작성 * test: service test 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [refactor/#41] 약관 동의 API에서 device token 입력 분리 (#42) * feat: 기능 구현 및 테스트 완료 * refactor: 약관 동의 API에서 device token을 받는 부분 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#43] 전체 약관 조회 API (#44) * feat: 기능 구현 * test: 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [docs/#49] Clokey Docs 작성 (#50) * docs: 코드 컨벤션 작성 * docs: 문서 작성 완료 * docs: layered Dto 설명 추가 * docs: clokey discord thread 사용방법 추가 * docs: flyway 명명규칙 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> Co-authored-by: 이호근 <aa020228@gmail.com> Co-authored-by: paeng <127924700+juuuuone@users.noreply.github.com> * [feat/#45] 나의 선택 약관 정보 조회 및 변경 API 구현 (#46) * feat: 기능 구현 * fix: 에러 수정 * test: controller test 구현 * test: service test 구현 * refactor: 누락된 테스트 추가 * refactor: 에러 코드 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#52] 회원 차단 API 구현 (#53) * feat: 차단 기능 구현 * feat: 차단 대상이 존재하지 않는 경우 예외 처리 * test: 테스트 코드 작성 * refactor: path variable 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#56] 댓글 & 대댓글 삭제 API (#57) * [feat/#56] 기능 구현 완료 * [test/#56] service test 작성 완료 * [test/#56] 컨트롤러 테스트 작성 완료 * [test/#56] 컨트롤러 테스트 작성 완료 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#58] Presigned URL 관련 유틸리티 함수 구현 (#59) * [feat/#58] 기능 구현 완료 * [chore/58] 신입 멤버 CODEOWNERS 추가 * [fix/#58] test yml에 더미값 추가 * [fix/#58] 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [docs/#61] flyway 누락 이미지 추가 (#62) * [docs/#61] 이미지 url 수정 * [docs/#61] 사진 업데이트 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#63] 오늘의 코디 생성 API 구현 (#64) * [feat/#63] 도메인 및 init script 추가 * feat: coordinate 생성 기능 구현 * [feat/#63] 코디 생성 로직 구현 * [feat/#63] controller test 작성 완료 * [test/#63] test 작성 완료 * [docs/#63] 레디스 키 관련 문서화 추가 * [fix/#63] 테스트 오류 수정 * fix: clothes 오타 정정 * feat: 옷의 개수에 관한 검증 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#60] 신고 생성 api 구현 (#65) * [fix]@tag순서 명세서대로 재배치 * feat: Report 엔티티 생성 * Revert "feat: Report 엔티티 생성" This reverts commit 21511d7. * feat: Report 엔티티 생성 * feat: 신고사유 및 신고컨텐츠타입 ENUM작성 * feat: ReportCreate 요청/응답DTO 작성 * fix: ReportCreateRequest 수정 * feat: ReportController 생성 * feat: ReportService 생성, reportCreate구현 * feat: Report repository 및 exception 생성 * feat: Report 도메인 로직 추가 * fix: validateTargetExists로직 수정 * [docs/#61] flyway 누락 이미지 추가 (#62) * [docs/#61] 이미지 url 수정 * [docs/#61] 사진 업데이트 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [feat/#63] 오늘의 코디 생성 API 구현 (#64) * [feat/#63] 도메인 및 init script 추가 * feat: coordinate 생성 기능 구현 * [feat/#63] 코디 생성 로직 구현 * [feat/#63] controller test 작성 완료 * [test/#63] test 작성 완료 * [docs/#63] 레디스 키 관련 문서화 추가 * [fix/#63] 테스트 오류 수정 * fix: clothes 오타 정정 * feat: 옷의 개수에 관한 검증 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * delete: 기존 엔티티 및 레포지토리 삭제 * feat: Report ddl 작성 * delete: 기존 Report 관련 enum 삭제 * fix: ReportController 수정 * feat: @JsonCreator 메서드 작성 * fix: ReportErrorCode 수정 * fix: creatHistory -> createHistory오타수정 * fix: creatHistory -> createHistory오타수정 * Refactor: 신고 생성 검증 로직 변경 * feat: 신고 생성 테스트 코드 추가 * fix: JsonCreator애노테이션 누락 추가 * fix: 기타 누락 및 오타 수정 --------- Co-authored-by: 나용준 <dydwnssk99@gmail.com> Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [fix/#69] S3 Utils 문제 & 양방향 삭제 로직 제거 (#70) * fix: S3 문제 사항 수정 * refactor: 양방향 삭제 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> * [Feat/#72] 본인 확인 API 구현 (#73) * feat: 본인확인 api response dto 생성 * feat: 본인확인 API 컨트롤러, 서비스 구현 * feat: 본인확인 API 서비스 로직 구현 * test: 본인확인 API 테스트 코드 추가 * [refactor/#66] 기타 수정 사항 반영 (#75) * fix: 댓글과 대댓글 API에 isMine 필드 추가 * refactor: 오늘의…
1 parent aff8d16 commit 9f601f9

File tree

9 files changed

+33
-103
lines changed

9 files changed

+33
-103
lines changed

.github/workflows/dev-cd.yml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ jobs:
6363
username: ubuntu
6464
host: ${{ secrets.DEV_EC2_HOST }}
6565
key: ${{ secrets.DEV_EC2_SSH_KEY }}
66-
envs: DOCKERHUB_USERNAME,DEV_MYSQL_HOST,MYSQL_PORT,DB_NAME,DB_USERNAME,DB_PASSWORD,REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,DEV_KAKAO_CLIENT_ID,DEV_KAKAO_CLIENT_SECRET,DEV_APPLE_CLIENT_ID,DEV_APPLE_CLIENT_SECRET,JWT_ACCESS_TOKEN_SECRET,JWT_REFRESH_TOKEN_SECRET,JWT_ACCESS_TOKEN_EXPIRATION_TIME,JWT_REFRESH_TOKEN_EXPIRATION_TIME,JWT_ISSUER,DEV_AWS_ACCESS_KEY_ID,DEV_AWS_SECRET_ACCESS_KEY,AWS_REGION,DEV_S3_BUCKET,DEV_S3_ENDPOINT,SWAGGER_USERNAME,SWAGGER_PASSWORD,FIREBASE_TYPE,FIREBASE_PROJECT_ID,FIREBASE_PRIVATE_KEY_ID,FIREBASE_PRIVATE_KEY,FIREBASE_CLIENT_EMAIL,FIREBASE_CLIENT_ID,FIREBASE_AUTH_URI,FIREBASE_TOKEN_URI,FIREBASE_AUTH_PROVIDER_X509_CERT_URL,FIREBASE_CLIENT_X509_CERT_URL
66+
envs: DOCKERHUB_USERNAME,DEV_MYSQL_HOST,MYSQL_PORT,DB_NAME,DB_USERNAME,DB_PASSWORD,REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,DEV_KAKAO_CLIENT_ID,DEV_KAKAO_CLIENT_SECRET,DEV_APPLE_CLIENT_ID,DEV_APPLE_CLIENT_SECRET,JWT_ACCESS_TOKEN_SECRET,JWT_REFRESH_TOKEN_SECRET,JWT_ACCESS_TOKEN_EXPIRATION_TIME,JWT_REFRESH_TOKEN_EXPIRATION_TIME,JWT_ISSUER,DEV_AWS_ACCESS_KEY_ID,DEV_AWS_SECRET_ACCESS_KEY,AWS_REGION,DEV_S3_BUCKET,DEV_S3_ENDPOINT,SWAGGER_USERNAME,SWAGGER_PASSWORD,FIREBASE_SA_JSON_B64
6767
script: |
6868
export DOCKERHUB_NAME=${{ secrets.DOCKERHUB_USERNAME }}
6969
export DOCKER_TAG=dev-app
@@ -99,16 +99,11 @@ jobs:
9999
export SWAGGER_USERNAME=${{ secrets.SWAGGER_USERNAME }}
100100
export SWAGGER_PASSWORD=${{ secrets.SWAGGER_PASSWORD }}
101101
102-
export FIREBASE_TYPE=${{ secrets.FIREBASE_TYPE }}
103-
export FIREBASE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}
104-
export FIREBASE_PRIVATE_KEY_ID=${{ secrets.FIREBASE_PRIVATE_KEY_ID }}
105-
export FIREBASE_PRIVATE_KEY=${{ secrets.FIREBASE_PRIVATE_KEY }}
106-
export FIREBASE_CLIENT_EMAIL=${{ secrets.FIREBASE_CLIENT_EMAIL }}
107-
export FIREBASE_CLIENT_ID=${{ secrets.FIREBASE_CLIENT_ID }}
108-
export FIREBASE_AUTH_URI=${{ secrets.FIREBASE_AUTH_URI }}
109-
export FIREBASE_TOKEN_URI=${{ secrets.FIREBASE_TOKEN_URI }}
110-
export FIREBASE_AUTH_PROVIDER_X509_CERT_URL=${{ secrets.FIREBASE_AUTH_PROVIDER_X509_CERT_URL }}
111-
export FIREBASE_CLIENT_X509_CERT_URL=${{ secrets.FIREBASE_CLIENT_X509_CERT_URL }}
102+
sudo mkdir -p /home/ubuntu/secrets
103+
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | sudo tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
104+
sudo chmod 600 /home/ubuntu/secrets/firebase-sa.json
105+
106+
export FIREBASE_CREDENTIALS_PATH=/home/ubuntu/secrets/firebase-sa.json
112107
113108
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
114109

.github/workflows/prod-cd.yml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ jobs:
7373
username: ubuntu
7474
host: ${{ secrets.PROD_EC2_HOST }}
7575
key: ${{ secrets.PROD_EC2_SSH_KEY }}
76-
envs: DOCKERHUB_USERNAME,SPRING_PROFILES_ACTIVE,PROD_MYSQL_HOST,MYSQL_PORT,DB_NAME,DB_USERNAME,DB_PASSWORD,REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,PROD_KAKAO_CLIENT_ID,PROD_KAKAO_CLIENT_SECRET,PROD_APPLE_CLIENT_ID,PROD_APPLE_CLIENT_SECRET,JWT_ACCESS_TOKEN_SECRET,JWT_REFRESH_TOKEN_SECRET,JWT_ACCESS_TOKEN_EXPIRATION_TIME,JWT_REFRESH_TOKEN_EXPIRATION_TIME,JWT_ISSUER,PROD_AWS_ACCESS_KEY_ID,PROD_AWS_SECRET_ACCESS_KEY,AWS_REGION,PROD_S3_BUCKET,PROD_S3_ENDPOINT,SWAGGER_USERNAME,SWAGGER_PASSWORD,FIREBASE_TYPE,FIREBASE_PROJECT_ID,FIREBASE_PRIVATE_KEY_ID,FIREBASE_PRIVATE_KEY,FIREBASE_CLIENT_EMAIL,FIREBASE_CLIENT_ID,FIREBASE_AUTH_URI,FIREBASE_TOKEN_URI,FIREBASE_AUTH_PROVIDER_X509_CERT_URL,FIREBASE_CLIENT_X509_CERT_URL
76+
envs: DOCKERHUB_USERNAME,SPRING_PROFILES_ACTIVE,PROD_MYSQL_HOST,MYSQL_PORT,DB_NAME,DB_USERNAME,DB_PASSWORD,REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,PROD_KAKAO_CLIENT_ID,PROD_KAKAO_CLIENT_SECRET,PROD_APPLE_CLIENT_ID,PROD_APPLE_CLIENT_SECRET,JWT_ACCESS_TOKEN_SECRET,JWT_REFRESH_TOKEN_SECRET,JWT_ACCESS_TOKEN_EXPIRATION_TIME,JWT_REFRESH_TOKEN_EXPIRATION_TIME,JWT_ISSUER,PROD_AWS_ACCESS_KEY_ID,PROD_AWS_SECRET_ACCESS_KEY,AWS_REGION,PROD_S3_BUCKET,PROD_S3_ENDPOINT,SWAGGER_USERNAME,SWAGGER_PASSWORD,FIREBASE_SA_JSON_B64
7777
script: |
7878
export DOCKERHUB_NAME=${{ secrets.DOCKERHUB_USERNAME }}
7979
export DOCKER_TAG=prod-app
@@ -109,16 +109,11 @@ jobs:
109109
export SWAGGER_USERNAME=${{ secrets.SWAGGER_USERNAME }}
110110
export SWAGGER_PASSWORD=${{ secrets.SWAGGER_PASSWORD }}
111111
112-
export FIREBASE_TYPE=${{ secrets.FIREBASE_TYPE }}
113-
export FIREBASE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}
114-
export FIREBASE_PRIVATE_KEY_ID=${{ secrets.FIREBASE_PRIVATE_KEY_ID }}
115-
export FIREBASE_PRIVATE_KEY=${{ secrets.FIREBASE_PRIVATE_KEY }}
116-
export FIREBASE_CLIENT_EMAIL=${{ secrets.FIREBASE_CLIENT_EMAIL }}
117-
export FIREBASE_CLIENT_ID=${{ secrets.FIREBASE_CLIENT_ID }}
118-
export FIREBASE_AUTH_URI=${{ secrets.FIREBASE_AUTH_URI }}
119-
export FIREBASE_TOKEN_URI=${{ secrets.FIREBASE_TOKEN_URI }}
120-
export FIREBASE_AUTH_PROVIDER_X509_CERT_URL=${{ secrets.FIREBASE_AUTH_PROVIDER_X509_CERT_URL }}
121-
export FIREBASE_CLIENT_X509_CERT_URL=${{ secrets.FIREBASE_CLIENT_X509_CERT_URL }}
112+
sudo mkdir -p /home/ubuntu/secrets
113+
echo "${{ secrets.FIREBASE_SA_JSON_B64 }}" | base64 -d | sudo tee /home/ubuntu/secrets/firebase-sa.json > /dev/null
114+
sudo chmod 600 /home/ubuntu/secrets/firebase-sa.json
115+
116+
export FIREBASE_CREDENTIALS_PATH=/home/ubuntu/secrets/firebase-sa.json
122117
123118
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
124119

clokey-api/dev-compose.yml

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,7 @@ services:
3030
APPLE_CLIENT_SECRET: ${APPLE_CLIENT_SECRET}
3131

3232
# Firebase
33-
FIREBASE_TYPE: ${FIREBASE_TYPE}
34-
FIREBASE_PROJECT_ID: ${FIREBASE_PROJECT_ID}
35-
FIREBASE_PRIVATE_KEY_ID: ${FIREBASE_PRIVATE_KEY_ID}
36-
FIREBASE_PRIVATE_KEY: ${FIREBASE_PRIVATE_KEY}
37-
FIREBASE_CLIENT_EMAIL: ${FIREBASE_CLIENT_EMAIL}
38-
FIREBASE_CLIENT_ID: ${FIREBASE_CLIENT_ID}
39-
FIREBASE_AUTH_URI: ${FIREBASE_AUTH_URI}
40-
FIREBASE_TOKEN_URI: ${FIREBASE_TOKEN_URI}
41-
FIREBASE_AUTH_PROVIDER_X509_CERT_URL: ${FIREBASE_AUTH_PROVIDER_X509_CERT_URL}
42-
FIREBASE_CLIENT_X509_CERT_URL: ${FIREBASE_CLIENT_X509_CERT_URL}
33+
FIREBASE_CREDENTIALS_PATH: /run/secrets/firebase-sa.json
4334

4435
# JWT
4536
JWT_ACCESS_TOKEN_SECRET: ${JWT_ACCESS_TOKEN_SECRET}
@@ -58,6 +49,10 @@ services:
5849
# Swagger
5950
SWAGGER_USERNAME: ${SWAGGER_USERNAME}
6051
SWAGGER_PASSWORD: ${SWAGGER_PASSWORD}
52+
53+
volumes:
54+
- /home/ubuntu/secrets/firebase-sa.json:/run/secrets/firebase-sa.json:ro
55+
6156
networks:
6257
- app_network
6358

clokey-api/prod-compose.yml

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,7 @@ services:
3030
APPLE_CLIENT_SECRET: ${APPLE_CLIENT_SECRET}
3131

3232
# Firebase
33-
FIREBASE_TYPE: ${FIREBASE_TYPE}
34-
FIREBASE_PROJECT_ID: ${FIREBASE_PROJECT_ID}
35-
FIREBASE_PRIVATE_KEY_ID: ${FIREBASE_PRIVATE_KEY_ID}
36-
FIREBASE_PRIVATE_KEY: ${FIREBASE_PRIVATE_KEY}
37-
FIREBASE_CLIENT_EMAIL: ${FIREBASE_CLIENT_EMAIL}
38-
FIREBASE_CLIENT_ID: ${FIREBASE_CLIENT_ID}
39-
FIREBASE_AUTH_URI: ${FIREBASE_AUTH_URI}
40-
FIREBASE_TOKEN_URI: ${FIREBASE_TOKEN_URI}
41-
FIREBASE_AUTH_PROVIDER_X509_CERT_URL: ${FIREBASE_AUTH_PROVIDER_X509_CERT_URL}
42-
FIREBASE_CLIENT_X509_CERT_URL: ${FIREBASE_CLIENT_X509_CERT_URL}
33+
FIREBASE_CREDENTIALS_PATH: /run/secrets/firebase-sa.json
4334

4435
# JWT
4536
JWT_ACCESS_TOKEN_SECRET: ${JWT_ACCESS_TOKEN_SECRET}
@@ -58,6 +49,10 @@ services:
5849
# Swagger
5950
SWAGGER_USERNAME: ${SWAGGER_USERNAME}
6051
SWAGGER_PASSWORD: ${SWAGGER_PASSWORD}
52+
53+
volumes:
54+
- /home/ubuntu/secrets/firebase-sa.json:/run/secrets/firebase-sa.json:ro
55+
6156
networks:
6257
- app_network
6358

clokey-api/src/main/resources/application-dev.yml

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,4 @@ spring-doc:
8686
doc-expansion : none
8787

8888
firebase:
89-
type: ${FIREBASE_TYPE}
90-
project-id: ${FIREBASE_PROJECT_ID}
91-
private-key-id: ${FIREBASE_PRIVATE_KEY_ID}
92-
private-key: ${FIREBASE_PRIVATE_KEY}
93-
client-email: ${FIREBASE_CLIENT_EMAIL}
94-
client-id: ${FIREBASE_CLIENT_ID}
95-
auth-uri: ${FIREBASE_AUTH_URI}
96-
token-uri: ${FIREBASE_TOKEN_URI}
97-
auth-provider-x509-cert-url: ${FIREBASE_AUTH_PROVIDER_X509_CERT_URL}
98-
client-x509-cert-url: ${FIREBASE_CLIENT_X509_CERT_URL}
89+
credentials-path: ${FIREBASE_CREDENTIALS_PATH}

clokey-api/src/main/resources/application-local.yml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,4 @@ logging:
8787
org.hibernate.orm.jdbc.bind: TRACE
8888

8989
firebase:
90-
type: ${FIREBASE_TYPE}
91-
project-id: ${FIREBASE_PROJECT_ID}
92-
private-key-id: ${FIREBASE_PRIVATE_KEY_ID}
93-
private-key: ${FIREBASE_PRIVATE_KEY}
94-
client-email: ${FIREBASE_CLIENT_EMAIL}
95-
client-id: ${FIREBASE_CLIENT_ID}
96-
auth-uri: ${FIREBASE_AUTH_URI}
97-
token-uri: ${FIREBASE_TOKEN_URI}
98-
auth-provider-x509-cert-url: ${FIREBASE_AUTH_PROVIDER_X509_CERT_URL}
99-
client-x509-cert-url: ${FIREBASE_CLIENT_X509_CERT_URL}
100-
90+
credentials-path: ${FIREBASE_CREDENTIALS_PATH}

clokey-api/src/main/resources/application-prod.yml

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,4 @@ aws:
7373
endpoint: ${PROD_S3_ENDPOINT:https://s3.ap-northeast-2.amazonaws.com}
7474

7575
firebase:
76-
type: ${FIREBASE_TYPE}
77-
project-id: ${FIREBASE_PROJECT_ID}
78-
private-key-id: ${FIREBASE_PRIVATE_KEY_ID}
79-
private-key: ${FIREBASE_PRIVATE_KEY}
80-
client-email: ${FIREBASE_CLIENT_EMAIL}
81-
client-id: ${FIREBASE_CLIENT_ID}
82-
auth-uri: ${FIREBASE_AUTH_URI}
83-
token-uri: ${FIREBASE_TOKEN_URI}
84-
auth-provider-x509-cert-url: ${FIREBASE_AUTH_PROVIDER_X509_CERT_URL}
85-
client-x509-cert-url: ${FIREBASE_CLIENT_X509_CERT_URL}
76+
credentials-path: ${FIREBASE_CREDENTIALS_PATH}

clokey-infrastructure/src/main/java/org/clokey/config/FirebaseConfig.java

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.google.firebase.FirebaseApp;
55
import com.google.firebase.FirebaseOptions;
66
import com.google.firebase.messaging.FirebaseMessaging;
7-
import java.io.ByteArrayInputStream;
7+
import java.io.FileInputStream;
88
import java.io.IOException;
99
import java.util.List;
1010
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,29 +32,16 @@ private FirebaseApp getFirebaseApp() throws IOException {
3232
}
3333
}
3434

35+
String path = firebaseProperties.getCredentialsPath();
36+
if (path == null || path.isBlank()) {
37+
throw new IllegalStateException("FIREBASE_CREDENTIALS_PATH is empty");
38+
}
39+
3540
FirebaseOptions options =
3641
FirebaseOptions.builder()
37-
.setCredentials(
38-
GoogleCredentials.fromStream(
39-
new ByteArrayInputStream(
40-
getFirebaseConfigJson().getBytes())))
42+
.setCredentials(GoogleCredentials.fromStream(new FileInputStream(path)))
4143
.build();
4244

4345
return FirebaseApp.initializeApp(options);
4446
}
45-
46-
private String getFirebaseConfigJson() {
47-
return String.format(
48-
"{ \"type\": \"%s\", \"project_id\": \"%s\", \"private_key_id\": \"%s\", \"private_key\": \"%s\", \"client_email\": \"%s\", \"client_id\": \"%s\", \"auth_uri\": \"%s\", \"token_uri\": \"%s\", \"auth_provider_x509_cert_url\": \"%s\", \"client_x509_cert_url\": \"%s\" }",
49-
firebaseProperties.getType(),
50-
firebaseProperties.getProjectId(),
51-
firebaseProperties.getPrivateKeyId(),
52-
firebaseProperties.getPrivateKey().replace("\\n", "\n"), // 줄바꿈 처리
53-
firebaseProperties.getClientEmail(),
54-
firebaseProperties.getClientId(),
55-
firebaseProperties.getAuthUri(),
56-
firebaseProperties.getTokenUri(),
57-
firebaseProperties.getAuthProviderX509CertUrl(),
58-
firebaseProperties.getClientX509CertUrl());
59-
}
6047
}

clokey-infrastructure/src/main/java/org/clokey/config/FirebaseProperties.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,5 @@
1010
@Configuration
1111
@ConfigurationProperties(prefix = "firebase")
1212
public class FirebaseProperties {
13-
private String type;
14-
private String projectId;
15-
private String privateKeyId;
16-
private String privateKey;
17-
private String clientEmail;
18-
private String clientId;
19-
private String authUri;
20-
private String tokenUri;
21-
private String authProviderX509CertUrl;
22-
private String clientX509CertUrl;
13+
private String credentialsPath;
2314
}

0 commit comments

Comments
 (0)