Skip to content

Conversation

@kanghana1
Copy link
Contributor

❤️ 기능 설명

프론트 요청으로 토큰 재발급 api에 대해 permitAll 처리를 진행했습니다

정상실행 확인
image


연결된 issue

연결된 issue를 자동으로 닫기 위해 아래 {이슈넘버}를 입력해주세요.

close #398



🩷 Approve 하기 전 확인해주세요!


✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 테스트 결과 사진을 넣었는가?
  • 이슈넘버를 적었는가?

@kanghana1 kanghana1 self-assigned this Aug 19, 2025
Copy link
Contributor

@Dimo-2562 Dimo-2562 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다!

@kanghana1 kanghana1 merged commit 54cda6a into develop Aug 19, 2025
1 check passed
@kanghana1 kanghana1 deleted the fix/#398 branch August 20, 2025 01:35
kanghana1 added a commit that referenced this pull request Sep 21, 2025
* [chore] Update gradle.yml

* [chore] Update gradle.yml

* [Feat/#44] 대회 기록 삭제 API 구현 (#45)

* feat: 대회 기록 삭제 DTO, command

* feat: 대회 기록 삭제 컨트롤러, 컨버터 구현

* feat: 대회 기록 삭제 서비스 구현

* refactor: 본인 대회 확인 파생 쿼리 메서드

* refactor: member와 contest 양방향 매핑

* fit: 서비스 수정

* [feat/#51] 특정 회원 운동 취소 API 구현 (#52)

* feat: 컨트롤러 구현

* feat: requestDTO 구현, responseDTO는 기존의 CancelResponseDTO 사용

* feat: 검증 로직 구현

* feat: 참가자가 멤버일 때 참여 취소 로직 구현

* feat: 참가자가 게스트일 때 참여 취소 로직 구현

* feat: 에러 코드 구현

* refactor: 분기 로직 별도 메서드로 분리

* [feat/#46] 내 대회 기록 상세조회 API 구현 (#54)

* feat: 내 대회 기록 상세 조회 응답 DTO 구현

* feat: 내 대회 기록 상세 조회 컨버터 구현

* feat: 내 대회 기록 상세 조회 컨트롤러 구현

* feat: 내 대회 기록 상세 조회 서비스 구현

* refator: 이미지, 동영상 순서 정렬 기능 추가

* [feat/#55] 내 대회 기록 리스트 조회 (전체, 미입상) API 구현 (#58)

* refator: 미입상 NONE 추가

* feat: 내 대회 기록 심플 조회 응답 DTO 구현

* refator: GET 메서드 queryService로 옮기기

* feat: 내 대회 기록 심플 조회, 리스트로 변환 컨버터 구현

* feat: 내 대회 기록 리스트 조회 컨트롤러 구현

* feat: 내 대회 기록 리스트 조회(전체, 미입상) 서비스 구현

* refactor: 내 대회 기록 리스트 조회(전체, 미입상) 하나의 API로 수정

* fix: static 삭제

* refactor: 메서드 인라인

* chore: 주석

* chore: yml 고치기 (#63)

* [feat/#57] 운동 삭제 API 구현 (#60)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* feat: 멤버 권한 검증 로직 구현

* chore: Party 엔티티에서 운동 생성 메서드 위치 변경

* feat: 운동 삭제 로직 구현

* feat: 반환 로직 구현

* [feat/#43] 운동 게스트 삭제 API 구현 (#56)

* feat: 컨트롤러 구현

* feat: 검증 로직 구현

* feat: 게스트 삭제 로직 구현

* feat: 에러 코드 구현

* feat: 운동 시작 여부 검증 로직 추가

* [refactor/#61] 운동 참여자 수 계산 로직 수동 증가에서 사이즈 계산으로 변경 (#65)

* refactor: nowCapacity 필드 제거

* refactor: nowCapacity 필드 사용 메서드 수정

* refactor: 현재 인원 반환 메서드 추가

* refactor: 람다식 메서드 참조로 변경

* refactor: 다음 순번 계산 메서드 추가

* [feat/#34] 모임 가입 신청 멤버 조회 API 구현 (#68)

* refactor: 용어 혼용 방지를 위해 모임 가입신청 생성 API의 DTO 명칭 변경

* feat:모임 가입신청 조회 DTO 구현

* feat: 모임 가입신청 조회 서비스 인터페이스 추가

* feat: 모임 가입신청 조회 API 컨트롤러 구현

* feat: 모임 가입신청 리포지토리에 조회 메서드 추가

* feat: 모임 가입신청 조회 서비스 구현

* feat: 권한 없음 에러 코드 추가

* feat: 모임 가입신청 조회 API 컨버터 구현

* refactor: PartyJoinRequest를 BaseEntity에 상속받도록 수정

* feat: Member와 프로필 이미지 양방향 관계 설정

* refactor: 테스트 진행을 위해 memberId 임시값 변경

* feat: 모임 가입신청 목록을 최신순으로 정렬하도록 기본값 추가

* [feat/#59] 내 대회 메달 조회 API 구현 (#67)

* feat: 내 메달 개수 조회 응답 DTO 구현

* feat: 쿼리 메서드 구현

* feat: 메달 개수 조회 컨버터, 컨트롤러 구현

* feat: 메달 개수 조회 서비스 구현

* chore: log.info() 추가

* [feat/#70] 다른 회원의 대회 기록 상세조회 API 구현 (#71)

* feat: 다른 사람의 대회 기록 상세조회 응답 DTO 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 컨버터 구현

* feat: 다른 사람의 대회 기록 상세조회 컨트롤러 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 서비스 구현

* [feat/#73] 다른 회원의 대회 기록 리스트 (전체, 미입상) API 구현 (#74)

* feat: 다른 사람의 대회 기록 리스트 조회 API 컨트롤러 구현

* refactor: {내/다른 사람}의 대회 기록 리스트 조회 통합 서비스 구현

* chore: 주석 수정

* [feat/#75] 다른 회원의 대회 메달 조회 API 구현 (#76)

* chore: 주석 수정

* feat: 다른 사람의 대회 메달 개수 조회 API 컨트롤러 구현

* [feat/#66] 운동 수정 API 구현 (#69)

* feat: 컨트롤러 구현

* feat: 모임장 운동 취소 API에서 누락된 @Valid 어노테이션 추가

* feat: DTO 구현

* feat: 검증 로직 구현

* feat: dto 접근을 위한 command 패턴 도입

* feat: 운동 정보 수정 로직 구현

* feat: 운동 주소 정보 수정 로직 구현

* feat: 저장 및 반환 로직 구현

* feat: 에러 코드 정의

* fix: 컨트롤러 url 오타 수정

* feat: requestDTO 필드 수정

* [feat/#53] 모임 가입신청 처리 API 구현 (#77)

* feat: 승인 요청에 대한 응답을 담는 enum 추가 (RequestAction)

* feat: 모임 가입신청 처리 요청 DTO 구현

* feat: 모임 서비스 인터페이스에 가입신청 처리 메서드 추가

* feat: 모임 가입신청 처리 API 컨트롤러 구현

* feat: 모임 가입신청 처리 API 서비스 구현

* feat: 가입신청 처리를 위한 정적 팩토리 메서드 및 비즈니스 메서드 구현

* feat: 모임 가입신청 처리 API 에러 코드 추가

* fix: 스웨거 설명문 추가 및 오류 수정

* refactor: 사용하지않는 import 정리

* refactor: orderType 필드 제거

* refactor: 양방향 연결을 위해 member에 연관 관계 편의 메서드 추가

* [feat/#72] 프로필 수정 기능 구현 (#79)

* feat: 프로필 수정 기능 구현

* feat: 프로필 사진 재생성 관련 에러 처리

* chore: 스웨거 설명 수정

* refact: dto 클래스 -> record 변환

* [refactor/#81] 운동 DTO에 중첩 record 적용 (#82)

* chore: pull 관련 임시 에러처리

* refactor: 운동 생성 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 API에서 중첩 record 패턴 적용

* refactor: 운동 게스트 초대 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 취소 API에서 중첩 record 패턴 적용

* refactor: 게스트 초대 취소 API에서 중첩 record 패턴 적용

* docs: 게스트 초대 취소 API 로그 수정

* refactor: 특정 참여자 운동 취소 API에서 중첩 record 패턴 적용

* refactor: 운동 삭제 API에서 중첩 record 패턴 적용

* refactor: 운동 수정 API에서 중첩 record 패턴 적용

* [feat/#80] 회원주소 추가 API 구현 (#83)

* feat: 회원주소 추가 API 구현

* feat: 주소 개수 예외처리 추가

* [refactor/#84] 이미지 업로드 방식 변경 (#85)

* refactor: dto 어노테이션 수정

* [refactor/#88] 메달 도메인 DTO에 중첩 record 패턴 도입 (#90)

* [feat/#86] 대표 주소 변경API 구현 (#87)

* [feat/#94] 회원 주소 삭제 API 구현 (#97)

* [refactor/#98] 주소 추가 로직 수정 (#99)

* [feat/#100] 회원 탈퇴 기능 구현 (#101)

* [refactor/#89] 모임 생성 API 이미지 업로드 방식 변경 (#91)

refactor: 모임 생성 API 이미지 업로드 방식 변경

* [refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)

* refactor: 모임 도메인 DTO에 중첩 record 패턴 도입

* refactor: DTO 명칭 변경 및 임포트 정리

* [fix/#107] 병합 오류 해결 (#108)

* Revert "[refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)"

This reverts commit feaa902.

* fix: 병합 오류 해결 완료

* refactor: MemberExercise와 Guest에서 participantNum 필드 제거 (#105)

* [refactor/#109] 모임 생성 API 에러 처리 추가 (#112)

* feat: 모임 생성 DTO에 에러 처리 및 ENUM 변환 메서드 구현

* feat: 입력값 에러 코드 추가

* refactor: 에러 처리 관련 코드 수정

* [feat/#103] 운동 신청 API에서 검증 로직 추가 (#106)

* feat: 운동 급수 검증 로직 추가

* feat: 에러 코드 추가

* docs: Swagger docs에 급수 위반 추가

* refactor: Exercise와 연관된 엔티티들 fetch join으로 불러오기(N+1) 방지

* feat: 나이 계산 메서드 추가

* feat: 나이 검증 로직 추가

* feat: 에러 코드 추가

* refactor: 급수 및 나이 검증 로직 4XX 비즈니스 에러로 변경

* [feat/#95] 프로필 조회 관련 API 구현 (#118)

* feat: 다른 유저 프로필 조회

* chore: API URL 수정

* feat: 내 프로필 조회 API 구현

* chore: 컨트롤러 메서드 이름 수정

* [feat/#110] 모임 신청 API 검증 로직 추가 구현 (#117)

* feat: 모임 신청자가 모임의 급수 조건에 적합한지 검증하는 로직 구현

* feat: 급수 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 유형에 맞는 성별인지 검증하는 로직 구현

* feat: 모임유형의 성별 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 나이대에 적합한지 검증하는 로직 구현

* feat: 나이 조건 검증 에러 코드 추가

* [Feat/#96] 회원 주소 조회 관련 API 구현 (#119)

* refact: 대표주소 추출 메소드 분리

* feat: 내 현재 위치 조회 API 구현

* chore: 건물명 null여부 관련 수정

* chore: 프로필 조회시 건물명, 도로명 추가

* feat: 회원의 등록 주소 전체 조회

* feat: 대표 주소가 위로 올라오도록 기능 추가

* [feat/#113] 모임 생성 API 검증 로직 추가 구현 (#121)

* feat: 모임 생성자의 성별을 검증하는 로직 구현

* feat: 모임 생성자의 나이를 검증하는 로직 구현

* feat: 모임 생성자의 급수를 검증하는 로직 구현

* feat: 빈 리스트 방지를 위해 @notempty로 변경

* feat: 혼복인 경우, 남성의 급수가 빈 리스트로 입력되는 것을 방지하기 위한 로직 구현

* refactor: 문자열 입력값 검증 @notblank로 변경

* [feat/#123] 운동 멤버십 구분 기능 추가 (#126)

* feat: 운동 참여 멤버쉽 enum 추가

* refactor: 운동 정렬 enum 제거 및 필드 제거

* feat: 운동 신청 시 운동 멤버십 결정 로직 구현

* feat: 게스트 엔티티는 따로 필드 없이 GUEST를 반환하는 로직으로 구현

* refactor: MemberExercise joinedAt 필드 제거에 따라 createdAt을 반환하도록 변경

* fix: ExerciseBookmark 엔티티에서 잘못 삭제한 필드 복구

* fix: 운동 신청 시 운동 신청 엔티티 생성 시점 반환으로 로직 에러 수정

* [feat/#124] 모임 가입 승인 멤버 조회 API 구현 (#127)

* refactor: PartyJoinDTO에 생성일자 추가

* feat: status(상태) 파라메터에 추가

* refactor: 컨버터에 updatedAt 추가

* fix: record의 request 오류 @Schema로 해결

* feat: PENDING인 경우, uppdateAt에 null값을 넣고 DTO에서 생략되도록 구현

* feat: 상태 에러 코드 추가 및 유효성 검증 구현

* [feat/#78] 운동 상세 조회 API 구현 (#128)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 쿼리 서비스 틀 구현

* feat: 기본 검증 구현

* feat: 파티 내 위치 체크

* feat: 멤버 참가자 호출 로직 구현

* refactor: 외부 참여자 ENUM값 변경

* refactor: 메서드명 더 명확하게 변경

* feat: 게스트 참가자 호출 로직 구현, 배치 쿼리로 최적화

* feat: 정렬을 위해 Info record에 joinedAt 컬럼 추가

* feat: 운동 기본 정보 로직 구현

* feat: 참여자, 대기자 그룹의 참여자 정보 반환 타입 List로 변경

* feat: 전체 참여자를 참여자와 대기자로 구분하는 로직 구현

* feat: 그룹 정보 로직 구현

* feat: 반환 로직 구현

* fix: ENUM 값 변경에 따라 사용처도 변경

* [feat/#122] 모임 상세 조회 API 구현 (#129)

* feat: 모임 상세조회 DTO 구현

* feat: 모임 상세조회 인터페이스에 메서드 추가

* feat:모임 상세조회 컨트롤러 메서드 구현

* feat: 모임 상세조회 API 서비스 구현

* feat: 모임 상세 조회 API 컨버터 구현

* refactor: partyDetailDTO record 하나로 통일

* feat: ENUM에 한글 추가 및 getter 추가

* refactor: 급수를 리스트 형식으로 반환하도록 수정

* feat: 컨트롤러에 @apiresponse 추가

* [feat/#131] 내 모임 조회 (간략화) API 구현 (#134)

* feat: 내 모임 간략화 조회 DTO 구현

* feat: 내 모임 간략화 조회 서비스 메서드 추가

* feat: 모임 간략화 조회 컨트롤러 메서드 구현

* feat: 내 모임 간략화 조회 서비스 구현

* feat: 내 모임 조회 리포지토리 메서드 구현

* feat: 내 모임 간략화 조회 컨버터 구현

* refactor: 서비스에 로그 출력문 추가

* [feat/#132] 내가 초대한 운동 게스트 조회 API 구현 (#133)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 대기 상태 구분을 위해 isWating 필드 추가

* feat: 내가 초대한 게스트 목록 조회

* feat: 전체 참가자 목록 조회

* refactor: 운동 조회할 때 모임 정보와 함께 조회하도록 변경

* feat: 게스트 번호와 참여 여부 추출

* feat: 게스트 번호와 참여여부 record DTO로 이동 및 통계 record 추가

* feat: 통계 계산 로직 구현 및 반환 로직 구현

* docs: Swagger 성공 응답 설명 수정

* [feat/#130] 내 모임 조회 API 구현 (#135)

* feat: 내 모임 조회 DTO 구현

* feat: 내 모임 조회 서비스 메서드 추가

* feat: 내 모임 조회 컨트롤러 구현 및 정렬 로직 처리

* feat: 내 모임 조회 서비스 구현

* 모임 조회를 위한 비즈니스 메서드 및 운동 정보 record 구현

* feat: 내 모임 조회 컨버터 구현

* feat: 운동 정보를 담을 record 구현

* feat: 모임 조회 쿼리 구현

* refactor: 공백 제거 및 기본값 추가

* refactor: 정렬 기준 입력 한글로 입력 가능하도록 리팩토링 및 에러 처리

* [refactor/#138]  orphanRemoval 제거 (#139)

* [feat/#140] 모임 찜 관련 API 구현 (#141)

* feat: 모임 찜 관련 API 구현

* refactor: 중복 로직 삭제

* [docs#142] 운동 도메인 DTO의 Request 객체에 @Schema 어노테이션 추가 (#143)

* [feat/#145] 전역 에러 핸들러에서 Validation 과정에서 에러 응답을 1개만 던지는 대신 전체를 던지도록 변경 (#147)

* feat: RequestBody의 에러 메시지 1개가 아닌 전체 던지도록 변경

* feat: PathVariable, RequestParam의 에러 메시지가 1개가 아닌 전체를 던지도록 변경

* [feat/#144] 모임 운동 캘린더 조회 API 구현 (#148)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* fix: 운동 시작 시간 및 종료 시간 에러코드 1XX로 변환

* feat: 검증 로직 구현

* feat: 에러 코드 정의

* feat: 날짜 기간 내 운동 조회 로직 구현

* feat: 디폴트 날짜 계산 로직 구현

* feat: 멤버 여부와 파티 이름도 반환하도록 구현

* feat: 최상위 Response 객체 생성 로직 구현

* chore: 캘린더 스펠링 변경

* feat: 모임 성별 급수 정보 제외 반환 로직 구현

* feat: 성별 급수 정보 반환 로직 구현

* refactor: 성별 급수 1번만 계산하도록 변경

* refactor: 운동 주별로 그룹화 로직 메서드 추출로 리팩터링

* refactor: 운동 참여자 정보 fetch join 대신 네이티브 쿼리 Count로 따로 조회

* [feat/#125] 운동 찜 관련 기능 구현 (#150)

* feat: 운동 찜하기 구현

* feat: 운동 찜 해제 구현

* refactor: 예외처리 부분 수정

* 재배포

* test: 배포 테스트

* set: 배포 이후 yml파일 수정 및 S3 설정파일 추가

* [feat/#151] 운동 찜 조회 구현 (#155)

* feat: 운동 찜 조회 구현

* chore: 주석 오타 수정

* [feat/#153] 내 운동 캘린더 조회 API 구현 (#156)

* feat: 컨트롤러 구현

* feat: DTO 구현

* chore: 함수 Calendar 오타 수정

* feat: 서비스 로직 구현

* chore: Calendar 오타 수정

* feat: 최상위 Response 반환 로직 구현

* feat: 나머지 반환 로직 구현

* docs: .gitignore에 application-dev.yml 추가

* config: application.yml에 aws 관련 설정 추가

* [feat/#152] 찜한 모임 전체 조회 API 구현 (#157)

* feat: 찜한 모임 전체 조회

* chore: 코드 오타 수정

* [feat/#166] 모임 운동 캘린더 조회 API에 찜 여부 추가 (#167)

* feat: DTO에 찜 여부 필드 추가

* feat: 서비스와 리포지토리에 찜 여부 반환 로직 구현

* feat: 컨버터에 북마크 여부 반환 로직 추가

* [feat/#154] 내 모임 운동 조회 API 구현 (#163)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 내가 속한 모임 리스트 조회 및 빈 응답 반환 로직 구현

* docs: Swagger 설명에 누락된 큰 따옴표 추가

* feat: 내가 속한 모임의 운동 리스트 최대 6개까지 가져오는 로직 구현

* feat: 반환 로직 구현

* [feat/#149] 운동 도메인에 빈 응답 조기 반환(Early Return) 패턴 도입 (#170)

* feat: 모임 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내가 초대한 게스트 조회에서 빈 응답 조기 반환 패턴 도입

* [feat/#160] 알림 전체 조회 API 구현 (#171)

* feat: 알림 관련 기본 파일세팅 완료

* feat: 알림 전체 조회 기능 구현

* chore: 세미콜론 누락 추가

* refact: 반환타입 수정

* [feat/#111] 모임 삭제 API 구현 (#174)

* feat: 모임 삭제 API 서비스 메서드 추가

* feat: 모임 삭제 API 컨트롤러 구현

* feat: 모임 삭제 API 서비스 구현

* feat: 모임 엔티티에 모임 삭제 비즈니스 메서드와 status 필드 추가

* feat: PartyStatus ENUM 추가

* [refactor/#175] 모임 활동상태 검증 메서드 추가 (#176)

* feat: 모임 활성화 관련 에러 코드 추가

* refactor: 모임 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 조회 서비스에 모임 활성화 검증 로직 추가

* refactor: 운동 서비스에 모임 활성화 검증 로직 추가

* refactor: 찜 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 찜 양방향 연결로 변경 및 모임 삭제 시 모임 찜 연결 해제

* refactor: 운동 조회 서비스에 모임 활성화 검증 로직 추가

* [feat/#165] 내 모임 운동 캘린더 조회 API 구현 (#179)

* feat: 내 모임 운동 정렬방식 ENUM 추가

* fix: 충돌 해결

* docs: Swagger 성공 및 실패 응답 작성

* feat: 응답 DTO 구현

* feat: 조회 로직 구현

* refactor: 컨버터 메서드들 네이밍 통일 및 위치 한 곳으로 모음

* fix: DTO의 잘못된 참조 변경

* feat: 북마크 여부 로직 추가

* feat: 반환 로직 추가

* feat: fetch join을 위해서 로직 개선

* feat: 날짜별 그룹핑 DTO 로직 추가

* feat: 날짜별로 정렬해야 하기에 전체 운동 정렬 로직 제거

* feat: 사람 수 미리 계산 후 Converter에서 정렬

* feat: 운동 참여 인원 수 반환 로직 추가

* [feat/#178] 모임 멤버 조회 API 구현 (#180)

* feat: 모임 멤버 조회 API DTO 구현

* feat: 모임 멤버 조회 API 서비스 메서드 추가

* feat: 모임 멤버 조회 API 컨트롤러 구현

* refactor: 잘못된 로그 출력문 수정

* feat: 모임 멤버 조회 API 서비스 구현

* feat: 모임 멤버 조회 쿼리 구현

* feat: 모임 멤버 조회 API 컨버터 구현

* refactor: 모임 활성화 검증 추가

* refactor: 부모임장 ENUM에 추가

* feat: 모임 멤버 조회 role에 따른 정렬 구현

* [feat/#177] 캘린더 조회 API에서 날짜별로 아이템 묶기 (#181)

* feat: 내 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 내 운동 캘린더 조회 컨버터 로직 구현

* refactor: 불필요한 클래스 명시 제거

* feat: 모임 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 모임 운동 캘린더 조회 컨버터 로직 구현

* [feat/#172] 대회 이미지 업로드 API 구현 (#173)

* [feat/#136] 모임 탈퇴 API 구현 (#182)

* feat: 모임 탈퇴 서비스 메서드 추가

* fix: 잘못된 요청 매핑 주소 수정

* feat: 모임 탈퇴 API 컨트롤러 구현

* feat: 모임 탈퇴 API 관련 에러코드 구현

* feat: 모임 탈퇴 API 서비스 구현

* refactor: 서비스 메서드 정리 및 코멘트 수정

* refact: 필요 없어진 배포 관련 파일 삭제

* [feat/#137] 모임 멤버 삭제 API 구현 (#187)

* feat: 모임 멤버 삭제 API 서비스 메서드 추가

* feat: 모임 멤버 삭제 API 컨트롤러 구현

* feat: 모임 멤버 삭제 API 서비스 구현

* feat: 모임 멤버 삭제 API 에러코드 추가

* feat: 읽지 않은 알림 여부 조회 (#184)

* [feat/#159] 특정 알림 읽음 처리 (#183)

* feat: 특정 알림 읽음처리

* refactor: 필요 없는 부분 삭제

* feat: 회원 검증 로직 및 타입 관련 Request DTO 추가

* [feat/#188] 모임 추천 조회 API 구현 (#190)

* feat: 모임 추천 조회 API 서비스 메서드 추가

* feat: 모임 추천 조회 API 컨트롤러 구현

* feat: 모임 추천 조회 API 서비스 구현

* feat: 모임 추천 조회 및 사용자 주소 조회 리포지토리 메서드 구현

* feat: 사용자가 이미 가입한 모임은 추천되지 않도록 구현

* [feat/#164] 추천 운동 조회 API 구현 (#191)

* feat: 컨트롤러 구현

* feat: 반환을 리스트로 변경

* feat: DTO 구현

* chore: 오탈자 수정

* feat: 운동 조회 로직 구현

* feat: 서비스에서 반환 로직 구현

* feat: ExerciseItem을 List로 반환하도록 변경

* feat: 10개만 조회할경우 거리가 가까운 운동 조회 못할 수 있으므로 전체 조회로 변경

* feat: 정렬 로직 구현

* chore: 로그 출력

* feat: 반환 로직 구현

* refactor: 운동 아이템 List 형태로 반환하는 메서드 제거

* feat: 에러 코드 추가

* docs: 스웨거 설명 추가

* [refactor/#194] 도메인별 ENUM 패키지 구조 개선 (#196)

* refactor: 활동 요일 ENUM을 PARTY DOMAIN 아래로 변경

* chore: ContestController에서 안 쓰는 import 제거

* refactor: MemberPartyStatus Member 도메인 아래로 변경

* refactor: ExerciseOrderType 사용처에 맞게 네이밍 변경 및 Bookmark 도메인 아래로 변경

* refactor: MemberStatus Enum을 Member 도메인 아래로 변경

* refactor: MyPartyExerciseOrderType Enum을 Exercise 도메인 아래로 변경

* refactor: NotificationType Enum을 Notification 도메인 아래로 변경

* refactor: PartyStatus를 Party 도메인 아래로 변경

* refactor: 모임 신청 관련 Enum들을 Party 도메인 아래로 변경

* refactor: 운동 참여 상태  Enum 운동 도메인으로 변경

* refactor: 메달 종류 Enum 대회 도메인으로 변경

* refactor: 활동 시간, 모임 운동 타입, 모임 정렬 타입 Enum 모임 도메인으로 변경

* [refactor/#189] 대회 등록 API에서 이미지 업로드 분리 (#197)

* refactor: 대회 등록 API에서 이미지 서비스 분리

* refactor: 날짜 데이터 형식 변경

* [refactor/#199] 대회 기록 수정 API에서 이미지 업로드 분리 (#200)

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리 및 메서드 통합

* fix: 안 쓰는 코드 삭제

* [feat/#193] 내 참여 운동 조회 API 구현 (#201)

* feat: 필터 및 정렬 Enum 구현

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 필터 타입에 따른 정렬 로직 구현

* feat: 각 필터별 운동 조회 로직 구현

* feat: 빈 응답 조기 반환 로직 구현

* feat: 반환 로직까지 구현

* [feat/#198] 채팅 도메인 구현 (#203)

* Update issue templates

* [fix] cd 파일명 변경 gradle.yml to cd.yml

* [chore] ci 설정

* [fix] 파일이름 변경 ci to ci.yml

* [feat/#202] 특정 건물의 운동 상세 조회 API 구현 (#204)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 및 리포지토리 로직 구현

* feat: 날짜도 컨버터로 전달

* chore: DTO 네이밍 통일

* feat: 반환 로직 구현

* Update ci.yml

* debug: 충돌 해결 중 빠진 중괄호 추가

* Update ci.yml

* [feat/#205] 월간 운동 건물 지도 데이터 조회 API 구현 (#210)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 날짜 및 위치 정보 생성

* feat: 운동 조회 로직 구현

* feat: 필요없는 모임 조인 제거

* feat: 날짜별 건물 그룹핑 로직 및 반환 로직 추가

* feat: Addr의 위도 및 경도 필드 Float에서 Double로 자료형 변경

* fix: longitude 대신 latitude를 보내고 있던 로직 에러 해결

* feat: 날짜를 입력하지 않으면 오늘을 기본값으로 변경

* docs: 스웨거 수정

* feat: 위도와 경도 입력하지 않을 시 기본값으로 멤버 메인 주소를 사용

* feat: 거리 계산 로직을 위해 멤버 주소 또한 Double로 변경 + 사이드 이펙트 처리

* fix: 생성된 주소값을 반환하도록 변경

* docs: api 경로 변경 및 스웨거 설명 변경

* refactor: 클래스명 및 변수명 명확화

* docs: 스웨거 설명 추가

* [feat/#195] 모임 추천 조회 API 구현 (콕플 추천 / 필터) (#206)

* feat: QueryDSL 사용을 위해 의존성 추가 및 QuerydslConfig 구현

* fix: QueryDSL 추가로 인한 테스트 오류 방지를 위해 테스트용 yml 파일 추가

* feat: 모임 추천 조회 API 필터 요청을 담을 DTO 구현

* feat: 동적쿼리를 위한 리포지토리 추가 및 기존 리포지토리 상속

* feat: 동적쿼리를 처리하는 리포지토리 구현체 구현

* feat: 기존의 모임 추천 조회 컨트롤러에 필터 파라메터 및 정렬 조건 추가

* feat: 모임 추천 조회 서비스의 로직을 상황(콕플추천, 필터)에 따라 해당 로직을 사용하도록 구현

* feat: 동적쿼리가 정렬을 처리할 수 있도록 구현

* fix: record에서 불필요한 @Getter 제거 (에러발생)

* docs: 스웨거 요약문 변경

* fix: 삭제된 모임은 모임 추천 목록에 조회되지 않도록 수정

* refactor: PartyFilterDTO 객체 생성 빌더 패턴으로 리팩토링

* [feat/#120] 카카오 소셜로그인 구현 (#211)

* feat: SecurityConfig 일부 추가

* feat: 순수 회원가입 로직 작성

* feat: jwt 구현 완료

* feat: 카카오 소셜로그인 구현 및 테스트 완료

* fix: 로그인 한 사용자의 id를 가져올 수 있게 컨트롤러 수정

* fix: 테스트코드 삭제

* fix: 리다이렉트 uri 수정

* feat: cors 설정

* refact: 만료기간 상수로 분리

* [feat/#209] 모임 채팅방 목록 조회 API 구현 (#213)

* feat: 모임 채팅방 목록 조회 DTO 구현

* feat: 모임 채팅방 목록 조회 컨버터 구현

* feat: 모임 채팅방 목록 조회 컨트롤러 구현

* feat: 모임 채팅방 목록 조회 서비스 구현

* feat: 모임 채팅방 목록 조회 레포지토리 구현

* fix: 안쓰는 코드 삭제

* feat: 예외처리 구현

* refactor: 페이징 커서 방향 String에서 ENUM으로 교체

* refactor: getter 사용

* [refact/#214] 나이대 변수명 변경 (#219)

* refactor: 나이대 변수명 변경 (Age -> BirthYear)

* fix: SecurityConfig 파일 원복

* [feat/#217] 모임 생성 시 자동으로 모임 채팅방 생성 로직 구현 (#218)

* feat: 모임 생성 시 자동 채팅방 생성 및 모임장 채팅방에 자동 참여 로직 구현

* fix: 쿼리문 레포지토리 위치 수정

* [feat/#215] 모임 채팅방 이름 검색 API 구현 (#216)

* feat: 모임 채팅방 이름 검색 API 구현

* fix: 충돌 해결

* fix: 안 쓰는 임포트 제거

* feat: 모임 채팅방 이름 검색 쿼리 구현

* chore: 로그 추가

* fix: 레포지토리 수정

* [fix/#208] 모임 요청 파라미터 Enum 변환 및 검증 로직 수정  (#223)

* fix: 모임유형 한글로 입력을 받도록 수정

* fix: 활동시간 한글로 입력을 받도록 수정

* fix: 활동요일 한글로 입력을 받도록 수정

* docs: 급수 에러코드 설명문 변경

* feat: 키워드 한글 변환 로직 구현 및 에러코드 추가

* fix: 모임 추천 조회 필터의 입력값을 검증하도록 수정

* refactor: 급수 에러코드 CommonErrorCode 재활용

* [debug#225] 출생년도 비교로 변경 및 관련 필드명 변경

* [feat/#221] 모임 가입 수락 시 채팅방 자동 참여 로직 구현 (#226)

* [fix/#222] notification 테이블에 칼럼 추가 (#233)

* feat: notification 테이블에 칼럼 추가

* fix: memberId 방식 변경

* fix: Security Config 원상복구

* feat: 알림 이미지 전달 구현, key -> url 변환 구현

* feat: 로그인 후 상세정보 받기 구현

* [feat/#227] 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현 (#228)

* feat: 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현

* fix: 메세지 저장 방식 변경

* refactor: 채팅방 퇴장 메서드 추출

* fix: senderName 삭제

* [fix/#230] 모임 이미지 저장 방식 변경 및 imgKey 주소로 변환 (#234)

* fix: 모임 생성 시, imgKey를 전달받도록 변경

* debug: 모임 생성 시 이미지 null값 허용하여 에러 해결

* fix: 정적 팩토리 메서드와 모임 이미지 빌더 imgKey로 변경

* fix: PartyImg에서 imgUrl 필드 제거

* fix: 북마크 컨버터에 변경된 모임 imgUrl 호출 메서드 적용 및 static 제거

* fix: 채팅 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 운동 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 모임 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* refact: imageService 의존성 주입 및 변환 로직을 북마크 서비스로 이전

* refact: imageService 의존성 주입 및 변환 로직을 채팅 서비스로 이전

* refactor: imageService 의존성 주입 및 변환 로직을 모임 서비스로 이전

* [fix/#236] 대회 이미지 저장 방식 변경 (#237)

* fix: 대회 이미지 img_key만 저장하도록 수정

* refactor: 이미지 호출 관련 기존 컨버터에서 하던 로직을 서비스에서 하도록 리팩토링

* refactor: String으로 변결

* fix: 파라미터 조건 추가

* [feat/#192] 새로운 운동 추천 캘린더 조회 API 구현 (#229)

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 멤버 정보 조회 및 기간 계산

* refactor: 기간 계산 로직 DateRange 안의 메서드로 변경

* feat: 콕플 추천 필터링된 운동 조회 로직 구현

* fix: 정렬 로직을 컨버터에서 진행하므로 메서드 제거

* feat: 기본 where절 구현

* refactor: 조인할 예정이므로 exercise.party를 party로 수정

* feat: 필터 where절 구현

* feat: 쿼리 전체 로직 구현

* refactor: 모임 레벨 조인 대신에 Exists절로 변경

* refactor: 콕플 추천 조회 로직 EXISTS절로 급수 비교하도록 변경

* feat: 운동 리포지토리에서 커스텀 인터페이스를 상속받도록 변경

* feat: 동적 쿼리 로직 호출

* feat: 추가 정보 조회 로직 구현

* feat: Response 반환 로직 구현

* feat: 정렬 로직 구현을 위해 정렬 필드도 넘기기

* feat: 주별 그룹화 로직 구현

* feat: 거리 정렬 로직을 위해 필드 추가

* feat: 콕플 추천 정렬 로직 구현

* feat: 필터 정렬 로직 구현

* feat: 데일리 아이템 생성 로직 구현

* feat: 위클리 생성 로직 구현

* fix: Party 필드명 변경에 따른 변경사항 적용

* fix: 나이 대신 생일년도로 비교하도록 변경

* feat: 참여인원이 많은 순으로 정렬을 위해 역방향으로 정렬

* [fix/#235] 운동 도메인에 이미지 로직 변경 적용 (#244)

* feat: 컨버터에 이미지 키 변환 메서드 추가

* fix: 새로운 운동 추천 캘린더 조회 API에 로직 반영

* fix: 운동 추천 조회 API에 로직 반영

* fix: 내 모임 운동 캘린더 조회 API에 로직 반영

* fix: 내 모임 운동 전체 조회 API에 로직 반영

* fix: 내 참여 운동 캘린더 조회 API에 로직 반영

* fix: 건물 운동 상세 조회 API에 로직 반영

* feat: 멤버 이미지 url 받아오는 메서드 추가

* fix: 운동 상세 조회 API에 로직 반영

* [feat/#232] 신규 멤버 추천 API 구현 (#246)

* feat: 추천 멤버 DTO 구현

* feat: 추천 멤버 조회 API 서비스 메서드 추가

* feat: 추천 멤버 조회 API 서비스 컨트롤러 구현

* feat: 추천 멤버 조회 API 커스텀 리포지토리 추가

* refact: 사용자의 id가 필요없기에 제거 및 오타 수정

* feat: 추천 멤버 조회 API 서비스 구현

* feat: 추천 멤버 조회 API 컨버터 구현

* fix: 프로필 이미지 key -> url 변환 로직 구현 및 적용

* feat: 추천 멤버 조회 동적 쿼리 구현

* fix: 검색 조건을 적용하는 경우도 기본적으로 모임 급수로 필터링하도록 수정

* [fix/#239] 로그인 후 상세 정보 받기 API 로직 수정 (#240)

* fix: 일부 로직 에러 수정

* fix: 시큐리티 원래대로

* feat: 찜 개수 제한 관련 로직 추가 (#242)

* [feat/#248] 웹소켓 기본 설정 및 연결 관리 구현 (#249)

* feat: WebSocket 의존성 추가

* feat: WebSocket 설정 구현

* feat: WebSocket 메시지 Enum 구현

* feat: 웹소켓 핸들러 틀 구현

* feat: 웹소켓 연결 완료 후 로직 구현

* feat: 웹소켓 종료 후 로직 구현

* feat: 웹소켓 전송 에러 로직 구현

* [feat/#243] 개인 채팅방 생성 및 참여 API 구현 (#245)

* feat: 개인 채팅방 생성 및 참여 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 및 레포지토리 구현

* fix: 칼럼 수정 및 추가

* chore: 예외처리 추가

* chore: 자동 정렬

* feat: 사용자 이름 바뀌었을때, displayName 동기화 구현

* fix: senderName 삭제

* feat: 개인 채팅방 목록 조회 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 구현

* [feat/#252] 개인 채팅방 이름으로 검색 API 구현 (#254)

* fix: 오타 수정

* feat: 컨트롤러 구현

* feat: 서비스 구현

* feat: 레포지토리 구현

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* [feat/#162] 알림 추가 로직 구현 (#253)

* feat: 알림 추가 로직 구현

* feat: 알림 추가 로직 개발

* fix: bookmark컨트롤러 시큐리티 활성화

* feat: 개수 제한  추가

* feat: title 추가

* [fix/#255] 알림 전체 조회 응답에 data 필드 추가 (#263)

* [feat/#247] 신규 멤버 초대 보내기 API 구현  (#257)

* feat: PartyInvitation 엔티티 구현

* feat: 멤버 초대 보내기 API DTO 구현

* feat: 멤버 초대 보내기 API 서비스 메서드 추가

* feat: 멤버 초대 보내기 API 컨트롤러 구현

* feat: 멤버 초대 보내기 API 서비스 구현

* feat: 멤버 초대 리포지토리 구현

* feat: 대기 중인 초대 검증 에러코드 추가

* feat: 멤버 초대 보내기 API 컨버터 구현

* [feat/#264] 개발자 테스트용 토큰 발급 (#266)

* fix: 운동 도메인 id값 로그인한 사용자 id로 변경 (#268)

* [feat/#262] 모임 초대 처리 API 구현 (#270)

* feat: 모임 초대 처리 API DTO 구현

* feat: 모임 초대 처리 API 서비스 메서드 추가

* feat: 모임 초대 처리 API 컨트롤러 구현

* feat: 모임 초대 처리 API 서비스 구현

* feat: 모임 초대 상태 변경 비즈니스 메서드 구현

* feat: 모임 초대 처리 API 에러코드 추가

* fix: 모임 초대 시 채팅 참여 메서드 추가 및 JoinPartyChatRoom 범용적으로 사용 가능하도록 리팩토링

* [fix] cors 수정

* [fix/#238] 모임 유형을 오후 또는 오전으로 조회 시, 상시도 조회되도록 수정 (#272)

* fix: 모임 유형 오전, 오후 조회 시 상시도 조회되도록 로직 구현

* [fix] cors 수정

* chore: 안 쓰는 import문 제거

* feat: 모임 유형이 오전, 오후인지 체크하는 Utils 클래스 생성

* fix: 모임 유형 오전 or 오후 조회 시 상시도 조회되도록 변경

* refactor: 조건 로직을 Utils 메서드를 사용하도록 변경

---------

Co-authored-by: kanghana1 <qazplm12093@naver.com>
Co-authored-by: dmori <chosehoon2@naver.com>

* [chore/#274] 운동 도메인에서 이미지 url 필드명을 profileImageUrl로 통일 (#275)

* chore: 운동 상세 조회 API에서 필드명 변경

* chore: 운동 추천 조회 API에서 필드명 변경

* chore: 건물 운동 상세 조회 API에서 필드명 변경

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* [refactor/#276] 운동 도메인 커맨드 서비스 분리 (#277)

* refactor: 운동 생성 검증 로직 이동

* refactor: 운동 신청 검증 로직 이동

* refactor: 게스트 초대 로직 검증 이동

* refactor: 운동 참여 취소 로직 검증 이동

* refactor: 게스트 초대 취소 로직 검증 이동

* refactor: 매니저에 의한 운동 참여 취소 로직 검증 이동

* refactor: 운동 삭제 로직 검증 이동

* refactor: 운동 업데이트 로직 검증 이동

* refactor: 운동 신청 메서드 참여 서비스로 이동

* refactor: 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 매니저에 의한 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 게스트 초대 메서드 게스트 서비스로 이동

* refactor: 게스트 초대 취소 메서드 게스트 서비스로 이동

* chore: 커맨드 서비스 이름 생명주기 서비스로 변경

* chore: 메서드 파일 내 순서 변경

* refactor: 운동 생성 로직 CommandService에서 호출하도록 변경

* refactor: 운동 삭제 로직 CommandService에서 호출하도록 변경

* refactor: 운동 업데이트 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 취소 로직 CommandService에서 호출하도록 변경

* refactor: 특정 참여자 운동 취소 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 취소 로직 CommandService에서 호출하도록 변경

* refactor: 패키지 구조 변경

* [feat/#231] 모임 정보 수정 API 구현 (#278)

* feat: 모임 정보 수정 DTO 구현

* feat: 모임 정보 수정 API 서비스 메서드 추가

* feat: 모임 정보 수정 API 컨트롤러 구현

* feat: 모임 정보 수정 API 서비스 구현

* feat: 정보 수정 비즈니스 로직 및 연관관계 편의 메서드 구현

* fix: 모임 정보 수정 DTO 검증 추가

* [feat/#279] 초기 채팅방 조회 API 구현 (#281)

* feat: 컨트롤러 구현

* fix: 메시지 중 이모지는 TEXT로 통합되어서 보내짐, 입장 및 퇴장을 처리하는 SYSTEM 필드로 수정

* feat: DTO 구현(채팅방 정보, 메시지 리스트, 참여자 리스트로 구분)

* chore: 메서드 명 명확화

* feat: 서비스 틀 구현

* feat: 채팅방 및 채팅방 참여 권한 검증

* feat: 채팅방 유형에 따라 가져오는 정보 분기 로직 구현

* refactor: 상대방 조회하는 로직이 N+1 문제를 불러일으키므로 이를 DB 조회 방식으로 해결

* refactor: 조회한 상대방 정보에서 멤버까지 접근하여 이름 필드 사용하도록 변경

* refactor: 모임 프로필 조회 시 N+1 문제가 발생하므로 이를 FETCH JOIN으로 해결

* fix: 잘못된 네이밍 변경

* feat: ChatInfo 생성 로직 구현

* feat: 최신 50개 메시지 조회 로직 구현

* feat: 메시지 정보 생성 로직 구현

* refactor: stream 로직 개선

* fix: 메시지 조회할 때 멤버도 조인하도록 변경

* feat: 메시지 정보 반환 로직 구현

* fix: 채팅방 멤버 조회할 때 멤버와 멤버 프로필까지 조회하도록 변경 + 이름순 정렬

* refactor: stream 로직 메서드 추출

* feat: 멤버 정보 반환 로직 구현

* feat: 마지막 메시지까지 읽음 처리

* feat: Response 반환 로직 구현

* fix: 메서드명 명확화

* chore: 개행 제거

* [debug/#289] 전송 이미지 크기 설정 (#293)

* [feat/#280] 과거 메시지 조회 API 구현 (#282)

* feat: 컨트롤러 구현

* feat: DTO 구현

* fix: Slice로 반환받기 위해 Response 객체 대신 MessageInfo를 직접 반환

* feat: 채팅방 멤버 검증 로직 구현

* feat: 커서 기반 메시지 조회 로직 구현

* fix: Transactional 어노테이션 잘못된 import 정정

* refactor: 정렬 로직이 필요없으므로 Pageable 대신 필요한 필드만 사용하도록 변경 + List로 반환

* feat: hasNext 판별 로직 구현

* feat: 오래된 순으로 조회했으므로 다시 반전

* feat: 메시지 정보 반환 로직 구현

* feat: 다음 커서 반환 로직 구현

* feat: 응답 반환 로직 구현

* fix: JPQL에서는 LIMIT를 지원하지 않으므로 Pageable로 데이터 크기 제한

* [feat/#256] 모임 채팅방 목록 조회 slice 기반 무한스크롤 구현 (#261)

* [fix/#291] 모임 id값 로그인한 사용자 id로 변경

* [fix/#294] 초대 알림 추가시 invitationId 넘겨주기 (#295)

* fix: 이미지 요청 크기 늘리기

* fix: data필드에 invitationId 추가

* [feat/#260] 모임 관련 알림 생성 로직 추가 (#290)

* feat: 모임 관련 알림 생성 로직 추가

* fix: INVITE일 경우, invitationId도 알림생성요청 dto에 포함

* debug: 에러 코드 변경

* [feat/#250] 메시지 전송 기능 구현 (#259)

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* debug: rebase 과정 중 빌드 에러 해결

* fix: 채팅룸 네임 필드 삭제 (#304)

* [fix/#302] 하드코딩->로그인 아이디로 변경 (#303)

* fix: AWS 배포 과정에서 gradle 의존성 캐싱하도록 변경

* [feat/#283] 모임 채팅방 나가고 들어올 때 시스템 메시지 보내는 로직 구현 (#308)

* feat: 모임 입출입 ENUM 구현

* feat: 모임 입출입 이벤트 구현

* feat: 모임 입출입 이벤트 리스너 구현

* fix: 메시지 타입 중 이미지 제거

* feat: 이벤트 리스너에서 웹소켓 서비스를 호출하여 시스템 메시지 전송 로직 시작

* chore: 패키지명 변경

* feat: 핸들러와 서비스의 순환 참조 방지를 위해 시스템메시지 이벤트 구현

* fix: 웹소켓 서비스에서 시스템 메시지 이벤트 발행

* feat: 시스템 메시지 이벤트 리스너 구현 - 브로드캐스트 진행

* feat: 모임 채팅방 참여 이벤트 발행

* feat: 모임 채팅방 퇴장 이벤트 발행

* feat: Async 어노테이션 활성화를 위해 Config 구현

* chore: WebSockeetMessageDTO 객체 위치 변경

* refactor: 웹 소켓 연결도 enum값으로 처리하도록 변경

* refactor: 브로드캐스트 서비스 분리(1) - 웹소켓 연결

* refactor: 브로드캐스트 서비스 분리(2) - 웹소켓 종료

* refactor: 브로드캐스트 서비스 분리(3) - 브로드캐스트

* refactor: 테스트 메서드 이동

* refactor: 채팅방 멤버 변경 이벤트 발행

* fix: 모임에서 나가고 들어오는 것과 채팅방 나가고 들어오는 걸 하나의 트랜잭션에서 처리

* fix: 채팅방 나가고 들어오는 이벤트 리스너 구현

* feat: 채팅방 나가고 들어오는 로직 및 메시지 전송 로직 ChatRoomService에 구현

* fix: 필요없는 메서드들 제거

* fix: 세션 추가 메서드 네이밍 명확화

* fix: 웹소켓 핸들러만 테스트하도록 변경

* refactor: 시스템 메시지 보내는 로직을 웹소켓 서비스로 이동

* fix: 핸들러 테스트 제외하고 포스트맨으로 테스트하도록 변경

* refactor: 웹소켓 서비스에서 브로드캐스트 로직 처리하도록 변경

* [feat/#284] 개인 채팅 slice기반 목록 조회 구현 (#309)

* [feat/#305] redis 기본 설정 추가 및 도입 (#313)

* debug: 임시로 웹소켓 경로 허용 (#316)

* [feat/#265] 채팅방 구독 로직 구현 (#314)

* feat: 채팅방 구독 로직 틀 구현

* chore: 브로드캐스트 서비스 구독 서비스로 이름 변경

* feat: 채팅 메시지 전송 이벤트 구현

* refactor: 메시지 전송을 이벤트 발행으로 처리하도록 변경

* feat: 채팅 구독 이벤트 레코드 구현

* refactor: 채팅방 멤버 전체 브로드캐스트 대신 구독자만 브로드캐스트 하기 위해 구독 관리 방식 변경

* refactor: 네트워크 I/O는 성능에 별로 영향을 주지 않으므로 for문으로 변경

* fix: 실패한 사용자 처리 로직 구현

* fix: 구독 로직을 ChatWebSocketService 대신 SubscriptionService에서 진행

* feat: 구독 반환 DTO 구현

* feat: 구독 이벤트 발행 로직 및 성공 메시지 반환 로직 구현

* feat: 구독 이벤트 리스너 구현

* feat: 발신자 제외 브로드캐스트 기능 추가 - 자기 메시지 중복 수신 방지

* fix: 웹소켓 연결 시 멤버 이름 설정 안하는 에러 해결

* [feat/#306] JWT를 활용해 웹소켓 연결 인증 단계 구현 (#317)

* feat: HandShakeInterceptor 구현체 틀 구현

* feat: 에러 처리 로직 틀 구현

* feat: URL에서 JWT 토큰 추출

* feat: 멤버 id를 jwt에서 추출하여 세션에 넣어두기

* feat: 인터셉터 단계 추가하고 프론트 url만 허용하도록 변경

* develop 브랜치와 충돌 해결

* [feat/#287] 다운로드 토큰 발급 구현 (#310)

* feat: DownloadToken 엔티티 구현

* feat: 다운로드 토큰 발급 DTO 구현

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* feat: 다운로드 토큰 발급 API 컨트롤러 구현

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* ChatMessageFile 엔티티 구현

* feat: 다운로드 토큰 발급 API 서비스 구현

* feat: DownloadToken 정적 팩토리 메서드 구현

* feat: 다운로드 토큰 발급 API 리포지토리 추가

* feat: 다운로드 토큰 발급 API 에러코드 추가

* feat: 다운로드 토큰 발급 API 컨버터 구현

* feat: 양방향 연결을 위해 chatMessageFile 필드 추가

* [feat/#288] 파일 다운로드 구현 (#318)

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* feat: 채팅 파일 다운로드 API 서비스 메서드 추가

* feat: 채팅 파일 다운로드 API 컨트롤러 구현

* feat: 채팅 파일 다운로드 API 서비스 구현

* feat: 채팅 파일 다운로드 API 에러코드 추가

* feat: 채팅 파일 다운로드 API 리포지토리 메서드 추가

* feat: 이미지 서비스에 파일 다운로드 메서드 구현

* fix: 토큰 유효시간 3분으로 수정

* fix: cors 프론트엔드 url 반영

* [feat/#319] 개발자용 토큰 발급 API(다른 사용자) 구현 (#320)

* feat: 컨트롤러 구현

* feat: 메서드 구현

* feat: 다른 사용자 개발자 토큰 발급도 스프링 시큐리티에서 허용하도록 변경

* [fix/#324] 모임 주소 중복 유니크 제약조건 추가 (#325)

fix: 모임 주소 중복 유니크 제약조건 추가

* [feat/#300] 채팅방 구독 해제 로직 (#321)

* feat: 구독 해제 핸들러 구현

* feat: 구독해제 이벤트 생성 메서드 구현

* feat: 이벤트 리스너 로직 구현

* feat: 구독 해제 로직 구현

* [feat/#311] 파일 다운로드 리팩토링 / 파일 업로드 API 구현 (#323)

* bug: 잘못된 다운로드 토큰 url 생성 로직 수정

* fix: Pre-signed URL로 임시 마스터키 발급

* refact: 직접 s3 object를 가져오도록 리팩토링하여 성능항샹 및 문제 해결

* refact: 파일 업로드에서도 통일된 enum타입을 사용하기 위해 ImgType -> DomainType으로 명칭 변경

* feat: 파일 업로드 API 컨트롤러 구현

* feat: 파일 업로드 API 서비스 구현

* refact: enum에 해당 도메인 경로 저장하도록 리팩토링

* refact: 중복 로직을 공통 메서드로 구현 및 파일/이미지 업로드하는 uploadToS3 메서드 구현

* refact: 불필요한 extractKeyFromUrl 메서드 제거

* refact: UploadDTO 형식 통일

* [feat/#322] 탈퇴 회원 시큐리티 필터에서 검증 (#327)

* feat: 탈퇴 회원 시큐리티 필터에서 검증

* fix: 에러메시지  수정

* [feat/#328]  JWT null인 경우 예외처리 (#329)

* [feat/#296] 키워드 추가 API 구현 (#330)

* feat: 키워드 추가 API DTO 구현

* feat: 키워드 추가 API 서비스 메서드 추가

* feat: 키워드 추가 API 컨트롤러 구현

* feat: 키워드 추가 API 서비스 구현

* feat: 키워드 추가 검증 에러코드 추가

* feat: 키워드 추가 API 리포지토리 구현

* [feat/#335] 키워드 삭제 API 구현 (#336)

* feat: 키워드 삭제 API 컨트롤러 구현

* feat: 키워드 삭제 API 서비스 메서드 추가 및 서비스 구현

* feat: 키워드 삭제 비즈니스 로직 구현

* feat: 키워드 삭제 에러코드 추가

* feat: 키워드 삭제 API 리포지토리 구현

* [feat/#301] 채팅방 자동 읽음 로직 구현 (#331)

* feat: 핸들러 구현

* feat: 웹소켓 Request DTO에 마지막으로 읽은 메시지 ID 넣기

* feat: 채팅 메시지 읽기 이벤트 구현

* refactor: 이벤트 트랜잭션 최적화

* feat: 이벤트 리스너 구현

* feat: 마지막으로 읽은 메시지 업데이트

* feat: 브로드캐스트할 읽음 반환 레코드 구현

* feat: 브로드캐스트할 메시지 생성 로직 구현 및 브로드캐스트 호출

* fix: 브로드캐스트 메시지 변수명 변경

* refactor: 브로드캐스트 오버로딩을 위해 Sealed 인터페이스 구현

* feat: 읽음 메시지 브로드캐스트 로직 구현

* refactor: 메시지 브로드캐스트 메서드명 변경

* fix: 필드명 통일

* debug: 메시지 업데이트 쿼리 에러 해결

* fix: 읽음 메시지 브로드캐스트 할 때 마지막으로 읽은 메시지 정보 반환하지 않도록 변경

* fix: 구독된 채팅방 자동읽음 처리를 위해 기존 로직 전부 삭제

* feat: 메시지 자동 읽음 이벤트 로직 구현

* feat: 읽음 처리 로직 구현

* fix: 사용하지 않도록 변경한 메서드 제거

* debug: LEFT JOIN으로 개인 채팅 조회 안 되는 에러 해결 (#338)

* [fix/#297] 여복인 경우 MaleLevel 추가 불가능하도록 수정 (#340)

* fix: 여복인 경우, 남자 급수를 방지하는 검증 로직 추가

* feat: 에러코드 추가

* [fix/#326] 특정 지역으로 조회 시, addr2가 전체인 모임도 조회되도록 수정 (#341)

* [fix/#334] 개인 채팅에서 처음 메시지 보내면 채팅방 초대 로직으로 변경 (#342)

* feat: 채팅방 멤버 엔티티에 상태 추가

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* refactor: 모임 채팅방 생성 로직 채팅 도메인으로 이동

* refactor: 채팅방 생성 + 자동 참여 로직 엔티티 메서드로 리팩터링

* refactor: 모임 채팅방 자동 참여 시 null인지 체크하도록 검증 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 모임 채팅방 생성 메서드명 명확화

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* refactor: 멤버 조회 메서드 네이밍 명확화

* fix: 채팅방 멤버 나는 참가 상태로, 상대방은 대기 상태로 생성

* fix: 개인 채팅방 목록 조회 및 검색 시 JOINED 상태인 경우만 조회하도록 변경

* feat: 개인 채팅방에서 첫 메시지 전송일경우 상대방도 초대하도록 변경

* fix: @Builder.Default 어노테이션으로 일대다 필드를 생성하지 않아도 기본값으로 생성하도록 변경

* docs: 개인 채팅방 생성 및 참여 api 설명 명확화

* chore: api 클래스 내 순서 변경

* refactor: /chats는 RequestMapping으로 처리

* [fix/#345] 급수 조건이 맞지 않더라도 모임의 멤버가 될 수 있도록 수정 (#346)

* fix: 모임 가입신청 시, 급수 조건에 적합한지 검증하는 로직 제거

* refact: 기존 나이대 조건, 성별 조건 검증 메서드를 모임 생성에도 활용할 수 있도록 리팩토링

* fix: 운동 신청 시 급수 조건 검증 로직 주석처리 (#349)

* fix: 임시 url -> 실제 메달 이미지 url (#351)

* [feat/#355] 운동 수정을 위한 조회 API 구현 (#356)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 구현

* feat: 컨버터 구현

* docs: 조회 조건 삭제

* fix: 모임 운동 캘린더 조회 API에서 운동 참여 여부도 반환하도록 변경 (#354)

* [feat/#350] 모임 id로 roomid 조회 API 구현 (#352)

* feat: 채팅방 id 조회 API DTO 추가

* feat: 채팅방 id 조회 API 컨트롤러 구현

* feat: 채팅방 id 조회 API 서비스 구현

* feat: 채팅방 id 조회 API 컨버터 구현

* feat: 멤버 검증을 위한 리포지토리 메서드 추가

* feat: 채팅방 id 조회 API 에러코드 추가

* docs: README 작성 (#358)

* [fix/#361] 모임 관련 검증 수정사항 반영 (#363)

* fix: 가입신청 처리 시, 이미 멤버인지 검증 로직 추가

* fix: 모임 생성 시, 급수 조건에 적합한지 검증하는 로직 제거

* [fix/#362] 현재 (목록/개인) 채팅방 목록 조회 및 검색 API에서 채팅방이 없을 때 에러 던지는 걸 빈 배열 던지는 걸로 반환 (#364)

* fix: 모임 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* fix: 개인 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* debug: 웹소켓 설정에서 프론트 배포 주소 CORS 허용 (#360)

* [fix/#332] 채팅 메시지 조회할 때 읽지않은 멤버 수도 반환하도록 변경 (#344)

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* feat: 메시지 읽음 상태 엔티티 구현

* feat: 채팅 보낼 시 채팅방 읽음 상태 생성 후 저장

* feat: 채팅 구독자들 메시지 읽음으로 변경

* feat: 마지막으로 읽은 메시지 id도 업데이트 하도록 구현

* refactor: 채팅방 목록 조회 시 안 읽은 메시지 카운트를 메시지 읽음 상태 테이블에서 조회하도록 리팩터링

* feat: 브로드캐스트 할 DTO에 안 읽은 멤버 필드 추가

* feat: 메시지 보낼 때 지금 구독자 수 체크하는 메서드 구현

* feat: 구독자들 읽음 상태로 변경 및 안읽은 메시지 수 반환하기

* feat: 안 읽은 사람 수도 반환하도록 변경

* refactor: 이벤트 구조로 처리하는 대신 활성 구독자 수 체크하며 한 번에 읽음 상태 업데이트

* feat: 구독 시 메시지마다 안 읽은 수 업데이트 정보 틀 구현

* feat: 안 읽은 메시지 id 리스트 조회

* feat: 안 읽은 메시지가 없을 때 로직 구현

* feat: 메시지마다 안 읽은 사람 수 카운트 로직 구현

* feat: 채팅방 구독할 때 마지막 메시지 업데이트 하도록 변경

* feat: 구독 시 메시지 업데이트 브로드캐스트 로직 구현

* debug: Long으로 반환하기 위해 Query문 사용

* chore: 사용하지 않는 메서드 정리

* feat: 구독하는 사람은 업데이트 메시지 받지 않도록 변경

* [debug/#365] 잘못된 사용자id를 넘겨주어 생기던 로직 오류 해결 (#366)

* [docs] 리드미 약간 수정

* [feat/#367] 채팅 보낼 때 이미지와 파일도 같이 보낼 수 있도록 로직 추가 (#373)

* fix: 메시지 전송 시 파일과 이미지들도 보낼 수 있도록 DTO 필드 추가

* fix: 이벤트 생성 시 파일과 이미지들도 보내도록 변경

* chore: 사용하지 않는 서비스 제거

* fix: 리스너와 서비스에서 파일과 이미지들 받도록 변경

* refactor: dirty checking으로 불필요한 저장 로직 제거

* feat: 메시지 저장할 때 이미지와 파일도 저장

* refactor: 브로드캐스트 응답과 분리하기 위해 중첩 record로 변경

* fix: 브로드캐스트 할 때 파일 정보와 이미지 정보를 담을 DTO 구현

* feat: 브로드캐스트할 파일 및 이미지 DTO 생성 로직 구현

* feat: 브로드캐스트 DTO에 누락된 필드 추가

* fix: 브로드캐스트 DTO 생성 로직에 이미지와 파일 필드 추가

* fix: 채팅 이미지 엔티티 다운로드를 위해 수정

* fix: 채팅 이미지 Request 필드 수정

* fix: 채팅 이미지 생성 필드 수정

* fix: 내용, 이미지, 파일 모두 없을경우 에러를 던지도록 변경

* fix: 일대다 매핑에서 Builder.Default 추가

* chore: 필요없는 엔터 제거

* [feat/#370] 이미지 다운로드 API 구현  (#371)

* fix: ChatMessageImg 수정

* feat: 채팅 이미지 다운로드 API 서비스 추가

* feat: 채팅 이미지 다운로드 API 서비스 구현

* debug: 오타 수정

* fix: 파일 업로드 시에도 파일 이름, 크기, 타입을 반환하도록 수정

* [fix/#339] 급수 검색에서 포함된 글자만으로도 조회되도록 수정 (#374)

* fix: 급수 검색에서 포함된 글자만으로도 조회되도록 수정

* [fix/#375] 모임 상세 조회 응답 필드 추가 (#377)

* fix: 모임 상세정보 DTO에 필드 추가

* feat: 대기중인 가입신청 여부를 확인하는 비즈니스 로직 구현

* feat: 수정사항 반영하여 컨버터에 추가

* debug: 운동 상세 조회 API에서 멤버 ID값이 아닌 멤버 운동 참여 ID값을 반환하던 로직 에러 해결 (#381)

* debug: CD 최신 이미지 반영 문제 해결 (#383)

* debug: 남아있는 컨테이너 강제 제거하는 스크립트 추가 (#384)

* [fix/#385] 채팅방 목록에서 마지막 메시지 표시 로직 개선 (#386)

* feat: 엔티티에 마지막 메시지 내용 반환하는 메서드 구현

* fix: content대신 마지막 메시지 내용 반환 메서드 사용

* [fix/#388] 키워드 추가를 다중 선택이 가능하도록 수정 (#389)

* fix: 키워드 추가 DTO 리스트로 수정

* fix: 키워드 추가 API 수정 및 연관관계 편의 메서드 추가

* fix: 키워드 삭제 및 사용하지 않는 에러코드 제거

* debug: content가 비어있을 때 hasContent가 true가 되는 에러 해결 (#391)

* [fix/#392] 모임 목록 조회 시, 응답에 찜 여부 추가 (#394)

* fix: 찜 여부를 모임 목록, 모임 상세 조회 DTO에 추가

* fix: 서비스 메서드에 북마크 여부를 확인하는 로직 추가

* fix: 찜한 모임들의 ID을 조회하는 메서드 리포지토리에 추가

* fix: 찜 여부 필드 컨버터에 추가

* [fix/#379] 프로필 이미지 관련 오류 수정 (#393)

* [feat/#372] WebSocket 요청마다 에러를 반환하도록 개선 (#395)

* feat: 구독 시 에러 메시지 반환을 위해 메서드 분리

* feat: 구독 해제 시 에러 메시지 반환을 위해 메서드 분리

* feat: 메시지 전송 시 에러 메시지 반환을 위해 메서드 분리

* fix: 에러 메시지 전송할 때 채팅방 ID 반환 로직 제거

* refactor: 메시지 전송 시 즉시 검증으로 리팩토링

* feat: 구독 및 구독 해제 검증 로직 구현

* refactor: 같은 의미를 담고 있는 에러 코드 통합

* fix: 에러 응답에 채팅방 id 미포함으로 변경

* fix: 에러 응답시 메시지 제대로 포함되도록 변경

* refactor: 웹소켓 연결 성공 시 멤버 정보 조회 메서드를 멤버 쿼리 서비스로 이동

* refactor: 웹소켓 서비스 네이밍 내부 코드에 따라 채팅 송신 서비스로 명확화

* refactor: 웹소켓 서비스들 패키지 분리

* refactor: 웹소켓 메세지 응답 로직 별도 서비스로 분리

* chore: import문 및 코드 스타일 정리

* [fix/#379] 프로필 사진 수정 오류 (#396)

* [fix/#398] 토큰 재발급 경로 permitAll 처리 (#399)

* fix: 토큰 재발급 경로 permitAll 처리

* fix: 리프레시토큰 null 예외처리

* fix: 리프레시토큰 null 예외처리

* [feat/#400] 채팅 메시지에서 이모티콘과 일반 이미지 구분 기능 구현 (#402)

* feat: 채팅 메시지 이미지 엔티티에서 이모티콘 여부 필드 추가

* feat: 초기 채팅방 조회 API에서 이미지 필드 List를 이미지 객체로 변환

* refactor: 이미지 정보와 멤버 정보 공통 DTO로 분리 -> 추후 같은 기능을 하는 메서드를 합치기 위함

* refactor: 메시지 조회 로직에서 중복된 코드를 CommonDTO를 활용해 제거

* refactor: 컨버터 로직 구현

* refactor: 메시지 보낼 때도 이모지 필드 반환하도록 변경
…
kanghana1 added a commit that referenced this pull request Nov 1, 2025
* [Feat/#44] 대회 기록 삭제 API 구현 (#45)

* feat: 대회 기록 삭제 DTO, command

* feat: 대회 기록 삭제 컨트롤러, 컨버터 구현

* feat: 대회 기록 삭제 서비스 구현

* refactor: 본인 대회 확인 파생 쿼리 메서드

* refactor: member와 contest 양방향 매핑

* fit: 서비스 수정

* [feat/#51] 특정 회원 운동 취소 API 구현 (#52)

* feat: 컨트롤러 구현

* feat: requestDTO 구현, responseDTO는 기존의 CancelResponseDTO 사용

* feat: 검증 로직 구현

* feat: 참가자가 멤버일 때 참여 취소 로직 구현

* feat: 참가자가 게스트일 때 참여 취소 로직 구현

* feat: 에러 코드 구현

* refactor: 분기 로직 별도 메서드로 분리

* [feat/#46] 내 대회 기록 상세조회 API 구현 (#54)

* feat: 내 대회 기록 상세 조회 응답 DTO 구현

* feat: 내 대회 기록 상세 조회 컨버터 구현

* feat: 내 대회 기록 상세 조회 컨트롤러 구현

* feat: 내 대회 기록 상세 조회 서비스 구현

* refator: 이미지, 동영상 순서 정렬 기능 추가

* [feat/#55] 내 대회 기록 리스트 조회 (전체, 미입상) API 구현 (#58)

* refator: 미입상 NONE 추가

* feat: 내 대회 기록 심플 조회 응답 DTO 구현

* refator: GET 메서드 queryService로 옮기기

* feat: 내 대회 기록 심플 조회, 리스트로 변환 컨버터 구현

* feat: 내 대회 기록 리스트 조회 컨트롤러 구현

* feat: 내 대회 기록 리스트 조회(전체, 미입상) 서비스 구현

* refactor: 내 대회 기록 리스트 조회(전체, 미입상) 하나의 API로 수정

* fix: static 삭제

* refactor: 메서드 인라인

* chore: 주석

* chore: yml 고치기 (#63)

* [feat/#57] 운동 삭제 API 구현 (#60)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* feat: 멤버 권한 검증 로직 구현

* chore: Party 엔티티에서 운동 생성 메서드 위치 변경

* feat: 운동 삭제 로직 구현

* feat: 반환 로직 구현

* [feat/#43] 운동 게스트 삭제 API 구현 (#56)

* feat: 컨트롤러 구현

* feat: 검증 로직 구현

* feat: 게스트 삭제 로직 구현

* feat: 에러 코드 구현

* feat: 운동 시작 여부 검증 로직 추가

* [refactor/#61] 운동 참여자 수 계산 로직 수동 증가에서 사이즈 계산으로 변경 (#65)

* refactor: nowCapacity 필드 제거

* refactor: nowCapacity 필드 사용 메서드 수정

* refactor: 현재 인원 반환 메서드 추가

* refactor: 람다식 메서드 참조로 변경

* refactor: 다음 순번 계산 메서드 추가

* [feat/#34] 모임 가입 신청 멤버 조회 API 구현 (#68)

* refactor: 용어 혼용 방지를 위해 모임 가입신청 생성 API의 DTO 명칭 변경

* feat:모임 가입신청 조회 DTO 구현

* feat: 모임 가입신청 조회 서비스 인터페이스 추가

* feat: 모임 가입신청 조회 API 컨트롤러 구현

* feat: 모임 가입신청 리포지토리에 조회 메서드 추가

* feat: 모임 가입신청 조회 서비스 구현

* feat: 권한 없음 에러 코드 추가

* feat: 모임 가입신청 조회 API 컨버터 구현

* refactor: PartyJoinRequest를 BaseEntity에 상속받도록 수정

* feat: Member와 프로필 이미지 양방향 관계 설정

* refactor: 테스트 진행을 위해 memberId 임시값 변경

* feat: 모임 가입신청 목록을 최신순으로 정렬하도록 기본값 추가

* [feat/#59] 내 대회 메달 조회 API 구현 (#67)

* feat: 내 메달 개수 조회 응답 DTO 구현

* feat: 쿼리 메서드 구현

* feat: 메달 개수 조회 컨버터, 컨트롤러 구현

* feat: 메달 개수 조회 서비스 구현

* chore: log.info() 추가

* [feat/#70] 다른 회원의 대회 기록 상세조회 API 구현 (#71)

* feat: 다른 사람의 대회 기록 상세조회 응답 DTO 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 컨버터 구현

* feat: 다른 사람의 대회 기록 상세조회 컨트롤러 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 서비스 구현

* [feat/#73] 다른 회원의 대회 기록 리스트 (전체, 미입상) API 구현 (#74)

* feat: 다른 사람의 대회 기록 리스트 조회 API 컨트롤러 구현

* refactor: {내/다른 사람}의 대회 기록 리스트 조회 통합 서비스 구현

* chore: 주석 수정

* [feat/#75] 다른 회원의 대회 메달 조회 API 구현 (#76)

* chore: 주석 수정

* feat: 다른 사람의 대회 메달 개수 조회 API 컨트롤러 구현

* [feat/#66] 운동 수정 API 구현 (#69)

* feat: 컨트롤러 구현

* feat: 모임장 운동 취소 API에서 누락된 @Valid 어노테이션 추가

* feat: DTO 구현

* feat: 검증 로직 구현

* feat: dto 접근을 위한 command 패턴 도입

* feat: 운동 정보 수정 로직 구현

* feat: 운동 주소 정보 수정 로직 구현

* feat: 저장 및 반환 로직 구현

* feat: 에러 코드 정의

* fix: 컨트롤러 url 오타 수정

* feat: requestDTO 필드 수정

* [feat/#53] 모임 가입신청 처리 API 구현 (#77)

* feat: 승인 요청에 대한 응답을 담는 enum 추가 (RequestAction)

* feat: 모임 가입신청 처리 요청 DTO 구현

* feat: 모임 서비스 인터페이스에 가입신청 처리 메서드 추가

* feat: 모임 가입신청 처리 API 컨트롤러 구현

* feat: 모임 가입신청 처리 API 서비스 구현

* feat: 가입신청 처리를 위한 정적 팩토리 메서드 및 비즈니스 메서드 구현

* feat: 모임 가입신청 처리 API 에러 코드 추가

* fix: 스웨거 설명문 추가 및 오류 수정

* refactor: 사용하지않는 import 정리

* refactor: orderType 필드 제거

* refactor: 양방향 연결을 위해 member에 연관 관계 편의 메서드 추가

* [feat/#72] 프로필 수정 기능 구현 (#79)

* feat: 프로필 수정 기능 구현

* feat: 프로필 사진 재생성 관련 에러 처리

* chore: 스웨거 설명 수정

* refact: dto 클래스 -> record 변환

* [refactor/#81] 운동 DTO에 중첩 record 적용 (#82)

* chore: pull 관련 임시 에러처리

* refactor: 운동 생성 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 API에서 중첩 record 패턴 적용

* refactor: 운동 게스트 초대 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 취소 API에서 중첩 record 패턴 적용

* refactor: 게스트 초대 취소 API에서 중첩 record 패턴 적용

* docs: 게스트 초대 취소 API 로그 수정

* refactor: 특정 참여자 운동 취소 API에서 중첩 record 패턴 적용

* refactor: 운동 삭제 API에서 중첩 record 패턴 적용

* refactor: 운동 수정 API에서 중첩 record 패턴 적용

* [feat/#80] 회원주소 추가 API 구현 (#83)

* feat: 회원주소 추가 API 구현

* feat: 주소 개수 예외처리 추가

* [refactor/#84] 이미지 업로드 방식 변경 (#85)

* refactor: dto 어노테이션 수정

* [refactor/#88] 메달 도메인 DTO에 중첩 record 패턴 도입 (#90)

* [feat/#86] 대표 주소 변경API 구현 (#87)

* [feat/#94] 회원 주소 삭제 API 구현 (#97)

* [refactor/#98] 주소 추가 로직 수정 (#99)

* [feat/#100] 회원 탈퇴 기능 구현 (#101)

* [refactor/#89] 모임 생성 API 이미지 업로드 방식 변경 (#91)

refactor: 모임 생성 API 이미지 업로드 방식 변경

* [refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)

* refactor: 모임 도메인 DTO에 중첩 record 패턴 도입

* refactor: DTO 명칭 변경 및 임포트 정리

* [fix/#107] 병합 오류 해결 (#108)

* Revert "[refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)"

This reverts commit feaa902.

* fix: 병합 오류 해결 완료

* refactor: MemberExercise와 Guest에서 participantNum 필드 제거 (#105)

* [refactor/#109] 모임 생성 API 에러 처리 추가 (#112)

* feat: 모임 생성 DTO에 에러 처리 및 ENUM 변환 메서드 구현

* feat: 입력값 에러 코드 추가

* refactor: 에러 처리 관련 코드 수정

* [feat/#103] 운동 신청 API에서 검증 로직 추가 (#106)

* feat: 운동 급수 검증 로직 추가

* feat: 에러 코드 추가

* docs: Swagger docs에 급수 위반 추가

* refactor: Exercise와 연관된 엔티티들 fetch join으로 불러오기(N+1) 방지

* feat: 나이 계산 메서드 추가

* feat: 나이 검증 로직 추가

* feat: 에러 코드 추가

* refactor: 급수 및 나이 검증 로직 4XX 비즈니스 에러로 변경

* [feat/#95] 프로필 조회 관련 API 구현 (#118)

* feat: 다른 유저 프로필 조회

* chore: API URL 수정

* feat: 내 프로필 조회 API 구현

* chore: 컨트롤러 메서드 이름 수정

* [feat/#110] 모임 신청 API 검증 로직 추가 구현 (#117)

* feat: 모임 신청자가 모임의 급수 조건에 적합한지 검증하는 로직 구현

* feat: 급수 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 유형에 맞는 성별인지 검증하는 로직 구현

* feat: 모임유형의 성별 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 나이대에 적합한지 검증하는 로직 구현

* feat: 나이 조건 검증 에러 코드 추가

* [Feat/#96] 회원 주소 조회 관련 API 구현 (#119)

* refact: 대표주소 추출 메소드 분리

* feat: 내 현재 위치 조회 API 구현

* chore: 건물명 null여부 관련 수정

* chore: 프로필 조회시 건물명, 도로명 추가

* feat: 회원의 등록 주소 전체 조회

* feat: 대표 주소가 위로 올라오도록 기능 추가

* [feat/#113] 모임 생성 API 검증 로직 추가 구현 (#121)

* feat: 모임 생성자의 성별을 검증하는 로직 구현

* feat: 모임 생성자의 나이를 검증하는 로직 구현

* feat: 모임 생성자의 급수를 검증하는 로직 구현

* feat: 빈 리스트 방지를 위해 @notempty로 변경

* feat: 혼복인 경우, 남성의 급수가 빈 리스트로 입력되는 것을 방지하기 위한 로직 구현

* refactor: 문자열 입력값 검증 @notblank로 변경

* [feat/#123] 운동 멤버십 구분 기능 추가 (#126)

* feat: 운동 참여 멤버쉽 enum 추가

* refactor: 운동 정렬 enum 제거 및 필드 제거

* feat: 운동 신청 시 운동 멤버십 결정 로직 구현

* feat: 게스트 엔티티는 따로 필드 없이 GUEST를 반환하는 로직으로 구현

* refactor: MemberExercise joinedAt 필드 제거에 따라 createdAt을 반환하도록 변경

* fix: ExerciseBookmark 엔티티에서 잘못 삭제한 필드 복구

* fix: 운동 신청 시 운동 신청 엔티티 생성 시점 반환으로 로직 에러 수정

* [feat/#124] 모임 가입 승인 멤버 조회 API 구현 (#127)

* refactor: PartyJoinDTO에 생성일자 추가

* feat: status(상태) 파라메터에 추가

* refactor: 컨버터에 updatedAt 추가

* fix: record의 request 오류 @Schema로 해결

* feat: PENDING인 경우, uppdateAt에 null값을 넣고 DTO에서 생략되도록 구현

* feat: 상태 에러 코드 추가 및 유효성 검증 구현

* [feat/#78] 운동 상세 조회 API 구현 (#128)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 쿼리 서비스 틀 구현

* feat: 기본 검증 구현

* feat: 파티 내 위치 체크

* feat: 멤버 참가자 호출 로직 구현

* refactor: 외부 참여자 ENUM값 변경

* refactor: 메서드명 더 명확하게 변경

* feat: 게스트 참가자 호출 로직 구현, 배치 쿼리로 최적화

* feat: 정렬을 위해 Info record에 joinedAt 컬럼 추가

* feat: 운동 기본 정보 로직 구현

* feat: 참여자, 대기자 그룹의 참여자 정보 반환 타입 List로 변경

* feat: 전체 참여자를 참여자와 대기자로 구분하는 로직 구현

* feat: 그룹 정보 로직 구현

* feat: 반환 로직 구현

* fix: ENUM 값 변경에 따라 사용처도 변경

* [feat/#122] 모임 상세 조회 API 구현 (#129)

* feat: 모임 상세조회 DTO 구현

* feat: 모임 상세조회 인터페이스에 메서드 추가

* feat:모임 상세조회 컨트롤러 메서드 구현

* feat: 모임 상세조회 API 서비스 구현

* feat: 모임 상세 조회 API 컨버터 구현

* refactor: partyDetailDTO record 하나로 통일

* feat: ENUM에 한글 추가 및 getter 추가

* refactor: 급수를 리스트 형식으로 반환하도록 수정

* feat: 컨트롤러에 @apiresponse 추가

* [feat/#131] 내 모임 조회 (간략화) API 구현 (#134)

* feat: 내 모임 간략화 조회 DTO 구현

* feat: 내 모임 간략화 조회 서비스 메서드 추가

* feat: 모임 간략화 조회 컨트롤러 메서드 구현

* feat: 내 모임 간략화 조회 서비스 구현

* feat: 내 모임 조회 리포지토리 메서드 구현

* feat: 내 모임 간략화 조회 컨버터 구현

* refactor: 서비스에 로그 출력문 추가

* [feat/#132] 내가 초대한 운동 게스트 조회 API 구현 (#133)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 대기 상태 구분을 위해 isWating 필드 추가

* feat: 내가 초대한 게스트 목록 조회

* feat: 전체 참가자 목록 조회

* refactor: 운동 조회할 때 모임 정보와 함께 조회하도록 변경

* feat: 게스트 번호와 참여 여부 추출

* feat: 게스트 번호와 참여여부 record DTO로 이동 및 통계 record 추가

* feat: 통계 계산 로직 구현 및 반환 로직 구현

* docs: Swagger 성공 응답 설명 수정

* [feat/#130] 내 모임 조회 API 구현 (#135)

* feat: 내 모임 조회 DTO 구현

* feat: 내 모임 조회 서비스 메서드 추가

* feat: 내 모임 조회 컨트롤러 구현 및 정렬 로직 처리

* feat: 내 모임 조회 서비스 구현

* 모임 조회를 위한 비즈니스 메서드 및 운동 정보 record 구현

* feat: 내 모임 조회 컨버터 구현

* feat: 운동 정보를 담을 record 구현

* feat: 모임 조회 쿼리 구현

* refactor: 공백 제거 및 기본값 추가

* refactor: 정렬 기준 입력 한글로 입력 가능하도록 리팩토링 및 에러 처리

* [refactor/#138]  orphanRemoval 제거 (#139)

* [feat/#140] 모임 찜 관련 API 구현 (#141)

* feat: 모임 찜 관련 API 구현

* refactor: 중복 로직 삭제

* [docs#142] 운동 도메인 DTO의 Request 객체에 @Schema 어노테이션 추가 (#143)

* [feat/#145] 전역 에러 핸들러에서 Validation 과정에서 에러 응답을 1개만 던지는 대신 전체를 던지도록 변경 (#147)

* feat: RequestBody의 에러 메시지 1개가 아닌 전체 던지도록 변경

* feat: PathVariable, RequestParam의 에러 메시지가 1개가 아닌 전체를 던지도록 변경

* [feat/#144] 모임 운동 캘린더 조회 API 구현 (#148)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* fix: 운동 시작 시간 및 종료 시간 에러코드 1XX로 변환

* feat: 검증 로직 구현

* feat: 에러 코드 정의

* feat: 날짜 기간 내 운동 조회 로직 구현

* feat: 디폴트 날짜 계산 로직 구현

* feat: 멤버 여부와 파티 이름도 반환하도록 구현

* feat: 최상위 Response 객체 생성 로직 구현

* chore: 캘린더 스펠링 변경

* feat: 모임 성별 급수 정보 제외 반환 로직 구현

* feat: 성별 급수 정보 반환 로직 구현

* refactor: 성별 급수 1번만 계산하도록 변경

* refactor: 운동 주별로 그룹화 로직 메서드 추출로 리팩터링

* refactor: 운동 참여자 정보 fetch join 대신 네이티브 쿼리 Count로 따로 조회

* [feat/#125] 운동 찜 관련 기능 구현 (#150)

* feat: 운동 찜하기 구현

* feat: 운동 찜 해제 구현

* refactor: 예외처리 부분 수정

* 재배포

* test: 배포 테스트

* set: 배포 이후 yml파일 수정 및 S3 설정파일 추가

* [feat/#151] 운동 찜 조회 구현 (#155)

* feat: 운동 찜 조회 구현

* chore: 주석 오타 수정

* [feat/#153] 내 운동 캘린더 조회 API 구현 (#156)

* feat: 컨트롤러 구현

* feat: DTO 구현

* chore: 함수 Calendar 오타 수정

* feat: 서비스 로직 구현

* chore: Calendar 오타 수정

* feat: 최상위 Response 반환 로직 구현

* feat: 나머지 반환 로직 구현

* docs: .gitignore에 application-dev.yml 추가

* config: application.yml에 aws 관련 설정 추가

* [feat/#152] 찜한 모임 전체 조회 API 구현 (#157)

* feat: 찜한 모임 전체 조회

* chore: 코드 오타 수정

* [feat/#166] 모임 운동 캘린더 조회 API에 찜 여부 추가 (#167)

* feat: DTO에 찜 여부 필드 추가

* feat: 서비스와 리포지토리에 찜 여부 반환 로직 구현

* feat: 컨버터에 북마크 여부 반환 로직 추가

* [feat/#154] 내 모임 운동 조회 API 구현 (#163)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 내가 속한 모임 리스트 조회 및 빈 응답 반환 로직 구현

* docs: Swagger 설명에 누락된 큰 따옴표 추가

* feat: 내가 속한 모임의 운동 리스트 최대 6개까지 가져오는 로직 구현

* feat: 반환 로직 구현

* [feat/#149] 운동 도메인에 빈 응답 조기 반환(Early Return) 패턴 도입 (#170)

* feat: 모임 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내가 초대한 게스트 조회에서 빈 응답 조기 반환 패턴 도입

* [feat/#160] 알림 전체 조회 API 구현 (#171)

* feat: 알림 관련 기본 파일세팅 완료

* feat: 알림 전체 조회 기능 구현

* chore: 세미콜론 누락 추가

* refact: 반환타입 수정

* [feat/#111] 모임 삭제 API 구현 (#174)

* feat: 모임 삭제 API 서비스 메서드 추가

* feat: 모임 삭제 API 컨트롤러 구현

* feat: 모임 삭제 API 서비스 구현

* feat: 모임 엔티티에 모임 삭제 비즈니스 메서드와 status 필드 추가

* feat: PartyStatus ENUM 추가

* [refactor/#175] 모임 활동상태 검증 메서드 추가 (#176)

* feat: 모임 활성화 관련 에러 코드 추가

* refactor: 모임 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 조회 서비스에 모임 활성화 검증 로직 추가

* refactor: 운동 서비스에 모임 활성화 검증 로직 추가

* refactor: 찜 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 찜 양방향 연결로 변경 및 모임 삭제 시 모임 찜 연결 해제

* refactor: 운동 조회 서비스에 모임 활성화 검증 로직 추가

* [feat/#165] 내 모임 운동 캘린더 조회 API 구현 (#179)

* feat: 내 모임 운동 정렬방식 ENUM 추가

* fix: 충돌 해결

* docs: Swagger 성공 및 실패 응답 작성

* feat: 응답 DTO 구현

* feat: 조회 로직 구현

* refactor: 컨버터 메서드들 네이밍 통일 및 위치 한 곳으로 모음

* fix: DTO의 잘못된 참조 변경

* feat: 북마크 여부 로직 추가

* feat: 반환 로직 추가

* feat: fetch join을 위해서 로직 개선

* feat: 날짜별 그룹핑 DTO 로직 추가

* feat: 날짜별로 정렬해야 하기에 전체 운동 정렬 로직 제거

* feat: 사람 수 미리 계산 후 Converter에서 정렬

* feat: 운동 참여 인원 수 반환 로직 추가

* [feat/#178] 모임 멤버 조회 API 구현 (#180)

* feat: 모임 멤버 조회 API DTO 구현

* feat: 모임 멤버 조회 API 서비스 메서드 추가

* feat: 모임 멤버 조회 API 컨트롤러 구현

* refactor: 잘못된 로그 출력문 수정

* feat: 모임 멤버 조회 API 서비스 구현

* feat: 모임 멤버 조회 쿼리 구현

* feat: 모임 멤버 조회 API 컨버터 구현

* refactor: 모임 활성화 검증 추가

* refactor: 부모임장 ENUM에 추가

* feat: 모임 멤버 조회 role에 따른 정렬 구현

* [feat/#177] 캘린더 조회 API에서 날짜별로 아이템 묶기 (#181)

* feat: 내 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 내 운동 캘린더 조회 컨버터 로직 구현

* refactor: 불필요한 클래스 명시 제거

* feat: 모임 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 모임 운동 캘린더 조회 컨버터 로직 구현

* [feat/#172] 대회 이미지 업로드 API 구현 (#173)

* [feat/#136] 모임 탈퇴 API 구현 (#182)

* feat: 모임 탈퇴 서비스 메서드 추가

* fix: 잘못된 요청 매핑 주소 수정

* feat: 모임 탈퇴 API 컨트롤러 구현

* feat: 모임 탈퇴 API 관련 에러코드 구현

* feat: 모임 탈퇴 API 서비스 구현

* refactor: 서비스 메서드 정리 및 코멘트 수정

* refact: 필요 없어진 배포 관련 파일 삭제

* [feat/#137] 모임 멤버 삭제 API 구현 (#187)

* feat: 모임 멤버 삭제 API 서비스 메서드 추가

* feat: 모임 멤버 삭제 API 컨트롤러 구현

* feat: 모임 멤버 삭제 API 서비스 구현

* feat: 모임 멤버 삭제 API 에러코드 추가

* feat: 읽지 않은 알림 여부 조회 (#184)

* [feat/#159] 특정 알림 읽음 처리 (#183)

* feat: 특정 알림 읽음처리

* refactor: 필요 없는 부분 삭제

* feat: 회원 검증 로직 및 타입 관련 Request DTO 추가

* [feat/#188] 모임 추천 조회 API 구현 (#190)

* feat: 모임 추천 조회 API 서비스 메서드 추가

* feat: 모임 추천 조회 API 컨트롤러 구현

* feat: 모임 추천 조회 API 서비스 구현

* feat: 모임 추천 조회 및 사용자 주소 조회 리포지토리 메서드 구현

* feat: 사용자가 이미 가입한 모임은 추천되지 않도록 구현

* [feat/#164] 추천 운동 조회 API 구현 (#191)

* feat: 컨트롤러 구현

* feat: 반환을 리스트로 변경

* feat: DTO 구현

* chore: 오탈자 수정

* feat: 운동 조회 로직 구현

* feat: 서비스에서 반환 로직 구현

* feat: ExerciseItem을 List로 반환하도록 변경

* feat: 10개만 조회할경우 거리가 가까운 운동 조회 못할 수 있으므로 전체 조회로 변경

* feat: 정렬 로직 구현

* chore: 로그 출력

* feat: 반환 로직 구현

* refactor: 운동 아이템 List 형태로 반환하는 메서드 제거

* feat: 에러 코드 추가

* docs: 스웨거 설명 추가

* [refactor/#194] 도메인별 ENUM 패키지 구조 개선 (#196)

* refactor: 활동 요일 ENUM을 PARTY DOMAIN 아래로 변경

* chore: ContestController에서 안 쓰는 import 제거

* refactor: MemberPartyStatus Member 도메인 아래로 변경

* refactor: ExerciseOrderType 사용처에 맞게 네이밍 변경 및 Bookmark 도메인 아래로 변경

* refactor: MemberStatus Enum을 Member 도메인 아래로 변경

* refactor: MyPartyExerciseOrderType Enum을 Exercise 도메인 아래로 변경

* refactor: NotificationType Enum을 Notification 도메인 아래로 변경

* refactor: PartyStatus를 Party 도메인 아래로 변경

* refactor: 모임 신청 관련 Enum들을 Party 도메인 아래로 변경

* refactor: 운동 참여 상태  Enum 운동 도메인으로 변경

* refactor: 메달 종류 Enum 대회 도메인으로 변경

* refactor: 활동 시간, 모임 운동 타입, 모임 정렬 타입 Enum 모임 도메인으로 변경

* [refactor/#189] 대회 등록 API에서 이미지 업로드 분리 (#197)

* refactor: 대회 등록 API에서 이미지 서비스 분리

* refactor: 날짜 데이터 형식 변경

* [refactor/#199] 대회 기록 수정 API에서 이미지 업로드 분리 (#200)

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리 및 메서드 통합

* fix: 안 쓰는 코드 삭제

* [feat/#193] 내 참여 운동 조회 API 구현 (#201)

* feat: 필터 및 정렬 Enum 구현

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 필터 타입에 따른 정렬 로직 구현

* feat: 각 필터별 운동 조회 로직 구현

* feat: 빈 응답 조기 반환 로직 구현

* feat: 반환 로직까지 구현

* [feat/#198] 채팅 도메인 구현 (#203)

* Update issue templates

* [fix] cd 파일명 변경 gradle.yml to cd.yml

* [chore] ci 설정

* [fix] 파일이름 변경 ci to ci.yml

* [feat/#202] 특정 건물의 운동 상세 조회 API 구현 (#204)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 및 리포지토리 로직 구현

* feat: 날짜도 컨버터로 전달

* chore: DTO 네이밍 통일

* feat: 반환 로직 구현

* Update ci.yml

* debug: 충돌 해결 중 빠진 중괄호 추가

* Update ci.yml

* [feat/#205] 월간 운동 건물 지도 데이터 조회 API 구현 (#210)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 날짜 및 위치 정보 생성

* feat: 운동 조회 로직 구현

* feat: 필요없는 모임 조인 제거

* feat: 날짜별 건물 그룹핑 로직 및 반환 로직 추가

* feat: Addr의 위도 및 경도 필드 Float에서 Double로 자료형 변경

* fix: longitude 대신 latitude를 보내고 있던 로직 에러 해결

* feat: 날짜를 입력하지 않으면 오늘을 기본값으로 변경

* docs: 스웨거 수정

* feat: 위도와 경도 입력하지 않을 시 기본값으로 멤버 메인 주소를 사용

* feat: 거리 계산 로직을 위해 멤버 주소 또한 Double로 변경 + 사이드 이펙트 처리

* fix: 생성된 주소값을 반환하도록 변경

* docs: api 경로 변경 및 스웨거 설명 변경

* refactor: 클래스명 및 변수명 명확화

* docs: 스웨거 설명 추가

* [feat/#195] 모임 추천 조회 API 구현 (콕플 추천 / 필터) (#206)

* feat: QueryDSL 사용을 위해 의존성 추가 및 QuerydslConfig 구현

* fix: QueryDSL 추가로 인한 테스트 오류 방지를 위해 테스트용 yml 파일 추가

* feat: 모임 추천 조회 API 필터 요청을 담을 DTO 구현

* feat: 동적쿼리를 위한 리포지토리 추가 및 기존 리포지토리 상속

* feat: 동적쿼리를 처리하는 리포지토리 구현체 구현

* feat: 기존의 모임 추천 조회 컨트롤러에 필터 파라메터 및 정렬 조건 추가

* feat: 모임 추천 조회 서비스의 로직을 상황(콕플추천, 필터)에 따라 해당 로직을 사용하도록 구현

* feat: 동적쿼리가 정렬을 처리할 수 있도록 구현

* fix: record에서 불필요한 @Getter 제거 (에러발생)

* docs: 스웨거 요약문 변경

* fix: 삭제된 모임은 모임 추천 목록에 조회되지 않도록 수정

* refactor: PartyFilterDTO 객체 생성 빌더 패턴으로 리팩토링

* [feat/#120] 카카오 소셜로그인 구현 (#211)

* feat: SecurityConfig 일부 추가

* feat: 순수 회원가입 로직 작성

* feat: jwt 구현 완료

* feat: 카카오 소셜로그인 구현 및 테스트 완료

* fix: 로그인 한 사용자의 id를 가져올 수 있게 컨트롤러 수정

* fix: 테스트코드 삭제

* fix: 리다이렉트 uri 수정

* feat: cors 설정

* refact: 만료기간 상수로 분리

* [feat/#209] 모임 채팅방 목록 조회 API 구현 (#213)

* feat: 모임 채팅방 목록 조회 DTO 구현

* feat: 모임 채팅방 목록 조회 컨버터 구현

* feat: 모임 채팅방 목록 조회 컨트롤러 구현

* feat: 모임 채팅방 목록 조회 서비스 구현

* feat: 모임 채팅방 목록 조회 레포지토리 구현

* fix: 안쓰는 코드 삭제

* feat: 예외처리 구현

* refactor: 페이징 커서 방향 String에서 ENUM으로 교체

* refactor: getter 사용

* [refact/#214] 나이대 변수명 변경 (#219)

* refactor: 나이대 변수명 변경 (Age -> BirthYear)

* fix: SecurityConfig 파일 원복

* [feat/#217] 모임 생성 시 자동으로 모임 채팅방 생성 로직 구현 (#218)

* feat: 모임 생성 시 자동 채팅방 생성 및 모임장 채팅방에 자동 참여 로직 구현

* fix: 쿼리문 레포지토리 위치 수정

* [feat/#215] 모임 채팅방 이름 검색 API 구현 (#216)

* feat: 모임 채팅방 이름 검색 API 구현

* fix: 충돌 해결

* fix: 안 쓰는 임포트 제거

* feat: 모임 채팅방 이름 검색 쿼리 구현

* chore: 로그 추가

* fix: 레포지토리 수정

* [fix/#208] 모임 요청 파라미터 Enum 변환 및 검증 로직 수정  (#223)

* fix: 모임유형 한글로 입력을 받도록 수정

* fix: 활동시간 한글로 입력을 받도록 수정

* fix: 활동요일 한글로 입력을 받도록 수정

* docs: 급수 에러코드 설명문 변경

* feat: 키워드 한글 변환 로직 구현 및 에러코드 추가

* fix: 모임 추천 조회 필터의 입력값을 검증하도록 수정

* refactor: 급수 에러코드 CommonErrorCode 재활용

* [debug#225] 출생년도 비교로 변경 및 관련 필드명 변경

* [feat/#221] 모임 가입 수락 시 채팅방 자동 참여 로직 구현 (#226)

* [fix/#222] notification 테이블에 칼럼 추가 (#233)

* feat: notification 테이블에 칼럼 추가

* fix: memberId 방식 변경

* fix: Security Config 원상복구

* feat: 알림 이미지 전달 구현, key -> url 변환 구현

* feat: 로그인 후 상세정보 받기 구현

* [feat/#227] 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현 (#228)

* feat: 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현

* fix: 메세지 저장 방식 변경

* refactor: 채팅방 퇴장 메서드 추출

* fix: senderName 삭제

* [fix/#230] 모임 이미지 저장 방식 변경 및 imgKey 주소로 변환 (#234)

* fix: 모임 생성 시, imgKey를 전달받도록 변경

* debug: 모임 생성 시 이미지 null값 허용하여 에러 해결

* fix: 정적 팩토리 메서드와 모임 이미지 빌더 imgKey로 변경

* fix: PartyImg에서 imgUrl 필드 제거

* fix: 북마크 컨버터에 변경된 모임 imgUrl 호출 메서드 적용 및 static 제거

* fix: 채팅 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 운동 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 모임 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* refact: imageService 의존성 주입 및 변환 로직을 북마크 서비스로 이전

* refact: imageService 의존성 주입 및 변환 로직을 채팅 서비스로 이전

* refactor: imageService 의존성 주입 및 변환 로직을 모임 서비스로 이전

* [fix/#236] 대회 이미지 저장 방식 변경 (#237)

* fix: 대회 이미지 img_key만 저장하도록 수정

* refactor: 이미지 호출 관련 기존 컨버터에서 하던 로직을 서비스에서 하도록 리팩토링

* refactor: String으로 변결

* fix: 파라미터 조건 추가

* [feat/#192] 새로운 운동 추천 캘린더 조회 API 구현 (#229)

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 멤버 정보 조회 및 기간 계산

* refactor: 기간 계산 로직 DateRange 안의 메서드로 변경

* feat: 콕플 추천 필터링된 운동 조회 로직 구현

* fix: 정렬 로직을 컨버터에서 진행하므로 메서드 제거

* feat: 기본 where절 구현

* refactor: 조인할 예정이므로 exercise.party를 party로 수정

* feat: 필터 where절 구현

* feat: 쿼리 전체 로직 구현

* refactor: 모임 레벨 조인 대신에 Exists절로 변경

* refactor: 콕플 추천 조회 로직 EXISTS절로 급수 비교하도록 변경

* feat: 운동 리포지토리에서 커스텀 인터페이스를 상속받도록 변경

* feat: 동적 쿼리 로직 호출

* feat: 추가 정보 조회 로직 구현

* feat: Response 반환 로직 구현

* feat: 정렬 로직 구현을 위해 정렬 필드도 넘기기

* feat: 주별 그룹화 로직 구현

* feat: 거리 정렬 로직을 위해 필드 추가

* feat: 콕플 추천 정렬 로직 구현

* feat: 필터 정렬 로직 구현

* feat: 데일리 아이템 생성 로직 구현

* feat: 위클리 생성 로직 구현

* fix: Party 필드명 변경에 따른 변경사항 적용

* fix: 나이 대신 생일년도로 비교하도록 변경

* feat: 참여인원이 많은 순으로 정렬을 위해 역방향으로 정렬

* [fix/#235] 운동 도메인에 이미지 로직 변경 적용 (#244)

* feat: 컨버터에 이미지 키 변환 메서드 추가

* fix: 새로운 운동 추천 캘린더 조회 API에 로직 반영

* fix: 운동 추천 조회 API에 로직 반영

* fix: 내 모임 운동 캘린더 조회 API에 로직 반영

* fix: 내 모임 운동 전체 조회 API에 로직 반영

* fix: 내 참여 운동 캘린더 조회 API에 로직 반영

* fix: 건물 운동 상세 조회 API에 로직 반영

* feat: 멤버 이미지 url 받아오는 메서드 추가

* fix: 운동 상세 조회 API에 로직 반영

* [feat/#232] 신규 멤버 추천 API 구현 (#246)

* feat: 추천 멤버 DTO 구현

* feat: 추천 멤버 조회 API 서비스 메서드 추가

* feat: 추천 멤버 조회 API 서비스 컨트롤러 구현

* feat: 추천 멤버 조회 API 커스텀 리포지토리 추가

* refact: 사용자의 id가 필요없기에 제거 및 오타 수정

* feat: 추천 멤버 조회 API 서비스 구현

* feat: 추천 멤버 조회 API 컨버터 구현

* fix: 프로필 이미지 key -> url 변환 로직 구현 및 적용

* feat: 추천 멤버 조회 동적 쿼리 구현

* fix: 검색 조건을 적용하는 경우도 기본적으로 모임 급수로 필터링하도록 수정

* [fix/#239] 로그인 후 상세 정보 받기 API 로직 수정 (#240)

* fix: 일부 로직 에러 수정

* fix: 시큐리티 원래대로

* feat: 찜 개수 제한 관련 로직 추가 (#242)

* [feat/#248] 웹소켓 기본 설정 및 연결 관리 구현 (#249)

* feat: WebSocket 의존성 추가

* feat: WebSocket 설정 구현

* feat: WebSocket 메시지 Enum 구현

* feat: 웹소켓 핸들러 틀 구현

* feat: 웹소켓 연결 완료 후 로직 구현

* feat: 웹소켓 종료 후 로직 구현

* feat: 웹소켓 전송 에러 로직 구현

* [feat/#243] 개인 채팅방 생성 및 참여 API 구현 (#245)

* feat: 개인 채팅방 생성 및 참여 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 및 레포지토리 구현

* fix: 칼럼 수정 및 추가

* chore: 예외처리 추가

* chore: 자동 정렬

* feat: 사용자 이름 바뀌었을때, displayName 동기화 구현

* fix: senderName 삭제

* feat: 개인 채팅방 목록 조회 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 구현

* [feat/#252] 개인 채팅방 이름으로 검색 API 구현 (#254)

* fix: 오타 수정

* feat: 컨트롤러 구현

* feat: 서비스 구현

* feat: 레포지토리 구현

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* [feat/#162] 알림 추가 로직 구현 (#253)

* feat: 알림 추가 로직 구현

* feat: 알림 추가 로직 개발

* fix: bookmark컨트롤러 시큐리티 활성화

* feat: 개수 제한  추가

* feat: title 추가

* [fix/#255] 알림 전체 조회 응답에 data 필드 추가 (#263)

* [feat/#247] 신규 멤버 초대 보내기 API 구현  (#257)

* feat: PartyInvitation 엔티티 구현

* feat: 멤버 초대 보내기 API DTO 구현

* feat: 멤버 초대 보내기 API 서비스 메서드 추가

* feat: 멤버 초대 보내기 API 컨트롤러 구현

* feat: 멤버 초대 보내기 API 서비스 구현

* feat: 멤버 초대 리포지토리 구현

* feat: 대기 중인 초대 검증 에러코드 추가

* feat: 멤버 초대 보내기 API 컨버터 구현

* [feat/#264] 개발자 테스트용 토큰 발급 (#266)

* fix: 운동 도메인 id값 로그인한 사용자 id로 변경 (#268)

* [feat/#262] 모임 초대 처리 API 구현 (#270)

* feat: 모임 초대 처리 API DTO 구현

* feat: 모임 초대 처리 API 서비스 메서드 추가

* feat: 모임 초대 처리 API 컨트롤러 구현

* feat: 모임 초대 처리 API 서비스 구현

* feat: 모임 초대 상태 변경 비즈니스 메서드 구현

* feat: 모임 초대 처리 API 에러코드 추가

* fix: 모임 초대 시 채팅 참여 메서드 추가 및 JoinPartyChatRoom 범용적으로 사용 가능하도록 리팩토링

* [fix] cors 수정

* [fix/#238] 모임 유형을 오후 또는 오전으로 조회 시, 상시도 조회되도록 수정 (#272)

* fix: 모임 유형 오전, 오후 조회 시 상시도 조회되도록 로직 구현

* [fix] cors 수정

* chore: 안 쓰는 import문 제거

* feat: 모임 유형이 오전, 오후인지 체크하는 Utils 클래스 생성

* fix: 모임 유형 오전 or 오후 조회 시 상시도 조회되도록 변경

* refactor: 조건 로직을 Utils 메서드를 사용하도록 변경

---------

Co-authored-by: kanghana1 <qazplm12093@naver.com>
Co-authored-by: dmori <chosehoon2@naver.com>

* [chore/#274] 운동 도메인에서 이미지 url 필드명을 profileImageUrl로 통일 (#275)

* chore: 운동 상세 조회 API에서 필드명 변경

* chore: 운동 추천 조회 API에서 필드명 변경

* chore: 건물 운동 상세 조회 API에서 필드명 변경

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* [refactor/#276] 운동 도메인 커맨드 서비스 분리 (#277)

* refactor: 운동 생성 검증 로직 이동

* refactor: 운동 신청 검증 로직 이동

* refactor: 게스트 초대 로직 검증 이동

* refactor: 운동 참여 취소 로직 검증 이동

* refactor: 게스트 초대 취소 로직 검증 이동

* refactor: 매니저에 의한 운동 참여 취소 로직 검증 이동

* refactor: 운동 삭제 로직 검증 이동

* refactor: 운동 업데이트 로직 검증 이동

* refactor: 운동 신청 메서드 참여 서비스로 이동

* refactor: 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 매니저에 의한 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 게스트 초대 메서드 게스트 서비스로 이동

* refactor: 게스트 초대 취소 메서드 게스트 서비스로 이동

* chore: 커맨드 서비스 이름 생명주기 서비스로 변경

* chore: 메서드 파일 내 순서 변경

* refactor: 운동 생성 로직 CommandService에서 호출하도록 변경

* refactor: 운동 삭제 로직 CommandService에서 호출하도록 변경

* refactor: 운동 업데이트 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 취소 로직 CommandService에서 호출하도록 변경

* refactor: 특정 참여자 운동 취소 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 취소 로직 CommandService에서 호출하도록 변경

* refactor: 패키지 구조 변경

* [feat/#231] 모임 정보 수정 API 구현 (#278)

* feat: 모임 정보 수정 DTO 구현

* feat: 모임 정보 수정 API 서비스 메서드 추가

* feat: 모임 정보 수정 API 컨트롤러 구현

* feat: 모임 정보 수정 API 서비스 구현

* feat: 정보 수정 비즈니스 로직 및 연관관계 편의 메서드 구현

* fix: 모임 정보 수정 DTO 검증 추가

* [feat/#279] 초기 채팅방 조회 API 구현 (#281)

* feat: 컨트롤러 구현

* fix: 메시지 중 이모지는 TEXT로 통합되어서 보내짐, 입장 및 퇴장을 처리하는 SYSTEM 필드로 수정

* feat: DTO 구현(채팅방 정보, 메시지 리스트, 참여자 리스트로 구분)

* chore: 메서드 명 명확화

* feat: 서비스 틀 구현

* feat: 채팅방 및 채팅방 참여 권한 검증

* feat: 채팅방 유형에 따라 가져오는 정보 분기 로직 구현

* refactor: 상대방 조회하는 로직이 N+1 문제를 불러일으키므로 이를 DB 조회 방식으로 해결

* refactor: 조회한 상대방 정보에서 멤버까지 접근하여 이름 필드 사용하도록 변경

* refactor: 모임 프로필 조회 시 N+1 문제가 발생하므로 이를 FETCH JOIN으로 해결

* fix: 잘못된 네이밍 변경

* feat: ChatInfo 생성 로직 구현

* feat: 최신 50개 메시지 조회 로직 구현

* feat: 메시지 정보 생성 로직 구현

* refactor: stream 로직 개선

* fix: 메시지 조회할 때 멤버도 조인하도록 변경

* feat: 메시지 정보 반환 로직 구현

* fix: 채팅방 멤버 조회할 때 멤버와 멤버 프로필까지 조회하도록 변경 + 이름순 정렬

* refactor: stream 로직 메서드 추출

* feat: 멤버 정보 반환 로직 구현

* feat: 마지막 메시지까지 읽음 처리

* feat: Response 반환 로직 구현

* fix: 메서드명 명확화

* chore: 개행 제거

* [debug/#289] 전송 이미지 크기 설정 (#293)

* [feat/#280] 과거 메시지 조회 API 구현 (#282)

* feat: 컨트롤러 구현

* feat: DTO 구현

* fix: Slice로 반환받기 위해 Response 객체 대신 MessageInfo를 직접 반환

* feat: 채팅방 멤버 검증 로직 구현

* feat: 커서 기반 메시지 조회 로직 구현

* fix: Transactional 어노테이션 잘못된 import 정정

* refactor: 정렬 로직이 필요없으므로 Pageable 대신 필요한 필드만 사용하도록 변경 + List로 반환

* feat: hasNext 판별 로직 구현

* feat: 오래된 순으로 조회했으므로 다시 반전

* feat: 메시지 정보 반환 로직 구현

* feat: 다음 커서 반환 로직 구현

* feat: 응답 반환 로직 구현

* fix: JPQL에서는 LIMIT를 지원하지 않으므로 Pageable로 데이터 크기 제한

* [feat/#256] 모임 채팅방 목록 조회 slice 기반 무한스크롤 구현 (#261)

* [fix/#291] 모임 id값 로그인한 사용자 id로 변경

* [fix/#294] 초대 알림 추가시 invitationId 넘겨주기 (#295)

* fix: 이미지 요청 크기 늘리기

* fix: data필드에 invitationId 추가

* [feat/#260] 모임 관련 알림 생성 로직 추가 (#290)

* feat: 모임 관련 알림 생성 로직 추가

* fix: INVITE일 경우, invitationId도 알림생성요청 dto에 포함

* debug: 에러 코드 변경

* [feat/#250] 메시지 전송 기능 구현 (#259)

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* debug: rebase 과정 중 빌드 에러 해결

* fix: 채팅룸 네임 필드 삭제 (#304)

* [fix/#302] 하드코딩->로그인 아이디로 변경 (#303)

* fix: AWS 배포 과정에서 gradle 의존성 캐싱하도록 변경

* [feat/#283] 모임 채팅방 나가고 들어올 때 시스템 메시지 보내는 로직 구현 (#308)

* feat: 모임 입출입 ENUM 구현

* feat: 모임 입출입 이벤트 구현

* feat: 모임 입출입 이벤트 리스너 구현

* fix: 메시지 타입 중 이미지 제거

* feat: 이벤트 리스너에서 웹소켓 서비스를 호출하여 시스템 메시지 전송 로직 시작

* chore: 패키지명 변경

* feat: 핸들러와 서비스의 순환 참조 방지를 위해 시스템메시지 이벤트 구현

* fix: 웹소켓 서비스에서 시스템 메시지 이벤트 발행

* feat: 시스템 메시지 이벤트 리스너 구현 - 브로드캐스트 진행

* feat: 모임 채팅방 참여 이벤트 발행

* feat: 모임 채팅방 퇴장 이벤트 발행

* feat: Async 어노테이션 활성화를 위해 Config 구현

* chore: WebSockeetMessageDTO 객체 위치 변경

* refactor: 웹 소켓 연결도 enum값으로 처리하도록 변경

* refactor: 브로드캐스트 서비스 분리(1) - 웹소켓 연결

* refactor: 브로드캐스트 서비스 분리(2) - 웹소켓 종료

* refactor: 브로드캐스트 서비스 분리(3) - 브로드캐스트

* refactor: 테스트 메서드 이동

* refactor: 채팅방 멤버 변경 이벤트 발행

* fix: 모임에서 나가고 들어오는 것과 채팅방 나가고 들어오는 걸 하나의 트랜잭션에서 처리

* fix: 채팅방 나가고 들어오는 이벤트 리스너 구현

* feat: 채팅방 나가고 들어오는 로직 및 메시지 전송 로직 ChatRoomService에 구현

* fix: 필요없는 메서드들 제거

* fix: 세션 추가 메서드 네이밍 명확화

* fix: 웹소켓 핸들러만 테스트하도록 변경

* refactor: 시스템 메시지 보내는 로직을 웹소켓 서비스로 이동

* fix: 핸들러 테스트 제외하고 포스트맨으로 테스트하도록 변경

* refactor: 웹소켓 서비스에서 브로드캐스트 로직 처리하도록 변경

* [feat/#284] 개인 채팅 slice기반 목록 조회 구현 (#309)

* [feat/#305] redis 기본 설정 추가 및 도입 (#313)

* debug: 임시로 웹소켓 경로 허용 (#316)

* [feat/#265] 채팅방 구독 로직 구현 (#314)

* feat: 채팅방 구독 로직 틀 구현

* chore: 브로드캐스트 서비스 구독 서비스로 이름 변경

* feat: 채팅 메시지 전송 이벤트 구현

* refactor: 메시지 전송을 이벤트 발행으로 처리하도록 변경

* feat: 채팅 구독 이벤트 레코드 구현

* refactor: 채팅방 멤버 전체 브로드캐스트 대신 구독자만 브로드캐스트 하기 위해 구독 관리 방식 변경

* refactor: 네트워크 I/O는 성능에 별로 영향을 주지 않으므로 for문으로 변경

* fix: 실패한 사용자 처리 로직 구현

* fix: 구독 로직을 ChatWebSocketService 대신 SubscriptionService에서 진행

* feat: 구독 반환 DTO 구현

* feat: 구독 이벤트 발행 로직 및 성공 메시지 반환 로직 구현

* feat: 구독 이벤트 리스너 구현

* feat: 발신자 제외 브로드캐스트 기능 추가 - 자기 메시지 중복 수신 방지

* fix: 웹소켓 연결 시 멤버 이름 설정 안하는 에러 해결

* [feat/#306] JWT를 활용해 웹소켓 연결 인증 단계 구현 (#317)

* feat: HandShakeInterceptor 구현체 틀 구현

* feat: 에러 처리 로직 틀 구현

* feat: URL에서 JWT 토큰 추출

* feat: 멤버 id를 jwt에서 추출하여 세션에 넣어두기

* feat: 인터셉터 단계 추가하고 프론트 url만 허용하도록 변경

* develop 브랜치와 충돌 해결

* [feat/#287] 다운로드 토큰 발급 구현 (#310)

* feat: DownloadToken 엔티티 구현

* feat: 다운로드 토큰 발급 DTO 구현

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* feat: 다운로드 토큰 발급 API 컨트롤러 구현

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* ChatMessageFile 엔티티 구현

* feat: 다운로드 토큰 발급 API 서비스 구현

* feat: DownloadToken 정적 팩토리 메서드 구현

* feat: 다운로드 토큰 발급 API 리포지토리 추가

* feat: 다운로드 토큰 발급 API 에러코드 추가

* feat: 다운로드 토큰 발급 API 컨버터 구현

* feat: 양방향 연결을 위해 chatMessageFile 필드 추가

* [feat/#288] 파일 다운로드 구현 (#318)

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* feat: 채팅 파일 다운로드 API 서비스 메서드 추가

* feat: 채팅 파일 다운로드 API 컨트롤러 구현

* feat: 채팅 파일 다운로드 API 서비스 구현

* feat: 채팅 파일 다운로드 API 에러코드 추가

* feat: 채팅 파일 다운로드 API 리포지토리 메서드 추가

* feat: 이미지 서비스에 파일 다운로드 메서드 구현

* fix: 토큰 유효시간 3분으로 수정

* fix: cors 프론트엔드 url 반영

* [feat/#319] 개발자용 토큰 발급 API(다른 사용자) 구현 (#320)

* feat: 컨트롤러 구현

* feat: 메서드 구현

* feat: 다른 사용자 개발자 토큰 발급도 스프링 시큐리티에서 허용하도록 변경

* [fix/#324] 모임 주소 중복 유니크 제약조건 추가 (#325)

fix: 모임 주소 중복 유니크 제약조건 추가

* [feat/#300] 채팅방 구독 해제 로직 (#321)

* feat: 구독 해제 핸들러 구현

* feat: 구독해제 이벤트 생성 메서드 구현

* feat: 이벤트 리스너 로직 구현

* feat: 구독 해제 로직 구현

* [feat/#311] 파일 다운로드 리팩토링 / 파일 업로드 API 구현 (#323)

* bug: 잘못된 다운로드 토큰 url 생성 로직 수정

* fix: Pre-signed URL로 임시 마스터키 발급

* refact: 직접 s3 object를 가져오도록 리팩토링하여 성능항샹 및 문제 해결

* refact: 파일 업로드에서도 통일된 enum타입을 사용하기 위해 ImgType -> DomainType으로 명칭 변경

* feat: 파일 업로드 API 컨트롤러 구현

* feat: 파일 업로드 API 서비스 구현

* refact: enum에 해당 도메인 경로 저장하도록 리팩토링

* refact: 중복 로직을 공통 메서드로 구현 및 파일/이미지 업로드하는 uploadToS3 메서드 구현

* refact: 불필요한 extractKeyFromUrl 메서드 제거

* refact: UploadDTO 형식 통일

* [feat/#322] 탈퇴 회원 시큐리티 필터에서 검증 (#327)

* feat: 탈퇴 회원 시큐리티 필터에서 검증

* fix: 에러메시지  수정

* [feat/#328]  JWT null인 경우 예외처리 (#329)

* [feat/#296] 키워드 추가 API 구현 (#330)

* feat: 키워드 추가 API DTO 구현

* feat: 키워드 추가 API 서비스 메서드 추가

* feat: 키워드 추가 API 컨트롤러 구현

* feat: 키워드 추가 API 서비스 구현

* feat: 키워드 추가 검증 에러코드 추가

* feat: 키워드 추가 API 리포지토리 구현

* [feat/#335] 키워드 삭제 API 구현 (#336)

* feat: 키워드 삭제 API 컨트롤러 구현

* feat: 키워드 삭제 API 서비스 메서드 추가 및 서비스 구현

* feat: 키워드 삭제 비즈니스 로직 구현

* feat: 키워드 삭제 에러코드 추가

* feat: 키워드 삭제 API 리포지토리 구현

* [feat/#301] 채팅방 자동 읽음 로직 구현 (#331)

* feat: 핸들러 구현

* feat: 웹소켓 Request DTO에 마지막으로 읽은 메시지 ID 넣기

* feat: 채팅 메시지 읽기 이벤트 구현

* refactor: 이벤트 트랜잭션 최적화

* feat: 이벤트 리스너 구현

* feat: 마지막으로 읽은 메시지 업데이트

* feat: 브로드캐스트할 읽음 반환 레코드 구현

* feat: 브로드캐스트할 메시지 생성 로직 구현 및 브로드캐스트 호출

* fix: 브로드캐스트 메시지 변수명 변경

* refactor: 브로드캐스트 오버로딩을 위해 Sealed 인터페이스 구현

* feat: 읽음 메시지 브로드캐스트 로직 구현

* refactor: 메시지 브로드캐스트 메서드명 변경

* fix: 필드명 통일

* debug: 메시지 업데이트 쿼리 에러 해결

* fix: 읽음 메시지 브로드캐스트 할 때 마지막으로 읽은 메시지 정보 반환하지 않도록 변경

* fix: 구독된 채팅방 자동읽음 처리를 위해 기존 로직 전부 삭제

* feat: 메시지 자동 읽음 이벤트 로직 구현

* feat: 읽음 처리 로직 구현

* fix: 사용하지 않도록 변경한 메서드 제거

* debug: LEFT JOIN으로 개인 채팅 조회 안 되는 에러 해결 (#338)

* [fix/#297] 여복인 경우 MaleLevel 추가 불가능하도록 수정 (#340)

* fix: 여복인 경우, 남자 급수를 방지하는 검증 로직 추가

* feat: 에러코드 추가

* [fix/#326] 특정 지역으로 조회 시, addr2가 전체인 모임도 조회되도록 수정 (#341)

* [fix/#334] 개인 채팅에서 처음 메시지 보내면 채팅방 초대 로직으로 변경 (#342)

* feat: 채팅방 멤버 엔티티에 상태 추가

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* refactor: 모임 채팅방 생성 로직 채팅 도메인으로 이동

* refactor: 채팅방 생성 + 자동 참여 로직 엔티티 메서드로 리팩터링

* refactor: 모임 채팅방 자동 참여 시 null인지 체크하도록 검증 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 모임 채팅방 생성 메서드명 명확화

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* refactor: 멤버 조회 메서드 네이밍 명확화

* fix: 채팅방 멤버 나는 참가 상태로, 상대방은 대기 상태로 생성

* fix: 개인 채팅방 목록 조회 및 검색 시 JOINED 상태인 경우만 조회하도록 변경

* feat: 개인 채팅방에서 첫 메시지 전송일경우 상대방도 초대하도록 변경

* fix: @Builder.Default 어노테이션으로 일대다 필드를 생성하지 않아도 기본값으로 생성하도록 변경

* docs: 개인 채팅방 생성 및 참여 api 설명 명확화

* chore: api 클래스 내 순서 변경

* refactor: /chats는 RequestMapping으로 처리

* [fix/#345] 급수 조건이 맞지 않더라도 모임의 멤버가 될 수 있도록 수정 (#346)

* fix: 모임 가입신청 시, 급수 조건에 적합한지 검증하는 로직 제거

* refact: 기존 나이대 조건, 성별 조건 검증 메서드를 모임 생성에도 활용할 수 있도록 리팩토링

* fix: 운동 신청 시 급수 조건 검증 로직 주석처리 (#349)

* fix: 임시 url -> 실제 메달 이미지 url (#351)

* [feat/#355] 운동 수정을 위한 조회 API 구현 (#356)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 구현

* feat: 컨버터 구현

* docs: 조회 조건 삭제

* fix: 모임 운동 캘린더 조회 API에서 운동 참여 여부도 반환하도록 변경 (#354)

* [feat/#350] 모임 id로 roomid 조회 API 구현 (#352)

* feat: 채팅방 id 조회 API DTO 추가

* feat: 채팅방 id 조회 API 컨트롤러 구현

* feat: 채팅방 id 조회 API 서비스 구현

* feat: 채팅방 id 조회 API 컨버터 구현

* feat: 멤버 검증을 위한 리포지토리 메서드 추가

* feat: 채팅방 id 조회 API 에러코드 추가

* docs: README 작성 (#358)

* [fix/#361] 모임 관련 검증 수정사항 반영 (#363)

* fix: 가입신청 처리 시, 이미 멤버인지 검증 로직 추가

* fix: 모임 생성 시, 급수 조건에 적합한지 검증하는 로직 제거

* [fix/#362] 현재 (목록/개인) 채팅방 목록 조회 및 검색 API에서 채팅방이 없을 때 에러 던지는 걸 빈 배열 던지는 걸로 반환 (#364)

* fix: 모임 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* fix: 개인 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* debug: 웹소켓 설정에서 프론트 배포 주소 CORS 허용 (#360)

* [fix/#332] 채팅 메시지 조회할 때 읽지않은 멤버 수도 반환하도록 변경 (#344)

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* feat: 메시지 읽음 상태 엔티티 구현

* feat: 채팅 보낼 시 채팅방 읽음 상태 생성 후 저장

* feat: 채팅 구독자들 메시지 읽음으로 변경

* feat: 마지막으로 읽은 메시지 id도 업데이트 하도록 구현

* refactor: 채팅방 목록 조회 시 안 읽은 메시지 카운트를 메시지 읽음 상태 테이블에서 조회하도록 리팩터링

* feat: 브로드캐스트 할 DTO에 안 읽은 멤버 필드 추가

* feat: 메시지 보낼 때 지금 구독자 수 체크하는 메서드 구현

* feat: 구독자들 읽음 상태로 변경 및 안읽은 메시지 수 반환하기

* feat: 안 읽은 사람 수도 반환하도록 변경

* refactor: 이벤트 구조로 처리하는 대신 활성 구독자 수 체크하며 한 번에 읽음 상태 업데이트

* feat: 구독 시 메시지마다 안 읽은 수 업데이트 정보 틀 구현

* feat: 안 읽은 메시지 id 리스트 조회

* feat: 안 읽은 메시지가 없을 때 로직 구현

* feat: 메시지마다 안 읽은 사람 수 카운트 로직 구현

* feat: 채팅방 구독할 때 마지막 메시지 업데이트 하도록 변경

* feat: 구독 시 메시지 업데이트 브로드캐스트 로직 구현

* debug: Long으로 반환하기 위해 Query문 사용

* chore: 사용하지 않는 메서드 정리

* feat: 구독하는 사람은 업데이트 메시지 받지 않도록 변경

* [debug/#365] 잘못된 사용자id를 넘겨주어 생기던 로직 오류 해결 (#366)

* [docs] 리드미 약간 수정

* [feat/#367] 채팅 보낼 때 이미지와 파일도 같이 보낼 수 있도록 로직 추가 (#373)

* fix: 메시지 전송 시 파일과 이미지들도 보낼 수 있도록 DTO 필드 추가

* fix: 이벤트 생성 시 파일과 이미지들도 보내도록 변경

* chore: 사용하지 않는 서비스 제거

* fix: 리스너와 서비스에서 파일과 이미지들 받도록 변경

* refactor: dirty checking으로 불필요한 저장 로직 제거

* feat: 메시지 저장할 때 이미지와 파일도 저장

* refactor: 브로드캐스트 응답과 분리하기 위해 중첩 record로 변경

* fix: 브로드캐스트 할 때 파일 정보와 이미지 정보를 담을 DTO 구현

* feat: 브로드캐스트할 파일 및 이미지 DTO 생성 로직 구현

* feat: 브로드캐스트 DTO에 누락된 필드 추가

* fix: 브로드캐스트 DTO 생성 로직에 이미지와 파일 필드 추가

* fix: 채팅 이미지 엔티티 다운로드를 위해 수정

* fix: 채팅 이미지 Request 필드 수정

* fix: 채팅 이미지 생성 필드 수정

* fix: 내용, 이미지, 파일 모두 없을경우 에러를 던지도록 변경

* fix: 일대다 매핑에서 Builder.Default 추가

* chore: 필요없는 엔터 제거

* [feat/#370] 이미지 다운로드 API 구현  (#371)

* fix: ChatMessageImg 수정

* feat: 채팅 이미지 다운로드 API 서비스 추가

* feat: 채팅 이미지 다운로드 API 서비스 구현

* debug: 오타 수정

* fix: 파일 업로드 시에도 파일 이름, 크기, 타입을 반환하도록 수정

* [fix/#339] 급수 검색에서 포함된 글자만으로도 조회되도록 수정 (#374)

* fix: 급수 검색에서 포함된 글자만으로도 조회되도록 수정

* [fix/#375] 모임 상세 조회 응답 필드 추가 (#377)

* fix: 모임 상세정보 DTO에 필드 추가

* feat: 대기중인 가입신청 여부를 확인하는 비즈니스 로직 구현

* feat: 수정사항 반영하여 컨버터에 추가

* debug: 운동 상세 조회 API에서 멤버 ID값이 아닌 멤버 운동 참여 ID값을 반환하던 로직 에러 해결 (#381)

* debug: CD 최신 이미지 반영 문제 해결 (#383)

* debug: 남아있는 컨테이너 강제 제거하는 스크립트 추가 (#384)

* [fix/#385] 채팅방 목록에서 마지막 메시지 표시 로직 개선 (#386)

* feat: 엔티티에 마지막 메시지 내용 반환하는 메서드 구현

* fix: content대신 마지막 메시지 내용 반환 메서드 사용

* [fix/#388] 키워드 추가를 다중 선택이 가능하도록 수정 (#389)

* fix: 키워드 추가 DTO 리스트로 수정

* fix: 키워드 추가 API 수정 및 연관관계 편의 메서드 추가

* fix: 키워드 삭제 및 사용하지 않는 에러코드 제거

* debug: content가 비어있을 때 hasContent가 true가 되는 에러 해결 (#391)

* [fix/#392] 모임 목록 조회 시, 응답에 찜 여부 추가 (#394)

* fix: 찜 여부를 모임 목록, 모임 상세 조회 DTO에 추가

* fix: 서비스 메서드에 북마크 여부를 확인하는 로직 추가

* fix: 찜한 모임들의 ID을 조회하는 메서드 리포지토리에 추가

* fix: 찜 여부 필드 컨버터에 추가

* [fix/#379] 프로필 이미지 관련 오류 수정 (#393)

* [feat/#372] WebSocket 요청마다 에러를 반환하도록 개선 (#395)

* feat: 구독 시 에러 메시지 반환을 위해 메서드 분리

* feat: 구독 해제 시 에러 메시지 반환을 위해 메서드 분리

* feat: 메시지 전송 시 에러 메시지 반환을 위해 메서드 분리

* fix: 에러 메시지 전송할 때 채팅방 ID 반환 로직 제거

* refactor: 메시지 전송 시 즉시 검증으로 리팩토링

* feat: 구독 및 구독 해제 검증 로직 구현

* refactor: 같은 의미를 담고 있는 에러 코드 통합

* fix: 에러 응답에 채팅방 id 미포함으로 변경

* fix: 에러 응답시 메시지 제대로 포함되도록 변경

* refactor: 웹소켓 연결 성공 시 멤버 정보 조회 메서드를 멤버 쿼리 서비스로 이동

* refactor: 웹소켓 서비스 네이밍 내부 코드에 따라 채팅 송신 서비스로 명확화

* refactor: 웹소켓 서비스들 패키지 분리

* refactor: 웹소켓 메세지 응답 로직 별도 서비스로 분리

* chore: import문 및 코드 스타일 정리

* [fix/#379] 프로필 사진 수정 오류 (#396)

* [fix/#398] 토큰 재발급 경로 permitAll 처리 (#399)

* fix: 토큰 재발급 경로 permitAll 처리

* fix: 리프레시토큰 null 예외처리

* fix: 리프레시토큰 null 예외처리

* [feat/#400] 채팅 메시지에서 이모티콘과 일반 이미지 구분 기능 구현 (#402)

* feat: 채팅 메시지 이미지 엔티티에서 이모티콘 여부 필드 추가

* feat: 초기 채팅방 조회 API에서 이미지 필드 List를 이미지 객체로 변환

* refactor: 이미지 정보와 멤버 정보 공통 DTO로 분리 -> 추후 같은 기능을 하는 메서드를 합치기 위함

* refactor: 메시지 조회 로직에서 중복된 코드를 CommonDTO를 활용해 제거

* refactor: 컨버터 로직 구현

* refactor: 메시지 보낼 때도 이모지 필드 반환하도록 변경

* [fix/#397] 모임 초대, …
kanghana1 added a commit that referenced this pull request Dec 27, 2025
* [feat/#46] 내 대회 기록 상세조회 API 구현 (#54)

* feat: 내 대회 기록 상세 조회 응답 DTO 구현

* feat: 내 대회 기록 상세 조회 컨버터 구현

* feat: 내 대회 기록 상세 조회 컨트롤러 구현

* feat: 내 대회 기록 상세 조회 서비스 구현

* refator: 이미지, 동영상 순서 정렬 기능 추가

* [feat/#55] 내 대회 기록 리스트 조회 (전체, 미입상) API 구현 (#58)

* refator: 미입상 NONE 추가

* feat: 내 대회 기록 심플 조회 응답 DTO 구현

* refator: GET 메서드 queryService로 옮기기

* feat: 내 대회 기록 심플 조회, 리스트로 변환 컨버터 구현

* feat: 내 대회 기록 리스트 조회 컨트롤러 구현

* feat: 내 대회 기록 리스트 조회(전체, 미입상) 서비스 구현

* refactor: 내 대회 기록 리스트 조회(전체, 미입상) 하나의 API로 수정

* fix: static 삭제

* refactor: 메서드 인라인

* chore: 주석

* chore: yml 고치기 (#63)

* [feat/#57] 운동 삭제 API 구현 (#60)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* feat: 멤버 권한 검증 로직 구현

* chore: Party 엔티티에서 운동 생성 메서드 위치 변경

* feat: 운동 삭제 로직 구현

* feat: 반환 로직 구현

* [feat/#43] 운동 게스트 삭제 API 구현 (#56)

* feat: 컨트롤러 구현

* feat: 검증 로직 구현

* feat: 게스트 삭제 로직 구현

* feat: 에러 코드 구현

* feat: 운동 시작 여부 검증 로직 추가

* [refactor/#61] 운동 참여자 수 계산 로직 수동 증가에서 사이즈 계산으로 변경 (#65)

* refactor: nowCapacity 필드 제거

* refactor: nowCapacity 필드 사용 메서드 수정

* refactor: 현재 인원 반환 메서드 추가

* refactor: 람다식 메서드 참조로 변경

* refactor: 다음 순번 계산 메서드 추가

* [feat/#34] 모임 가입 신청 멤버 조회 API 구현 (#68)

* refactor: 용어 혼용 방지를 위해 모임 가입신청 생성 API의 DTO 명칭 변경

* feat:모임 가입신청 조회 DTO 구현

* feat: 모임 가입신청 조회 서비스 인터페이스 추가

* feat: 모임 가입신청 조회 API 컨트롤러 구현

* feat: 모임 가입신청 리포지토리에 조회 메서드 추가

* feat: 모임 가입신청 조회 서비스 구현

* feat: 권한 없음 에러 코드 추가

* feat: 모임 가입신청 조회 API 컨버터 구현

* refactor: PartyJoinRequest를 BaseEntity에 상속받도록 수정

* feat: Member와 프로필 이미지 양방향 관계 설정

* refactor: 테스트 진행을 위해 memberId 임시값 변경

* feat: 모임 가입신청 목록을 최신순으로 정렬하도록 기본값 추가

* [feat/#59] 내 대회 메달 조회 API 구현 (#67)

* feat: 내 메달 개수 조회 응답 DTO 구현

* feat: 쿼리 메서드 구현

* feat: 메달 개수 조회 컨버터, 컨트롤러 구현

* feat: 메달 개수 조회 서비스 구현

* chore: log.info() 추가

* [feat/#70] 다른 회원의 대회 기록 상세조회 API 구현 (#71)

* feat: 다른 사람의 대회 기록 상세조회 응답 DTO 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 컨버터 구현

* feat: 다른 사람의 대회 기록 상세조회 컨트롤러 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 서비스 구현

* [feat/#73] 다른 회원의 대회 기록 리스트 (전체, 미입상) API 구현 (#74)

* feat: 다른 사람의 대회 기록 리스트 조회 API 컨트롤러 구현

* refactor: {내/다른 사람}의 대회 기록 리스트 조회 통합 서비스 구현

* chore: 주석 수정

* [feat/#75] 다른 회원의 대회 메달 조회 API 구현 (#76)

* chore: 주석 수정

* feat: 다른 사람의 대회 메달 개수 조회 API 컨트롤러 구현

* [feat/#66] 운동 수정 API 구현 (#69)

* feat: 컨트롤러 구현

* feat: 모임장 운동 취소 API에서 누락된 @Valid 어노테이션 추가

* feat: DTO 구현

* feat: 검증 로직 구현

* feat: dto 접근을 위한 command 패턴 도입

* feat: 운동 정보 수정 로직 구현

* feat: 운동 주소 정보 수정 로직 구현

* feat: 저장 및 반환 로직 구현

* feat: 에러 코드 정의

* fix: 컨트롤러 url 오타 수정

* feat: requestDTO 필드 수정

* [feat/#53] 모임 가입신청 처리 API 구현 (#77)

* feat: 승인 요청에 대한 응답을 담는 enum 추가 (RequestAction)

* feat: 모임 가입신청 처리 요청 DTO 구현

* feat: 모임 서비스 인터페이스에 가입신청 처리 메서드 추가

* feat: 모임 가입신청 처리 API 컨트롤러 구현

* feat: 모임 가입신청 처리 API 서비스 구현

* feat: 가입신청 처리를 위한 정적 팩토리 메서드 및 비즈니스 메서드 구현

* feat: 모임 가입신청 처리 API 에러 코드 추가

* fix: 스웨거 설명문 추가 및 오류 수정

* refactor: 사용하지않는 import 정리

* refactor: orderType 필드 제거

* refactor: 양방향 연결을 위해 member에 연관 관계 편의 메서드 추가

* [feat/#72] 프로필 수정 기능 구현 (#79)

* feat: 프로필 수정 기능 구현

* feat: 프로필 사진 재생성 관련 에러 처리

* chore: 스웨거 설명 수정

* refact: dto 클래스 -> record 변환

* [refactor/#81] 운동 DTO에 중첩 record 적용 (#82)

* chore: pull 관련 임시 에러처리

* refactor: 운동 생성 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 API에서 중첩 record 패턴 적용

* refactor: 운동 게스트 초대 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 취소 API에서 중첩 record 패턴 적용

* refactor: 게스트 초대 취소 API에서 중첩 record 패턴 적용

* docs: 게스트 초대 취소 API 로그 수정

* refactor: 특정 참여자 운동 취소 API에서 중첩 record 패턴 적용

* refactor: 운동 삭제 API에서 중첩 record 패턴 적용

* refactor: 운동 수정 API에서 중첩 record 패턴 적용

* [feat/#80] 회원주소 추가 API 구현 (#83)

* feat: 회원주소 추가 API 구현

* feat: 주소 개수 예외처리 추가

* [refactor/#84] 이미지 업로드 방식 변경 (#85)

* refactor: dto 어노테이션 수정

* [refactor/#88] 메달 도메인 DTO에 중첩 record 패턴 도입 (#90)

* [feat/#86] 대표 주소 변경API 구현 (#87)

* [feat/#94] 회원 주소 삭제 API 구현 (#97)

* [refactor/#98] 주소 추가 로직 수정 (#99)

* [feat/#100] 회원 탈퇴 기능 구현 (#101)

* [refactor/#89] 모임 생성 API 이미지 업로드 방식 변경 (#91)

refactor: 모임 생성 API 이미지 업로드 방식 변경

* [refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)

* refactor: 모임 도메인 DTO에 중첩 record 패턴 도입

* refactor: DTO 명칭 변경 및 임포트 정리

* [fix/#107] 병합 오류 해결 (#108)

* Revert "[refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)"

This reverts commit feaa902.

* fix: 병합 오류 해결 완료

* refactor: MemberExercise와 Guest에서 participantNum 필드 제거 (#105)

* [refactor/#109] 모임 생성 API 에러 처리 추가 (#112)

* feat: 모임 생성 DTO에 에러 처리 및 ENUM 변환 메서드 구현

* feat: 입력값 에러 코드 추가

* refactor: 에러 처리 관련 코드 수정

* [feat/#103] 운동 신청 API에서 검증 로직 추가 (#106)

* feat: 운동 급수 검증 로직 추가

* feat: 에러 코드 추가

* docs: Swagger docs에 급수 위반 추가

* refactor: Exercise와 연관된 엔티티들 fetch join으로 불러오기(N+1) 방지

* feat: 나이 계산 메서드 추가

* feat: 나이 검증 로직 추가

* feat: 에러 코드 추가

* refactor: 급수 및 나이 검증 로직 4XX 비즈니스 에러로 변경

* [feat/#95] 프로필 조회 관련 API 구현 (#118)

* feat: 다른 유저 프로필 조회

* chore: API URL 수정

* feat: 내 프로필 조회 API 구현

* chore: 컨트롤러 메서드 이름 수정

* [feat/#110] 모임 신청 API 검증 로직 추가 구현 (#117)

* feat: 모임 신청자가 모임의 급수 조건에 적합한지 검증하는 로직 구현

* feat: 급수 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 유형에 맞는 성별인지 검증하는 로직 구현

* feat: 모임유형의 성별 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 나이대에 적합한지 검증하는 로직 구현

* feat: 나이 조건 검증 에러 코드 추가

* [Feat/#96] 회원 주소 조회 관련 API 구현 (#119)

* refact: 대표주소 추출 메소드 분리

* feat: 내 현재 위치 조회 API 구현

* chore: 건물명 null여부 관련 수정

* chore: 프로필 조회시 건물명, 도로명 추가

* feat: 회원의 등록 주소 전체 조회

* feat: 대표 주소가 위로 올라오도록 기능 추가

* [feat/#113] 모임 생성 API 검증 로직 추가 구현 (#121)

* feat: 모임 생성자의 성별을 검증하는 로직 구현

* feat: 모임 생성자의 나이를 검증하는 로직 구현

* feat: 모임 생성자의 급수를 검증하는 로직 구현

* feat: 빈 리스트 방지를 위해 @notempty로 변경

* feat: 혼복인 경우, 남성의 급수가 빈 리스트로 입력되는 것을 방지하기 위한 로직 구현

* refactor: 문자열 입력값 검증 @notblank로 변경

* [feat/#123] 운동 멤버십 구분 기능 추가 (#126)

* feat: 운동 참여 멤버쉽 enum 추가

* refactor: 운동 정렬 enum 제거 및 필드 제거

* feat: 운동 신청 시 운동 멤버십 결정 로직 구현

* feat: 게스트 엔티티는 따로 필드 없이 GUEST를 반환하는 로직으로 구현

* refactor: MemberExercise joinedAt 필드 제거에 따라 createdAt을 반환하도록 변경

* fix: ExerciseBookmark 엔티티에서 잘못 삭제한 필드 복구

* fix: 운동 신청 시 운동 신청 엔티티 생성 시점 반환으로 로직 에러 수정

* [feat/#124] 모임 가입 승인 멤버 조회 API 구현 (#127)

* refactor: PartyJoinDTO에 생성일자 추가

* feat: status(상태) 파라메터에 추가

* refactor: 컨버터에 updatedAt 추가

* fix: record의 request 오류 @Schema로 해결

* feat: PENDING인 경우, uppdateAt에 null값을 넣고 DTO에서 생략되도록 구현

* feat: 상태 에러 코드 추가 및 유효성 검증 구현

* [feat/#78] 운동 상세 조회 API 구현 (#128)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 쿼리 서비스 틀 구현

* feat: 기본 검증 구현

* feat: 파티 내 위치 체크

* feat: 멤버 참가자 호출 로직 구현

* refactor: 외부 참여자 ENUM값 변경

* refactor: 메서드명 더 명확하게 변경

* feat: 게스트 참가자 호출 로직 구현, 배치 쿼리로 최적화

* feat: 정렬을 위해 Info record에 joinedAt 컬럼 추가

* feat: 운동 기본 정보 로직 구현

* feat: 참여자, 대기자 그룹의 참여자 정보 반환 타입 List로 변경

* feat: 전체 참여자를 참여자와 대기자로 구분하는 로직 구현

* feat: 그룹 정보 로직 구현

* feat: 반환 로직 구현

* fix: ENUM 값 변경에 따라 사용처도 변경

* [feat/#122] 모임 상세 조회 API 구현 (#129)

* feat: 모임 상세조회 DTO 구현

* feat: 모임 상세조회 인터페이스에 메서드 추가

* feat:모임 상세조회 컨트롤러 메서드 구현

* feat: 모임 상세조회 API 서비스 구현

* feat: 모임 상세 조회 API 컨버터 구현

* refactor: partyDetailDTO record 하나로 통일

* feat: ENUM에 한글 추가 및 getter 추가

* refactor: 급수를 리스트 형식으로 반환하도록 수정

* feat: 컨트롤러에 @apiresponse 추가

* [feat/#131] 내 모임 조회 (간략화) API 구현 (#134)

* feat: 내 모임 간략화 조회 DTO 구현

* feat: 내 모임 간략화 조회 서비스 메서드 추가

* feat: 모임 간략화 조회 컨트롤러 메서드 구현

* feat: 내 모임 간략화 조회 서비스 구현

* feat: 내 모임 조회 리포지토리 메서드 구현

* feat: 내 모임 간략화 조회 컨버터 구현

* refactor: 서비스에 로그 출력문 추가

* [feat/#132] 내가 초대한 운동 게스트 조회 API 구현 (#133)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 대기 상태 구분을 위해 isWating 필드 추가

* feat: 내가 초대한 게스트 목록 조회

* feat: 전체 참가자 목록 조회

* refactor: 운동 조회할 때 모임 정보와 함께 조회하도록 변경

* feat: 게스트 번호와 참여 여부 추출

* feat: 게스트 번호와 참여여부 record DTO로 이동 및 통계 record 추가

* feat: 통계 계산 로직 구현 및 반환 로직 구현

* docs: Swagger 성공 응답 설명 수정

* [feat/#130] 내 모임 조회 API 구현 (#135)

* feat: 내 모임 조회 DTO 구현

* feat: 내 모임 조회 서비스 메서드 추가

* feat: 내 모임 조회 컨트롤러 구현 및 정렬 로직 처리

* feat: 내 모임 조회 서비스 구현

* 모임 조회를 위한 비즈니스 메서드 및 운동 정보 record 구현

* feat: 내 모임 조회 컨버터 구현

* feat: 운동 정보를 담을 record 구현

* feat: 모임 조회 쿼리 구현

* refactor: 공백 제거 및 기본값 추가

* refactor: 정렬 기준 입력 한글로 입력 가능하도록 리팩토링 및 에러 처리

* [refactor/#138]  orphanRemoval 제거 (#139)

* [feat/#140] 모임 찜 관련 API 구현 (#141)

* feat: 모임 찜 관련 API 구현

* refactor: 중복 로직 삭제

* [docs#142] 운동 도메인 DTO의 Request 객체에 @Schema 어노테이션 추가 (#143)

* [feat/#145] 전역 에러 핸들러에서 Validation 과정에서 에러 응답을 1개만 던지는 대신 전체를 던지도록 변경 (#147)

* feat: RequestBody의 에러 메시지 1개가 아닌 전체 던지도록 변경

* feat: PathVariable, RequestParam의 에러 메시지가 1개가 아닌 전체를 던지도록 변경

* [feat/#144] 모임 운동 캘린더 조회 API 구현 (#148)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* fix: 운동 시작 시간 및 종료 시간 에러코드 1XX로 변환

* feat: 검증 로직 구현

* feat: 에러 코드 정의

* feat: 날짜 기간 내 운동 조회 로직 구현

* feat: 디폴트 날짜 계산 로직 구현

* feat: 멤버 여부와 파티 이름도 반환하도록 구현

* feat: 최상위 Response 객체 생성 로직 구현

* chore: 캘린더 스펠링 변경

* feat: 모임 성별 급수 정보 제외 반환 로직 구현

* feat: 성별 급수 정보 반환 로직 구현

* refactor: 성별 급수 1번만 계산하도록 변경

* refactor: 운동 주별로 그룹화 로직 메서드 추출로 리팩터링

* refactor: 운동 참여자 정보 fetch join 대신 네이티브 쿼리 Count로 따로 조회

* [feat/#125] 운동 찜 관련 기능 구현 (#150)

* feat: 운동 찜하기 구현

* feat: 운동 찜 해제 구현

* refactor: 예외처리 부분 수정

* 재배포

* test: 배포 테스트

* set: 배포 이후 yml파일 수정 및 S3 설정파일 추가

* [feat/#151] 운동 찜 조회 구현 (#155)

* feat: 운동 찜 조회 구현

* chore: 주석 오타 수정

* [feat/#153] 내 운동 캘린더 조회 API 구현 (#156)

* feat: 컨트롤러 구현

* feat: DTO 구현

* chore: 함수 Calendar 오타 수정

* feat: 서비스 로직 구현

* chore: Calendar 오타 수정

* feat: 최상위 Response 반환 로직 구현

* feat: 나머지 반환 로직 구현

* docs: .gitignore에 application-dev.yml 추가

* config: application.yml에 aws 관련 설정 추가

* [feat/#152] 찜한 모임 전체 조회 API 구현 (#157)

* feat: 찜한 모임 전체 조회

* chore: 코드 오타 수정

* [feat/#166] 모임 운동 캘린더 조회 API에 찜 여부 추가 (#167)

* feat: DTO에 찜 여부 필드 추가

* feat: 서비스와 리포지토리에 찜 여부 반환 로직 구현

* feat: 컨버터에 북마크 여부 반환 로직 추가

* [feat/#154] 내 모임 운동 조회 API 구현 (#163)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 내가 속한 모임 리스트 조회 및 빈 응답 반환 로직 구현

* docs: Swagger 설명에 누락된 큰 따옴표 추가

* feat: 내가 속한 모임의 운동 리스트 최대 6개까지 가져오는 로직 구현

* feat: 반환 로직 구현

* [feat/#149] 운동 도메인에 빈 응답 조기 반환(Early Return) 패턴 도입 (#170)

* feat: 모임 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내가 초대한 게스트 조회에서 빈 응답 조기 반환 패턴 도입

* [feat/#160] 알림 전체 조회 API 구현 (#171)

* feat: 알림 관련 기본 파일세팅 완료

* feat: 알림 전체 조회 기능 구현

* chore: 세미콜론 누락 추가

* refact: 반환타입 수정

* [feat/#111] 모임 삭제 API 구현 (#174)

* feat: 모임 삭제 API 서비스 메서드 추가

* feat: 모임 삭제 API 컨트롤러 구현

* feat: 모임 삭제 API 서비스 구현

* feat: 모임 엔티티에 모임 삭제 비즈니스 메서드와 status 필드 추가

* feat: PartyStatus ENUM 추가

* [refactor/#175] 모임 활동상태 검증 메서드 추가 (#176)

* feat: 모임 활성화 관련 에러 코드 추가

* refactor: 모임 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 조회 서비스에 모임 활성화 검증 로직 추가

* refactor: 운동 서비스에 모임 활성화 검증 로직 추가

* refactor: 찜 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 찜 양방향 연결로 변경 및 모임 삭제 시 모임 찜 연결 해제

* refactor: 운동 조회 서비스에 모임 활성화 검증 로직 추가

* [feat/#165] 내 모임 운동 캘린더 조회 API 구현 (#179)

* feat: 내 모임 운동 정렬방식 ENUM 추가

* fix: 충돌 해결

* docs: Swagger 성공 및 실패 응답 작성

* feat: 응답 DTO 구현

* feat: 조회 로직 구현

* refactor: 컨버터 메서드들 네이밍 통일 및 위치 한 곳으로 모음

* fix: DTO의 잘못된 참조 변경

* feat: 북마크 여부 로직 추가

* feat: 반환 로직 추가

* feat: fetch join을 위해서 로직 개선

* feat: 날짜별 그룹핑 DTO 로직 추가

* feat: 날짜별로 정렬해야 하기에 전체 운동 정렬 로직 제거

* feat: 사람 수 미리 계산 후 Converter에서 정렬

* feat: 운동 참여 인원 수 반환 로직 추가

* [feat/#178] 모임 멤버 조회 API 구현 (#180)

* feat: 모임 멤버 조회 API DTO 구현

* feat: 모임 멤버 조회 API 서비스 메서드 추가

* feat: 모임 멤버 조회 API 컨트롤러 구현

* refactor: 잘못된 로그 출력문 수정

* feat: 모임 멤버 조회 API 서비스 구현

* feat: 모임 멤버 조회 쿼리 구현

* feat: 모임 멤버 조회 API 컨버터 구현

* refactor: 모임 활성화 검증 추가

* refactor: 부모임장 ENUM에 추가

* feat: 모임 멤버 조회 role에 따른 정렬 구현

* [feat/#177] 캘린더 조회 API에서 날짜별로 아이템 묶기 (#181)

* feat: 내 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 내 운동 캘린더 조회 컨버터 로직 구현

* refactor: 불필요한 클래스 명시 제거

* feat: 모임 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 모임 운동 캘린더 조회 컨버터 로직 구현

* [feat/#172] 대회 이미지 업로드 API 구현 (#173)

* [feat/#136] 모임 탈퇴 API 구현 (#182)

* feat: 모임 탈퇴 서비스 메서드 추가

* fix: 잘못된 요청 매핑 주소 수정

* feat: 모임 탈퇴 API 컨트롤러 구현

* feat: 모임 탈퇴 API 관련 에러코드 구현

* feat: 모임 탈퇴 API 서비스 구현

* refactor: 서비스 메서드 정리 및 코멘트 수정

* refact: 필요 없어진 배포 관련 파일 삭제

* [feat/#137] 모임 멤버 삭제 API 구현 (#187)

* feat: 모임 멤버 삭제 API 서비스 메서드 추가

* feat: 모임 멤버 삭제 API 컨트롤러 구현

* feat: 모임 멤버 삭제 API 서비스 구현

* feat: 모임 멤버 삭제 API 에러코드 추가

* feat: 읽지 않은 알림 여부 조회 (#184)

* [feat/#159] 특정 알림 읽음 처리 (#183)

* feat: 특정 알림 읽음처리

* refactor: 필요 없는 부분 삭제

* feat: 회원 검증 로직 및 타입 관련 Request DTO 추가

* [feat/#188] 모임 추천 조회 API 구현 (#190)

* feat: 모임 추천 조회 API 서비스 메서드 추가

* feat: 모임 추천 조회 API 컨트롤러 구현

* feat: 모임 추천 조회 API 서비스 구현

* feat: 모임 추천 조회 및 사용자 주소 조회 리포지토리 메서드 구현

* feat: 사용자가 이미 가입한 모임은 추천되지 않도록 구현

* [feat/#164] 추천 운동 조회 API 구현 (#191)

* feat: 컨트롤러 구현

* feat: 반환을 리스트로 변경

* feat: DTO 구현

* chore: 오탈자 수정

* feat: 운동 조회 로직 구현

* feat: 서비스에서 반환 로직 구현

* feat: ExerciseItem을 List로 반환하도록 변경

* feat: 10개만 조회할경우 거리가 가까운 운동 조회 못할 수 있으므로 전체 조회로 변경

* feat: 정렬 로직 구현

* chore: 로그 출력

* feat: 반환 로직 구현

* refactor: 운동 아이템 List 형태로 반환하는 메서드 제거

* feat: 에러 코드 추가

* docs: 스웨거 설명 추가

* [refactor/#194] 도메인별 ENUM 패키지 구조 개선 (#196)

* refactor: 활동 요일 ENUM을 PARTY DOMAIN 아래로 변경

* chore: ContestController에서 안 쓰는 import 제거

* refactor: MemberPartyStatus Member 도메인 아래로 변경

* refactor: ExerciseOrderType 사용처에 맞게 네이밍 변경 및 Bookmark 도메인 아래로 변경

* refactor: MemberStatus Enum을 Member 도메인 아래로 변경

* refactor: MyPartyExerciseOrderType Enum을 Exercise 도메인 아래로 변경

* refactor: NotificationType Enum을 Notification 도메인 아래로 변경

* refactor: PartyStatus를 Party 도메인 아래로 변경

* refactor: 모임 신청 관련 Enum들을 Party 도메인 아래로 변경

* refactor: 운동 참여 상태  Enum 운동 도메인으로 변경

* refactor: 메달 종류 Enum 대회 도메인으로 변경

* refactor: 활동 시간, 모임 운동 타입, 모임 정렬 타입 Enum 모임 도메인으로 변경

* [refactor/#189] 대회 등록 API에서 이미지 업로드 분리 (#197)

* refactor: 대회 등록 API에서 이미지 서비스 분리

* refactor: 날짜 데이터 형식 변경

* [refactor/#199] 대회 기록 수정 API에서 이미지 업로드 분리 (#200)

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리 및 메서드 통합

* fix: 안 쓰는 코드 삭제

* [feat/#193] 내 참여 운동 조회 API 구현 (#201)

* feat: 필터 및 정렬 Enum 구현

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 필터 타입에 따른 정렬 로직 구현

* feat: 각 필터별 운동 조회 로직 구현

* feat: 빈 응답 조기 반환 로직 구현

* feat: 반환 로직까지 구현

* [feat/#198] 채팅 도메인 구현 (#203)

* Update issue templates

* [fix] cd 파일명 변경 gradle.yml to cd.yml

* [chore] ci 설정

* [fix] 파일이름 변경 ci to ci.yml

* [feat/#202] 특정 건물의 운동 상세 조회 API 구현 (#204)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 및 리포지토리 로직 구현

* feat: 날짜도 컨버터로 전달

* chore: DTO 네이밍 통일

* feat: 반환 로직 구현

* Update ci.yml

* debug: 충돌 해결 중 빠진 중괄호 추가

* Update ci.yml

* [feat/#205] 월간 운동 건물 지도 데이터 조회 API 구현 (#210)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 날짜 및 위치 정보 생성

* feat: 운동 조회 로직 구현

* feat: 필요없는 모임 조인 제거

* feat: 날짜별 건물 그룹핑 로직 및 반환 로직 추가

* feat: Addr의 위도 및 경도 필드 Float에서 Double로 자료형 변경

* fix: longitude 대신 latitude를 보내고 있던 로직 에러 해결

* feat: 날짜를 입력하지 않으면 오늘을 기본값으로 변경

* docs: 스웨거 수정

* feat: 위도와 경도 입력하지 않을 시 기본값으로 멤버 메인 주소를 사용

* feat: 거리 계산 로직을 위해 멤버 주소 또한 Double로 변경 + 사이드 이펙트 처리

* fix: 생성된 주소값을 반환하도록 변경

* docs: api 경로 변경 및 스웨거 설명 변경

* refactor: 클래스명 및 변수명 명확화

* docs: 스웨거 설명 추가

* [feat/#195] 모임 추천 조회 API 구현 (콕플 추천 / 필터) (#206)

* feat: QueryDSL 사용을 위해 의존성 추가 및 QuerydslConfig 구현

* fix: QueryDSL 추가로 인한 테스트 오류 방지를 위해 테스트용 yml 파일 추가

* feat: 모임 추천 조회 API 필터 요청을 담을 DTO 구현

* feat: 동적쿼리를 위한 리포지토리 추가 및 기존 리포지토리 상속

* feat: 동적쿼리를 처리하는 리포지토리 구현체 구현

* feat: 기존의 모임 추천 조회 컨트롤러에 필터 파라메터 및 정렬 조건 추가

* feat: 모임 추천 조회 서비스의 로직을 상황(콕플추천, 필터)에 따라 해당 로직을 사용하도록 구현

* feat: 동적쿼리가 정렬을 처리할 수 있도록 구현

* fix: record에서 불필요한 @Getter 제거 (에러발생)

* docs: 스웨거 요약문 변경

* fix: 삭제된 모임은 모임 추천 목록에 조회되지 않도록 수정

* refactor: PartyFilterDTO 객체 생성 빌더 패턴으로 리팩토링

* [feat/#120] 카카오 소셜로그인 구현 (#211)

* feat: SecurityConfig 일부 추가

* feat: 순수 회원가입 로직 작성

* feat: jwt 구현 완료

* feat: 카카오 소셜로그인 구현 및 테스트 완료

* fix: 로그인 한 사용자의 id를 가져올 수 있게 컨트롤러 수정

* fix: 테스트코드 삭제

* fix: 리다이렉트 uri 수정

* feat: cors 설정

* refact: 만료기간 상수로 분리

* [feat/#209] 모임 채팅방 목록 조회 API 구현 (#213)

* feat: 모임 채팅방 목록 조회 DTO 구현

* feat: 모임 채팅방 목록 조회 컨버터 구현

* feat: 모임 채팅방 목록 조회 컨트롤러 구현

* feat: 모임 채팅방 목록 조회 서비스 구현

* feat: 모임 채팅방 목록 조회 레포지토리 구현

* fix: 안쓰는 코드 삭제

* feat: 예외처리 구현

* refactor: 페이징 커서 방향 String에서 ENUM으로 교체

* refactor: getter 사용

* [refact/#214] 나이대 변수명 변경 (#219)

* refactor: 나이대 변수명 변경 (Age -> BirthYear)

* fix: SecurityConfig 파일 원복

* [feat/#217] 모임 생성 시 자동으로 모임 채팅방 생성 로직 구현 (#218)

* feat: 모임 생성 시 자동 채팅방 생성 및 모임장 채팅방에 자동 참여 로직 구현

* fix: 쿼리문 레포지토리 위치 수정

* [feat/#215] 모임 채팅방 이름 검색 API 구현 (#216)

* feat: 모임 채팅방 이름 검색 API 구현

* fix: 충돌 해결

* fix: 안 쓰는 임포트 제거

* feat: 모임 채팅방 이름 검색 쿼리 구현

* chore: 로그 추가

* fix: 레포지토리 수정

* [fix/#208] 모임 요청 파라미터 Enum 변환 및 검증 로직 수정  (#223)

* fix: 모임유형 한글로 입력을 받도록 수정

* fix: 활동시간 한글로 입력을 받도록 수정

* fix: 활동요일 한글로 입력을 받도록 수정

* docs: 급수 에러코드 설명문 변경

* feat: 키워드 한글 변환 로직 구현 및 에러코드 추가

* fix: 모임 추천 조회 필터의 입력값을 검증하도록 수정

* refactor: 급수 에러코드 CommonErrorCode 재활용

* [debug#225] 출생년도 비교로 변경 및 관련 필드명 변경

* [feat/#221] 모임 가입 수락 시 채팅방 자동 참여 로직 구현 (#226)

* [fix/#222] notification 테이블에 칼럼 추가 (#233)

* feat: notification 테이블에 칼럼 추가

* fix: memberId 방식 변경

* fix: Security Config 원상복구

* feat: 알림 이미지 전달 구현, key -> url 변환 구현

* feat: 로그인 후 상세정보 받기 구현

* [feat/#227] 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현 (#228)

* feat: 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현

* fix: 메세지 저장 방식 변경

* refactor: 채팅방 퇴장 메서드 추출

* fix: senderName 삭제

* [fix/#230] 모임 이미지 저장 방식 변경 및 imgKey 주소로 변환 (#234)

* fix: 모임 생성 시, imgKey를 전달받도록 변경

* debug: 모임 생성 시 이미지 null값 허용하여 에러 해결

* fix: 정적 팩토리 메서드와 모임 이미지 빌더 imgKey로 변경

* fix: PartyImg에서 imgUrl 필드 제거

* fix: 북마크 컨버터에 변경된 모임 imgUrl 호출 메서드 적용 및 static 제거

* fix: 채팅 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 운동 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 모임 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* refact: imageService 의존성 주입 및 변환 로직을 북마크 서비스로 이전

* refact: imageService 의존성 주입 및 변환 로직을 채팅 서비스로 이전

* refactor: imageService 의존성 주입 및 변환 로직을 모임 서비스로 이전

* [fix/#236] 대회 이미지 저장 방식 변경 (#237)

* fix: 대회 이미지 img_key만 저장하도록 수정

* refactor: 이미지 호출 관련 기존 컨버터에서 하던 로직을 서비스에서 하도록 리팩토링

* refactor: String으로 변결

* fix: 파라미터 조건 추가

* [feat/#192] 새로운 운동 추천 캘린더 조회 API 구현 (#229)

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 멤버 정보 조회 및 기간 계산

* refactor: 기간 계산 로직 DateRange 안의 메서드로 변경

* feat: 콕플 추천 필터링된 운동 조회 로직 구현

* fix: 정렬 로직을 컨버터에서 진행하므로 메서드 제거

* feat: 기본 where절 구현

* refactor: 조인할 예정이므로 exercise.party를 party로 수정

* feat: 필터 where절 구현

* feat: 쿼리 전체 로직 구현

* refactor: 모임 레벨 조인 대신에 Exists절로 변경

* refactor: 콕플 추천 조회 로직 EXISTS절로 급수 비교하도록 변경

* feat: 운동 리포지토리에서 커스텀 인터페이스를 상속받도록 변경

* feat: 동적 쿼리 로직 호출

* feat: 추가 정보 조회 로직 구현

* feat: Response 반환 로직 구현

* feat: 정렬 로직 구현을 위해 정렬 필드도 넘기기

* feat: 주별 그룹화 로직 구현

* feat: 거리 정렬 로직을 위해 필드 추가

* feat: 콕플 추천 정렬 로직 구현

* feat: 필터 정렬 로직 구현

* feat: 데일리 아이템 생성 로직 구현

* feat: 위클리 생성 로직 구현

* fix: Party 필드명 변경에 따른 변경사항 적용

* fix: 나이 대신 생일년도로 비교하도록 변경

* feat: 참여인원이 많은 순으로 정렬을 위해 역방향으로 정렬

* [fix/#235] 운동 도메인에 이미지 로직 변경 적용 (#244)

* feat: 컨버터에 이미지 키 변환 메서드 추가

* fix: 새로운 운동 추천 캘린더 조회 API에 로직 반영

* fix: 운동 추천 조회 API에 로직 반영

* fix: 내 모임 운동 캘린더 조회 API에 로직 반영

* fix: 내 모임 운동 전체 조회 API에 로직 반영

* fix: 내 참여 운동 캘린더 조회 API에 로직 반영

* fix: 건물 운동 상세 조회 API에 로직 반영

* feat: 멤버 이미지 url 받아오는 메서드 추가

* fix: 운동 상세 조회 API에 로직 반영

* [feat/#232] 신규 멤버 추천 API 구현 (#246)

* feat: 추천 멤버 DTO 구현

* feat: 추천 멤버 조회 API 서비스 메서드 추가

* feat: 추천 멤버 조회 API 서비스 컨트롤러 구현

* feat: 추천 멤버 조회 API 커스텀 리포지토리 추가

* refact: 사용자의 id가 필요없기에 제거 및 오타 수정

* feat: 추천 멤버 조회 API 서비스 구현

* feat: 추천 멤버 조회 API 컨버터 구현

* fix: 프로필 이미지 key -> url 변환 로직 구현 및 적용

* feat: 추천 멤버 조회 동적 쿼리 구현

* fix: 검색 조건을 적용하는 경우도 기본적으로 모임 급수로 필터링하도록 수정

* [fix/#239] 로그인 후 상세 정보 받기 API 로직 수정 (#240)

* fix: 일부 로직 에러 수정

* fix: 시큐리티 원래대로

* feat: 찜 개수 제한 관련 로직 추가 (#242)

* [feat/#248] 웹소켓 기본 설정 및 연결 관리 구현 (#249)

* feat: WebSocket 의존성 추가

* feat: WebSocket 설정 구현

* feat: WebSocket 메시지 Enum 구현

* feat: 웹소켓 핸들러 틀 구현

* feat: 웹소켓 연결 완료 후 로직 구현

* feat: 웹소켓 종료 후 로직 구현

* feat: 웹소켓 전송 에러 로직 구현

* [feat/#243] 개인 채팅방 생성 및 참여 API 구현 (#245)

* feat: 개인 채팅방 생성 및 참여 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 및 레포지토리 구현

* fix: 칼럼 수정 및 추가

* chore: 예외처리 추가

* chore: 자동 정렬

* feat: 사용자 이름 바뀌었을때, displayName 동기화 구현

* fix: senderName 삭제

* feat: 개인 채팅방 목록 조회 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 구현

* [feat/#252] 개인 채팅방 이름으로 검색 API 구현 (#254)

* fix: 오타 수정

* feat: 컨트롤러 구현

* feat: 서비스 구현

* feat: 레포지토리 구현

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* [feat/#162] 알림 추가 로직 구현 (#253)

* feat: 알림 추가 로직 구현

* feat: 알림 추가 로직 개발

* fix: bookmark컨트롤러 시큐리티 활성화

* feat: 개수 제한  추가

* feat: title 추가

* [fix/#255] 알림 전체 조회 응답에 data 필드 추가 (#263)

* [feat/#247] 신규 멤버 초대 보내기 API 구현  (#257)

* feat: PartyInvitation 엔티티 구현

* feat: 멤버 초대 보내기 API DTO 구현

* feat: 멤버 초대 보내기 API 서비스 메서드 추가

* feat: 멤버 초대 보내기 API 컨트롤러 구현

* feat: 멤버 초대 보내기 API 서비스 구현

* feat: 멤버 초대 리포지토리 구현

* feat: 대기 중인 초대 검증 에러코드 추가

* feat: 멤버 초대 보내기 API 컨버터 구현

* [feat/#264] 개발자 테스트용 토큰 발급 (#266)

* fix: 운동 도메인 id값 로그인한 사용자 id로 변경 (#268)

* [feat/#262] 모임 초대 처리 API 구현 (#270)

* feat: 모임 초대 처리 API DTO 구현

* feat: 모임 초대 처리 API 서비스 메서드 추가

* feat: 모임 초대 처리 API 컨트롤러 구현

* feat: 모임 초대 처리 API 서비스 구현

* feat: 모임 초대 상태 변경 비즈니스 메서드 구현

* feat: 모임 초대 처리 API 에러코드 추가

* fix: 모임 초대 시 채팅 참여 메서드 추가 및 JoinPartyChatRoom 범용적으로 사용 가능하도록 리팩토링

* [fix] cors 수정

* [fix/#238] 모임 유형을 오후 또는 오전으로 조회 시, 상시도 조회되도록 수정 (#272)

* fix: 모임 유형 오전, 오후 조회 시 상시도 조회되도록 로직 구현

* [fix] cors 수정

* chore: 안 쓰는 import문 제거

* feat: 모임 유형이 오전, 오후인지 체크하는 Utils 클래스 생성

* fix: 모임 유형 오전 or 오후 조회 시 상시도 조회되도록 변경

* refactor: 조건 로직을 Utils 메서드를 사용하도록 변경

---------

Co-authored-by: kanghana1 <qazplm12093@naver.com>
Co-authored-by: dmori <chosehoon2@naver.com>

* [chore/#274] 운동 도메인에서 이미지 url 필드명을 profileImageUrl로 통일 (#275)

* chore: 운동 상세 조회 API에서 필드명 변경

* chore: 운동 추천 조회 API에서 필드명 변경

* chore: 건물 운동 상세 조회 API에서 필드명 변경

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* [refactor/#276] 운동 도메인 커맨드 서비스 분리 (#277)

* refactor: 운동 생성 검증 로직 이동

* refactor: 운동 신청 검증 로직 이동

* refactor: 게스트 초대 로직 검증 이동

* refactor: 운동 참여 취소 로직 검증 이동

* refactor: 게스트 초대 취소 로직 검증 이동

* refactor: 매니저에 의한 운동 참여 취소 로직 검증 이동

* refactor: 운동 삭제 로직 검증 이동

* refactor: 운동 업데이트 로직 검증 이동

* refactor: 운동 신청 메서드 참여 서비스로 이동

* refactor: 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 매니저에 의한 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 게스트 초대 메서드 게스트 서비스로 이동

* refactor: 게스트 초대 취소 메서드 게스트 서비스로 이동

* chore: 커맨드 서비스 이름 생명주기 서비스로 변경

* chore: 메서드 파일 내 순서 변경

* refactor: 운동 생성 로직 CommandService에서 호출하도록 변경

* refactor: 운동 삭제 로직 CommandService에서 호출하도록 변경

* refactor: 운동 업데이트 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 취소 로직 CommandService에서 호출하도록 변경

* refactor: 특정 참여자 운동 취소 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 취소 로직 CommandService에서 호출하도록 변경

* refactor: 패키지 구조 변경

* [feat/#231] 모임 정보 수정 API 구현 (#278)

* feat: 모임 정보 수정 DTO 구현

* feat: 모임 정보 수정 API 서비스 메서드 추가

* feat: 모임 정보 수정 API 컨트롤러 구현

* feat: 모임 정보 수정 API 서비스 구현

* feat: 정보 수정 비즈니스 로직 및 연관관계 편의 메서드 구현

* fix: 모임 정보 수정 DTO 검증 추가

* [feat/#279] 초기 채팅방 조회 API 구현 (#281)

* feat: 컨트롤러 구현

* fix: 메시지 중 이모지는 TEXT로 통합되어서 보내짐, 입장 및 퇴장을 처리하는 SYSTEM 필드로 수정

* feat: DTO 구현(채팅방 정보, 메시지 리스트, 참여자 리스트로 구분)

* chore: 메서드 명 명확화

* feat: 서비스 틀 구현

* feat: 채팅방 및 채팅방 참여 권한 검증

* feat: 채팅방 유형에 따라 가져오는 정보 분기 로직 구현

* refactor: 상대방 조회하는 로직이 N+1 문제를 불러일으키므로 이를 DB 조회 방식으로 해결

* refactor: 조회한 상대방 정보에서 멤버까지 접근하여 이름 필드 사용하도록 변경

* refactor: 모임 프로필 조회 시 N+1 문제가 발생하므로 이를 FETCH JOIN으로 해결

* fix: 잘못된 네이밍 변경

* feat: ChatInfo 생성 로직 구현

* feat: 최신 50개 메시지 조회 로직 구현

* feat: 메시지 정보 생성 로직 구현

* refactor: stream 로직 개선

* fix: 메시지 조회할 때 멤버도 조인하도록 변경

* feat: 메시지 정보 반환 로직 구현

* fix: 채팅방 멤버 조회할 때 멤버와 멤버 프로필까지 조회하도록 변경 + 이름순 정렬

* refactor: stream 로직 메서드 추출

* feat: 멤버 정보 반환 로직 구현

* feat: 마지막 메시지까지 읽음 처리

* feat: Response 반환 로직 구현

* fix: 메서드명 명확화

* chore: 개행 제거

* [debug/#289] 전송 이미지 크기 설정 (#293)

* [feat/#280] 과거 메시지 조회 API 구현 (#282)

* feat: 컨트롤러 구현

* feat: DTO 구현

* fix: Slice로 반환받기 위해 Response 객체 대신 MessageInfo를 직접 반환

* feat: 채팅방 멤버 검증 로직 구현

* feat: 커서 기반 메시지 조회 로직 구현

* fix: Transactional 어노테이션 잘못된 import 정정

* refactor: 정렬 로직이 필요없으므로 Pageable 대신 필요한 필드만 사용하도록 변경 + List로 반환

* feat: hasNext 판별 로직 구현

* feat: 오래된 순으로 조회했으므로 다시 반전

* feat: 메시지 정보 반환 로직 구현

* feat: 다음 커서 반환 로직 구현

* feat: 응답 반환 로직 구현

* fix: JPQL에서는 LIMIT를 지원하지 않으므로 Pageable로 데이터 크기 제한

* [feat/#256] 모임 채팅방 목록 조회 slice 기반 무한스크롤 구현 (#261)

* [fix/#291] 모임 id값 로그인한 사용자 id로 변경

* [fix/#294] 초대 알림 추가시 invitationId 넘겨주기 (#295)

* fix: 이미지 요청 크기 늘리기

* fix: data필드에 invitationId 추가

* [feat/#260] 모임 관련 알림 생성 로직 추가 (#290)

* feat: 모임 관련 알림 생성 로직 추가

* fix: INVITE일 경우, invitationId도 알림생성요청 dto에 포함

* debug: 에러 코드 변경

* [feat/#250] 메시지 전송 기능 구현 (#259)

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* debug: rebase 과정 중 빌드 에러 해결

* fix: 채팅룸 네임 필드 삭제 (#304)

* [fix/#302] 하드코딩->로그인 아이디로 변경 (#303)

* fix: AWS 배포 과정에서 gradle 의존성 캐싱하도록 변경

* [feat/#283] 모임 채팅방 나가고 들어올 때 시스템 메시지 보내는 로직 구현 (#308)

* feat: 모임 입출입 ENUM 구현

* feat: 모임 입출입 이벤트 구현

* feat: 모임 입출입 이벤트 리스너 구현

* fix: 메시지 타입 중 이미지 제거

* feat: 이벤트 리스너에서 웹소켓 서비스를 호출하여 시스템 메시지 전송 로직 시작

* chore: 패키지명 변경

* feat: 핸들러와 서비스의 순환 참조 방지를 위해 시스템메시지 이벤트 구현

* fix: 웹소켓 서비스에서 시스템 메시지 이벤트 발행

* feat: 시스템 메시지 이벤트 리스너 구현 - 브로드캐스트 진행

* feat: 모임 채팅방 참여 이벤트 발행

* feat: 모임 채팅방 퇴장 이벤트 발행

* feat: Async 어노테이션 활성화를 위해 Config 구현

* chore: WebSockeetMessageDTO 객체 위치 변경

* refactor: 웹 소켓 연결도 enum값으로 처리하도록 변경

* refactor: 브로드캐스트 서비스 분리(1) - 웹소켓 연결

* refactor: 브로드캐스트 서비스 분리(2) - 웹소켓 종료

* refactor: 브로드캐스트 서비스 분리(3) - 브로드캐스트

* refactor: 테스트 메서드 이동

* refactor: 채팅방 멤버 변경 이벤트 발행

* fix: 모임에서 나가고 들어오는 것과 채팅방 나가고 들어오는 걸 하나의 트랜잭션에서 처리

* fix: 채팅방 나가고 들어오는 이벤트 리스너 구현

* feat: 채팅방 나가고 들어오는 로직 및 메시지 전송 로직 ChatRoomService에 구현

* fix: 필요없는 메서드들 제거

* fix: 세션 추가 메서드 네이밍 명확화

* fix: 웹소켓 핸들러만 테스트하도록 변경

* refactor: 시스템 메시지 보내는 로직을 웹소켓 서비스로 이동

* fix: 핸들러 테스트 제외하고 포스트맨으로 테스트하도록 변경

* refactor: 웹소켓 서비스에서 브로드캐스트 로직 처리하도록 변경

* [feat/#284] 개인 채팅 slice기반 목록 조회 구현 (#309)

* [feat/#305] redis 기본 설정 추가 및 도입 (#313)

* debug: 임시로 웹소켓 경로 허용 (#316)

* [feat/#265] 채팅방 구독 로직 구현 (#314)

* feat: 채팅방 구독 로직 틀 구현

* chore: 브로드캐스트 서비스 구독 서비스로 이름 변경

* feat: 채팅 메시지 전송 이벤트 구현

* refactor: 메시지 전송을 이벤트 발행으로 처리하도록 변경

* feat: 채팅 구독 이벤트 레코드 구현

* refactor: 채팅방 멤버 전체 브로드캐스트 대신 구독자만 브로드캐스트 하기 위해 구독 관리 방식 변경

* refactor: 네트워크 I/O는 성능에 별로 영향을 주지 않으므로 for문으로 변경

* fix: 실패한 사용자 처리 로직 구현

* fix: 구독 로직을 ChatWebSocketService 대신 SubscriptionService에서 진행

* feat: 구독 반환 DTO 구현

* feat: 구독 이벤트 발행 로직 및 성공 메시지 반환 로직 구현

* feat: 구독 이벤트 리스너 구현

* feat: 발신자 제외 브로드캐스트 기능 추가 - 자기 메시지 중복 수신 방지

* fix: 웹소켓 연결 시 멤버 이름 설정 안하는 에러 해결

* [feat/#306] JWT를 활용해 웹소켓 연결 인증 단계 구현 (#317)

* feat: HandShakeInterceptor 구현체 틀 구현

* feat: 에러 처리 로직 틀 구현

* feat: URL에서 JWT 토큰 추출

* feat: 멤버 id를 jwt에서 추출하여 세션에 넣어두기

* feat: 인터셉터 단계 추가하고 프론트 url만 허용하도록 변경

* develop 브랜치와 충돌 해결

* [feat/#287] 다운로드 토큰 발급 구현 (#310)

* feat: DownloadToken 엔티티 구현

* feat: 다운로드 토큰 발급 DTO 구현

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* feat: 다운로드 토큰 발급 API 컨트롤러 구현

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* ChatMessageFile 엔티티 구현

* feat: 다운로드 토큰 발급 API 서비스 구현

* feat: DownloadToken 정적 팩토리 메서드 구현

* feat: 다운로드 토큰 발급 API 리포지토리 추가

* feat: 다운로드 토큰 발급 API 에러코드 추가

* feat: 다운로드 토큰 발급 API 컨버터 구현

* feat: 양방향 연결을 위해 chatMessageFile 필드 추가

* [feat/#288] 파일 다운로드 구현 (#318)

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* feat: 채팅 파일 다운로드 API 서비스 메서드 추가

* feat: 채팅 파일 다운로드 API 컨트롤러 구현

* feat: 채팅 파일 다운로드 API 서비스 구현

* feat: 채팅 파일 다운로드 API 에러코드 추가

* feat: 채팅 파일 다운로드 API 리포지토리 메서드 추가

* feat: 이미지 서비스에 파일 다운로드 메서드 구현

* fix: 토큰 유효시간 3분으로 수정

* fix: cors 프론트엔드 url 반영

* [feat/#319] 개발자용 토큰 발급 API(다른 사용자) 구현 (#320)

* feat: 컨트롤러 구현

* feat: 메서드 구현

* feat: 다른 사용자 개발자 토큰 발급도 스프링 시큐리티에서 허용하도록 변경

* [fix/#324] 모임 주소 중복 유니크 제약조건 추가 (#325)

fix: 모임 주소 중복 유니크 제약조건 추가

* [feat/#300] 채팅방 구독 해제 로직 (#321)

* feat: 구독 해제 핸들러 구현

* feat: 구독해제 이벤트 생성 메서드 구현

* feat: 이벤트 리스너 로직 구현

* feat: 구독 해제 로직 구현

* [feat/#311] 파일 다운로드 리팩토링 / 파일 업로드 API 구현 (#323)

* bug: 잘못된 다운로드 토큰 url 생성 로직 수정

* fix: Pre-signed URL로 임시 마스터키 발급

* refact: 직접 s3 object를 가져오도록 리팩토링하여 성능항샹 및 문제 해결

* refact: 파일 업로드에서도 통일된 enum타입을 사용하기 위해 ImgType -> DomainType으로 명칭 변경

* feat: 파일 업로드 API 컨트롤러 구현

* feat: 파일 업로드 API 서비스 구현

* refact: enum에 해당 도메인 경로 저장하도록 리팩토링

* refact: 중복 로직을 공통 메서드로 구현 및 파일/이미지 업로드하는 uploadToS3 메서드 구현

* refact: 불필요한 extractKeyFromUrl 메서드 제거

* refact: UploadDTO 형식 통일

* [feat/#322] 탈퇴 회원 시큐리티 필터에서 검증 (#327)

* feat: 탈퇴 회원 시큐리티 필터에서 검증

* fix: 에러메시지  수정

* [feat/#328]  JWT null인 경우 예외처리 (#329)

* [feat/#296] 키워드 추가 API 구현 (#330)

* feat: 키워드 추가 API DTO 구현

* feat: 키워드 추가 API 서비스 메서드 추가

* feat: 키워드 추가 API 컨트롤러 구현

* feat: 키워드 추가 API 서비스 구현

* feat: 키워드 추가 검증 에러코드 추가

* feat: 키워드 추가 API 리포지토리 구현

* [feat/#335] 키워드 삭제 API 구현 (#336)

* feat: 키워드 삭제 API 컨트롤러 구현

* feat: 키워드 삭제 API 서비스 메서드 추가 및 서비스 구현

* feat: 키워드 삭제 비즈니스 로직 구현

* feat: 키워드 삭제 에러코드 추가

* feat: 키워드 삭제 API 리포지토리 구현

* [feat/#301] 채팅방 자동 읽음 로직 구현 (#331)

* feat: 핸들러 구현

* feat: 웹소켓 Request DTO에 마지막으로 읽은 메시지 ID 넣기

* feat: 채팅 메시지 읽기 이벤트 구현

* refactor: 이벤트 트랜잭션 최적화

* feat: 이벤트 리스너 구현

* feat: 마지막으로 읽은 메시지 업데이트

* feat: 브로드캐스트할 읽음 반환 레코드 구현

* feat: 브로드캐스트할 메시지 생성 로직 구현 및 브로드캐스트 호출

* fix: 브로드캐스트 메시지 변수명 변경

* refactor: 브로드캐스트 오버로딩을 위해 Sealed 인터페이스 구현

* feat: 읽음 메시지 브로드캐스트 로직 구현

* refactor: 메시지 브로드캐스트 메서드명 변경

* fix: 필드명 통일

* debug: 메시지 업데이트 쿼리 에러 해결

* fix: 읽음 메시지 브로드캐스트 할 때 마지막으로 읽은 메시지 정보 반환하지 않도록 변경

* fix: 구독된 채팅방 자동읽음 처리를 위해 기존 로직 전부 삭제

* feat: 메시지 자동 읽음 이벤트 로직 구현

* feat: 읽음 처리 로직 구현

* fix: 사용하지 않도록 변경한 메서드 제거

* debug: LEFT JOIN으로 개인 채팅 조회 안 되는 에러 해결 (#338)

* [fix/#297] 여복인 경우 MaleLevel 추가 불가능하도록 수정 (#340)

* fix: 여복인 경우, 남자 급수를 방지하는 검증 로직 추가

* feat: 에러코드 추가

* [fix/#326] 특정 지역으로 조회 시, addr2가 전체인 모임도 조회되도록 수정 (#341)

* [fix/#334] 개인 채팅에서 처음 메시지 보내면 채팅방 초대 로직으로 변경 (#342)

* feat: 채팅방 멤버 엔티티에 상태 추가

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* refactor: 모임 채팅방 생성 로직 채팅 도메인으로 이동

* refactor: 채팅방 생성 + 자동 참여 로직 엔티티 메서드로 리팩터링

* refactor: 모임 채팅방 자동 참여 시 null인지 체크하도록 검증 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 모임 채팅방 생성 메서드명 명확화

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* refactor: 멤버 조회 메서드 네이밍 명확화

* fix: 채팅방 멤버 나는 참가 상태로, 상대방은 대기 상태로 생성

* fix: 개인 채팅방 목록 조회 및 검색 시 JOINED 상태인 경우만 조회하도록 변경

* feat: 개인 채팅방에서 첫 메시지 전송일경우 상대방도 초대하도록 변경

* fix: @Builder.Default 어노테이션으로 일대다 필드를 생성하지 않아도 기본값으로 생성하도록 변경

* docs: 개인 채팅방 생성 및 참여 api 설명 명확화

* chore: api 클래스 내 순서 변경

* refactor: /chats는 RequestMapping으로 처리

* [fix/#345] 급수 조건이 맞지 않더라도 모임의 멤버가 될 수 있도록 수정 (#346)

* fix: 모임 가입신청 시, 급수 조건에 적합한지 검증하는 로직 제거

* refact: 기존 나이대 조건, 성별 조건 검증 메서드를 모임 생성에도 활용할 수 있도록 리팩토링

* fix: 운동 신청 시 급수 조건 검증 로직 주석처리 (#349)

* fix: 임시 url -> 실제 메달 이미지 url (#351)

* [feat/#355] 운동 수정을 위한 조회 API 구현 (#356)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 구현

* feat: 컨버터 구현

* docs: 조회 조건 삭제

* fix: 모임 운동 캘린더 조회 API에서 운동 참여 여부도 반환하도록 변경 (#354)

* [feat/#350] 모임 id로 roomid 조회 API 구현 (#352)

* feat: 채팅방 id 조회 API DTO 추가

* feat: 채팅방 id 조회 API 컨트롤러 구현

* feat: 채팅방 id 조회 API 서비스 구현

* feat: 채팅방 id 조회 API 컨버터 구현

* feat: 멤버 검증을 위한 리포지토리 메서드 추가

* feat: 채팅방 id 조회 API 에러코드 추가

* docs: README 작성 (#358)

* [fix/#361] 모임 관련 검증 수정사항 반영 (#363)

* fix: 가입신청 처리 시, 이미 멤버인지 검증 로직 추가

* fix: 모임 생성 시, 급수 조건에 적합한지 검증하는 로직 제거

* [fix/#362] 현재 (목록/개인) 채팅방 목록 조회 및 검색 API에서 채팅방이 없을 때 에러 던지는 걸 빈 배열 던지는 걸로 반환 (#364)

* fix: 모임 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* fix: 개인 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* debug: 웹소켓 설정에서 프론트 배포 주소 CORS 허용 (#360)

* [fix/#332] 채팅 메시지 조회할 때 읽지않은 멤버 수도 반환하도록 변경 (#344)

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* feat: 메시지 읽음 상태 엔티티 구현

* feat: 채팅 보낼 시 채팅방 읽음 상태 생성 후 저장

* feat: 채팅 구독자들 메시지 읽음으로 변경

* feat: 마지막으로 읽은 메시지 id도 업데이트 하도록 구현

* refactor: 채팅방 목록 조회 시 안 읽은 메시지 카운트를 메시지 읽음 상태 테이블에서 조회하도록 리팩터링

* feat: 브로드캐스트 할 DTO에 안 읽은 멤버 필드 추가

* feat: 메시지 보낼 때 지금 구독자 수 체크하는 메서드 구현

* feat: 구독자들 읽음 상태로 변경 및 안읽은 메시지 수 반환하기

* feat: 안 읽은 사람 수도 반환하도록 변경

* refactor: 이벤트 구조로 처리하는 대신 활성 구독자 수 체크하며 한 번에 읽음 상태 업데이트

* feat: 구독 시 메시지마다 안 읽은 수 업데이트 정보 틀 구현

* feat: 안 읽은 메시지 id 리스트 조회

* feat: 안 읽은 메시지가 없을 때 로직 구현

* feat: 메시지마다 안 읽은 사람 수 카운트 로직 구현

* feat: 채팅방 구독할 때 마지막 메시지 업데이트 하도록 변경

* feat: 구독 시 메시지 업데이트 브로드캐스트 로직 구현

* debug: Long으로 반환하기 위해 Query문 사용

* chore: 사용하지 않는 메서드 정리

* feat: 구독하는 사람은 업데이트 메시지 받지 않도록 변경

* [debug/#365] 잘못된 사용자id를 넘겨주어 생기던 로직 오류 해결 (#366)

* [docs] 리드미 약간 수정

* [feat/#367] 채팅 보낼 때 이미지와 파일도 같이 보낼 수 있도록 로직 추가 (#373)

* fix: 메시지 전송 시 파일과 이미지들도 보낼 수 있도록 DTO 필드 추가

* fix: 이벤트 생성 시 파일과 이미지들도 보내도록 변경

* chore: 사용하지 않는 서비스 제거

* fix: 리스너와 서비스에서 파일과 이미지들 받도록 변경

* refactor: dirty checking으로 불필요한 저장 로직 제거

* feat: 메시지 저장할 때 이미지와 파일도 저장

* refactor: 브로드캐스트 응답과 분리하기 위해 중첩 record로 변경

* fix: 브로드캐스트 할 때 파일 정보와 이미지 정보를 담을 DTO 구현

* feat: 브로드캐스트할 파일 및 이미지 DTO 생성 로직 구현

* feat: 브로드캐스트 DTO에 누락된 필드 추가

* fix: 브로드캐스트 DTO 생성 로직에 이미지와 파일 필드 추가

* fix: 채팅 이미지 엔티티 다운로드를 위해 수정

* fix: 채팅 이미지 Request 필드 수정

* fix: 채팅 이미지 생성 필드 수정

* fix: 내용, 이미지, 파일 모두 없을경우 에러를 던지도록 변경

* fix: 일대다 매핑에서 Builder.Default 추가

* chore: 필요없는 엔터 제거

* [feat/#370] 이미지 다운로드 API 구현  (#371)

* fix: ChatMessageImg 수정

* feat: 채팅 이미지 다운로드 API 서비스 추가

* feat: 채팅 이미지 다운로드 API 서비스 구현

* debug: 오타 수정

* fix: 파일 업로드 시에도 파일 이름, 크기, 타입을 반환하도록 수정

* [fix/#339] 급수 검색에서 포함된 글자만으로도 조회되도록 수정 (#374)

* fix: 급수 검색에서 포함된 글자만으로도 조회되도록 수정

* [fix/#375] 모임 상세 조회 응답 필드 추가 (#377)

* fix: 모임 상세정보 DTO에 필드 추가

* feat: 대기중인 가입신청 여부를 확인하는 비즈니스 로직 구현

* feat: 수정사항 반영하여 컨버터에 추가

* debug: 운동 상세 조회 API에서 멤버 ID값이 아닌 멤버 운동 참여 ID값을 반환하던 로직 에러 해결 (#381)

* debug: CD 최신 이미지 반영 문제 해결 (#383)

* debug: 남아있는 컨테이너 강제 제거하는 스크립트 추가 (#384)

* [fix/#385] 채팅방 목록에서 마지막 메시지 표시 로직 개선 (#386)

* feat: 엔티티에 마지막 메시지 내용 반환하는 메서드 구현

* fix: content대신 마지막 메시지 내용 반환 메서드 사용

* [fix/#388] 키워드 추가를 다중 선택이 가능하도록 수정 (#389)

* fix: 키워드 추가 DTO 리스트로 수정

* fix: 키워드 추가 API 수정 및 연관관계 편의 메서드 추가

* fix: 키워드 삭제 및 사용하지 않는 에러코드 제거

* debug: content가 비어있을 때 hasContent가 true가 되는 에러 해결 (#391)

* [fix/#392] 모임 목록 조회 시, 응답에 찜 여부 추가 (#394)

* fix: 찜 여부를 모임 목록, 모임 상세 조회 DTO에 추가

* fix: 서비스 메서드에 북마크 여부를 확인하는 로직 추가

* fix: 찜한 모임들의 ID을 조회하는 메서드 리포지토리에 추가

* fix: 찜 여부 필드 컨버터에 추가

* [fix/#379] 프로필 이미지 관련 오류 수정 (#393)

* [feat/#372] WebSocket 요청마다 에러를 반환하도록 개선 (#395)

* feat: 구독 시 에러 메시지 반환을 위해 메서드 분리

* feat: 구독 해제 시 에러 메시지 반환을 위해 메서드 분리

* feat: 메시지 전송 시 에러 메시지 반환을 위해 메서드 분리

* fix: 에러 메시지 전송할 때 채팅방 ID 반환 로직 제거

* refactor: 메시지 전송 시 즉시 검증으로 리팩토링

* feat: 구독 및 구독 해제 검증 로직 구현

* refactor: 같은 의미를 담고 있는 에러 코드 통합

* fix: 에러 응답에 채팅방 id 미포함으로 변경

* fix: 에러 응답시 메시지 제대로 포함되도록 변경

* refactor: 웹소켓 연결 성공 시 멤버 정보 조회 메서드를 멤버 쿼리 서비스로 이동

* refactor: 웹소켓 서비스 네이밍 내부 코드에 따라 채팅 송신 서비스로 명확화

* refactor: 웹소켓 서비스들 패키지 분리

* refactor: 웹소켓 메세지 응답 로직 별도 서비스로 분리

* chore: import문 및 코드 스타일 정리

* [fix/#379] 프로필 사진 수정 오류 (#396)

* [fix/#398] 토큰 재발급 경로 permitAll 처리 (#399)

* fix: 토큰 재발급 경로 permitAll 처리

* fix: 리프레시토큰 null 예외처리

* fix: 리프레시토큰 null 예외처리

* [feat/#400] 채팅 메시지에서 이모티콘과 일반 이미지 구분 기능 구현 (#402)

* feat: 채팅 메시지 이미지 엔티티에서 이모티콘 여부 필드 추가

* feat: 초기 채팅방 조회 API에서 이미지 필드 List를 이미지 객체로 변환

* refactor: 이미지 정보와 멤버 정보 공통 DTO로 분리 -> 추후 같은 기능을 하는 메서드를 합치기 위함

* refactor: 메시지 조회 로직에서 중복된 코드를 CommonDTO를 활용해 제거

* refactor: 컨버터 로직 구현

* refactor: 메시지 보낼 때도 이모지 필드 반환하도록 변경

* [fix/#397] 모임 초대, 가입신청 처리 알림 추가  (#401)

* feat: 알림 dto의 필드 및 enum 추가

* fix: 알림 생성자 메서드 추가

* fix: 모임 초대 처리 시, 알림 생성 코드 구현

* fix: enum 명칭 변경 (모임 초대 승인)

* fix: 가입 신청 처리 알림 생성자 및 enum 추가

* fix: 가입 신청 처리 시, 알림 생성 코드 구현

* fix: 알림 내용에 모임 이름 제거

* [feat/#403] 마이프로필 키워드 조회 추가 (#404)

* [chore/#405] 리프레시 토큰 재발급 텀 줄이기 (#406)

* fix: 내 운동 리스트 조회 API에 레벨 필드 추가 (#408)

* [feat/#343] Redis 기반 채팅방 구독 관리 시스템 구축 (#409)

* feat: Redis 설정 중 lettuce 클라이언트 도입…
kanghana1 added a commit that referenced this pull request Dec 27, 2025
* [feat/#46] 내 대회 기록 상세조회 API 구현 (#54)

* feat: 내 대회 기록 상세 조회 응답 DTO 구현

* feat: 내 대회 기록 상세 조회 컨버터 구현

* feat: 내 대회 기록 상세 조회 컨트롤러 구현

* feat: 내 대회 기록 상세 조회 서비스 구현

* refator: 이미지, 동영상 순서 정렬 기능 추가

* [feat/#55] 내 대회 기록 리스트 조회 (전체, 미입상) API 구현 (#58)

* refator: 미입상 NONE 추가

* feat: 내 대회 기록 심플 조회 응답 DTO 구현

* refator: GET 메서드 queryService로 옮기기

* feat: 내 대회 기록 심플 조회, 리스트로 변환 컨버터 구현

* feat: 내 대회 기록 리스트 조회 컨트롤러 구현

* feat: 내 대회 기록 리스트 조회(전체, 미입상) 서비스 구현

* refactor: 내 대회 기록 리스트 조회(전체, 미입상) 하나의 API로 수정

* fix: static 삭제

* refactor: 메서드 인라인

* chore: 주석

* chore: yml 고치기 (#63)

* [feat/#57] 운동 삭제 API 구현 (#60)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* feat: 멤버 권한 검증 로직 구현

* chore: Party 엔티티에서 운동 생성 메서드 위치 변경

* feat: 운동 삭제 로직 구현

* feat: 반환 로직 구현

* [feat/#43] 운동 게스트 삭제 API 구현 (#56)

* feat: 컨트롤러 구현

* feat: 검증 로직 구현

* feat: 게스트 삭제 로직 구현

* feat: 에러 코드 구현

* feat: 운동 시작 여부 검증 로직 추가

* [refactor/#61] 운동 참여자 수 계산 로직 수동 증가에서 사이즈 계산으로 변경 (#65)

* refactor: nowCapacity 필드 제거

* refactor: nowCapacity 필드 사용 메서드 수정

* refactor: 현재 인원 반환 메서드 추가

* refactor: 람다식 메서드 참조로 변경

* refactor: 다음 순번 계산 메서드 추가

* [feat/#34] 모임 가입 신청 멤버 조회 API 구현 (#68)

* refactor: 용어 혼용 방지를 위해 모임 가입신청 생성 API의 DTO 명칭 변경

* feat:모임 가입신청 조회 DTO 구현

* feat: 모임 가입신청 조회 서비스 인터페이스 추가

* feat: 모임 가입신청 조회 API 컨트롤러 구현

* feat: 모임 가입신청 리포지토리에 조회 메서드 추가

* feat: 모임 가입신청 조회 서비스 구현

* feat: 권한 없음 에러 코드 추가

* feat: 모임 가입신청 조회 API 컨버터 구현

* refactor: PartyJoinRequest를 BaseEntity에 상속받도록 수정

* feat: Member와 프로필 이미지 양방향 관계 설정

* refactor: 테스트 진행을 위해 memberId 임시값 변경

* feat: 모임 가입신청 목록을 최신순으로 정렬하도록 기본값 추가

* [feat/#59] 내 대회 메달 조회 API 구현 (#67)

* feat: 내 메달 개수 조회 응답 DTO 구현

* feat: 쿼리 메서드 구현

* feat: 메달 개수 조회 컨버터, 컨트롤러 구현

* feat: 메달 개수 조회 서비스 구현

* chore: log.info() 추가

* [feat/#70] 다른 회원의 대회 기록 상세조회 API 구현 (#71)

* feat: 다른 사람의 대회 기록 상세조회 응답 DTO 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 컨버터 구현

* feat: 다른 사람의 대회 기록 상세조회 컨트롤러 구현

* feat: {내/다른 사람}의 대회 기록 상세조회 통합 서비스 구현

* [feat/#73] 다른 회원의 대회 기록 리스트 (전체, 미입상) API 구현 (#74)

* feat: 다른 사람의 대회 기록 리스트 조회 API 컨트롤러 구현

* refactor: {내/다른 사람}의 대회 기록 리스트 조회 통합 서비스 구현

* chore: 주석 수정

* [feat/#75] 다른 회원의 대회 메달 조회 API 구현 (#76)

* chore: 주석 수정

* feat: 다른 사람의 대회 메달 개수 조회 API 컨트롤러 구현

* [feat/#66] 운동 수정 API 구현 (#69)

* feat: 컨트롤러 구현

* feat: 모임장 운동 취소 API에서 누락된 @Valid 어노테이션 추가

* feat: DTO 구현

* feat: 검증 로직 구현

* feat: dto 접근을 위한 command 패턴 도입

* feat: 운동 정보 수정 로직 구현

* feat: 운동 주소 정보 수정 로직 구현

* feat: 저장 및 반환 로직 구현

* feat: 에러 코드 정의

* fix: 컨트롤러 url 오타 수정

* feat: requestDTO 필드 수정

* [feat/#53] 모임 가입신청 처리 API 구현 (#77)

* feat: 승인 요청에 대한 응답을 담는 enum 추가 (RequestAction)

* feat: 모임 가입신청 처리 요청 DTO 구현

* feat: 모임 서비스 인터페이스에 가입신청 처리 메서드 추가

* feat: 모임 가입신청 처리 API 컨트롤러 구현

* feat: 모임 가입신청 처리 API 서비스 구현

* feat: 가입신청 처리를 위한 정적 팩토리 메서드 및 비즈니스 메서드 구현

* feat: 모임 가입신청 처리 API 에러 코드 추가

* fix: 스웨거 설명문 추가 및 오류 수정

* refactor: 사용하지않는 import 정리

* refactor: orderType 필드 제거

* refactor: 양방향 연결을 위해 member에 연관 관계 편의 메서드 추가

* [feat/#72] 프로필 수정 기능 구현 (#79)

* feat: 프로필 수정 기능 구현

* feat: 프로필 사진 재생성 관련 에러 처리

* chore: 스웨거 설명 수정

* refact: dto 클래스 -> record 변환

* [refactor/#81] 운동 DTO에 중첩 record 적용 (#82)

* chore: pull 관련 임시 에러처리

* refactor: 운동 생성 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 API에서 중첩 record 패턴 적용

* refactor: 운동 게스트 초대 API에서 중첩 record 패턴 적용

* refactor: 운동 참여 취소 API에서 중첩 record 패턴 적용

* refactor: 게스트 초대 취소 API에서 중첩 record 패턴 적용

* docs: 게스트 초대 취소 API 로그 수정

* refactor: 특정 참여자 운동 취소 API에서 중첩 record 패턴 적용

* refactor: 운동 삭제 API에서 중첩 record 패턴 적용

* refactor: 운동 수정 API에서 중첩 record 패턴 적용

* [feat/#80] 회원주소 추가 API 구현 (#83)

* feat: 회원주소 추가 API 구현

* feat: 주소 개수 예외처리 추가

* [refactor/#84] 이미지 업로드 방식 변경 (#85)

* refactor: dto 어노테이션 수정

* [refactor/#88] 메달 도메인 DTO에 중첩 record 패턴 도입 (#90)

* [feat/#86] 대표 주소 변경API 구현 (#87)

* [feat/#94] 회원 주소 삭제 API 구현 (#97)

* [refactor/#98] 주소 추가 로직 수정 (#99)

* [feat/#100] 회원 탈퇴 기능 구현 (#101)

* [refactor/#89] 모임 생성 API 이미지 업로드 방식 변경 (#91)

refactor: 모임 생성 API 이미지 업로드 방식 변경

* [refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)

* refactor: 모임 도메인 DTO에 중첩 record 패턴 도입

* refactor: DTO 명칭 변경 및 임포트 정리

* [fix/#107] 병합 오류 해결 (#108)

* Revert "[refactor/#92] 모임 도메인 DTO에 중첩 record 패턴 도입 (#93)"

This reverts commit feaa902.

* fix: 병합 오류 해결 완료

* refactor: MemberExercise와 Guest에서 participantNum 필드 제거 (#105)

* [refactor/#109] 모임 생성 API 에러 처리 추가 (#112)

* feat: 모임 생성 DTO에 에러 처리 및 ENUM 변환 메서드 구현

* feat: 입력값 에러 코드 추가

* refactor: 에러 처리 관련 코드 수정

* [feat/#103] 운동 신청 API에서 검증 로직 추가 (#106)

* feat: 운동 급수 검증 로직 추가

* feat: 에러 코드 추가

* docs: Swagger docs에 급수 위반 추가

* refactor: Exercise와 연관된 엔티티들 fetch join으로 불러오기(N+1) 방지

* feat: 나이 계산 메서드 추가

* feat: 나이 검증 로직 추가

* feat: 에러 코드 추가

* refactor: 급수 및 나이 검증 로직 4XX 비즈니스 에러로 변경

* [feat/#95] 프로필 조회 관련 API 구현 (#118)

* feat: 다른 유저 프로필 조회

* chore: API URL 수정

* feat: 내 프로필 조회 API 구현

* chore: 컨트롤러 메서드 이름 수정

* [feat/#110] 모임 신청 API 검증 로직 추가 구현 (#117)

* feat: 모임 신청자가 모임의 급수 조건에 적합한지 검증하는 로직 구현

* feat: 급수 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 유형에 맞는 성별인지 검증하는 로직 구현

* feat: 모임유형의 성별 조건 검증 에러 코드 추가

* feat: 모임 신청자가 모임 나이대에 적합한지 검증하는 로직 구현

* feat: 나이 조건 검증 에러 코드 추가

* [Feat/#96] 회원 주소 조회 관련 API 구현 (#119)

* refact: 대표주소 추출 메소드 분리

* feat: 내 현재 위치 조회 API 구현

* chore: 건물명 null여부 관련 수정

* chore: 프로필 조회시 건물명, 도로명 추가

* feat: 회원의 등록 주소 전체 조회

* feat: 대표 주소가 위로 올라오도록 기능 추가

* [feat/#113] 모임 생성 API 검증 로직 추가 구현 (#121)

* feat: 모임 생성자의 성별을 검증하는 로직 구현

* feat: 모임 생성자의 나이를 검증하는 로직 구현

* feat: 모임 생성자의 급수를 검증하는 로직 구현

* feat: 빈 리스트 방지를 위해 @notempty로 변경

* feat: 혼복인 경우, 남성의 급수가 빈 리스트로 입력되는 것을 방지하기 위한 로직 구현

* refactor: 문자열 입력값 검증 @notblank로 변경

* [feat/#123] 운동 멤버십 구분 기능 추가 (#126)

* feat: 운동 참여 멤버쉽 enum 추가

* refactor: 운동 정렬 enum 제거 및 필드 제거

* feat: 운동 신청 시 운동 멤버십 결정 로직 구현

* feat: 게스트 엔티티는 따로 필드 없이 GUEST를 반환하는 로직으로 구현

* refactor: MemberExercise joinedAt 필드 제거에 따라 createdAt을 반환하도록 변경

* fix: ExerciseBookmark 엔티티에서 잘못 삭제한 필드 복구

* fix: 운동 신청 시 운동 신청 엔티티 생성 시점 반환으로 로직 에러 수정

* [feat/#124] 모임 가입 승인 멤버 조회 API 구현 (#127)

* refactor: PartyJoinDTO에 생성일자 추가

* feat: status(상태) 파라메터에 추가

* refactor: 컨버터에 updatedAt 추가

* fix: record의 request 오류 @Schema로 해결

* feat: PENDING인 경우, uppdateAt에 null값을 넣고 DTO에서 생략되도록 구현

* feat: 상태 에러 코드 추가 및 유효성 검증 구현

* [feat/#78] 운동 상세 조회 API 구현 (#128)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 쿼리 서비스 틀 구현

* feat: 기본 검증 구현

* feat: 파티 내 위치 체크

* feat: 멤버 참가자 호출 로직 구현

* refactor: 외부 참여자 ENUM값 변경

* refactor: 메서드명 더 명확하게 변경

* feat: 게스트 참가자 호출 로직 구현, 배치 쿼리로 최적화

* feat: 정렬을 위해 Info record에 joinedAt 컬럼 추가

* feat: 운동 기본 정보 로직 구현

* feat: 참여자, 대기자 그룹의 참여자 정보 반환 타입 List로 변경

* feat: 전체 참여자를 참여자와 대기자로 구분하는 로직 구현

* feat: 그룹 정보 로직 구현

* feat: 반환 로직 구현

* fix: ENUM 값 변경에 따라 사용처도 변경

* [feat/#122] 모임 상세 조회 API 구현 (#129)

* feat: 모임 상세조회 DTO 구현

* feat: 모임 상세조회 인터페이스에 메서드 추가

* feat:모임 상세조회 컨트롤러 메서드 구현

* feat: 모임 상세조회 API 서비스 구현

* feat: 모임 상세 조회 API 컨버터 구현

* refactor: partyDetailDTO record 하나로 통일

* feat: ENUM에 한글 추가 및 getter 추가

* refactor: 급수를 리스트 형식으로 반환하도록 수정

* feat: 컨트롤러에 @apiresponse 추가

* [feat/#131] 내 모임 조회 (간략화) API 구현 (#134)

* feat: 내 모임 간략화 조회 DTO 구현

* feat: 내 모임 간략화 조회 서비스 메서드 추가

* feat: 모임 간략화 조회 컨트롤러 메서드 구현

* feat: 내 모임 간략화 조회 서비스 구현

* feat: 내 모임 조회 리포지토리 메서드 구현

* feat: 내 모임 간략화 조회 컨버터 구현

* refactor: 서비스에 로그 출력문 추가

* [feat/#132] 내가 초대한 운동 게스트 조회 API 구현 (#133)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 대기 상태 구분을 위해 isWating 필드 추가

* feat: 내가 초대한 게스트 목록 조회

* feat: 전체 참가자 목록 조회

* refactor: 운동 조회할 때 모임 정보와 함께 조회하도록 변경

* feat: 게스트 번호와 참여 여부 추출

* feat: 게스트 번호와 참여여부 record DTO로 이동 및 통계 record 추가

* feat: 통계 계산 로직 구현 및 반환 로직 구현

* docs: Swagger 성공 응답 설명 수정

* [feat/#130] 내 모임 조회 API 구현 (#135)

* feat: 내 모임 조회 DTO 구현

* feat: 내 모임 조회 서비스 메서드 추가

* feat: 내 모임 조회 컨트롤러 구현 및 정렬 로직 처리

* feat: 내 모임 조회 서비스 구현

* 모임 조회를 위한 비즈니스 메서드 및 운동 정보 record 구현

* feat: 내 모임 조회 컨버터 구현

* feat: 운동 정보를 담을 record 구현

* feat: 모임 조회 쿼리 구현

* refactor: 공백 제거 및 기본값 추가

* refactor: 정렬 기준 입력 한글로 입력 가능하도록 리팩토링 및 에러 처리

* [refactor/#138]  orphanRemoval 제거 (#139)

* [feat/#140] 모임 찜 관련 API 구현 (#141)

* feat: 모임 찜 관련 API 구현

* refactor: 중복 로직 삭제

* [docs#142] 운동 도메인 DTO의 Request 객체에 @Schema 어노테이션 추가 (#143)

* [feat/#145] 전역 에러 핸들러에서 Validation 과정에서 에러 응답을 1개만 던지는 대신 전체를 던지도록 변경 (#147)

* feat: RequestBody의 에러 메시지 1개가 아닌 전체 던지도록 변경

* feat: PathVariable, RequestParam의 에러 메시지가 1개가 아닌 전체를 던지도록 변경

* [feat/#144] 모임 운동 캘린더 조회 API 구현 (#148)

* feat: 컨트롤러 구현

* feat: 응답 DTO 구현

* fix: 운동 시작 시간 및 종료 시간 에러코드 1XX로 변환

* feat: 검증 로직 구현

* feat: 에러 코드 정의

* feat: 날짜 기간 내 운동 조회 로직 구현

* feat: 디폴트 날짜 계산 로직 구현

* feat: 멤버 여부와 파티 이름도 반환하도록 구현

* feat: 최상위 Response 객체 생성 로직 구현

* chore: 캘린더 스펠링 변경

* feat: 모임 성별 급수 정보 제외 반환 로직 구현

* feat: 성별 급수 정보 반환 로직 구현

* refactor: 성별 급수 1번만 계산하도록 변경

* refactor: 운동 주별로 그룹화 로직 메서드 추출로 리팩터링

* refactor: 운동 참여자 정보 fetch join 대신 네이티브 쿼리 Count로 따로 조회

* [feat/#125] 운동 찜 관련 기능 구현 (#150)

* feat: 운동 찜하기 구현

* feat: 운동 찜 해제 구현

* refactor: 예외처리 부분 수정

* 재배포

* test: 배포 테스트

* set: 배포 이후 yml파일 수정 및 S3 설정파일 추가

* [feat/#151] 운동 찜 조회 구현 (#155)

* feat: 운동 찜 조회 구현

* chore: 주석 오타 수정

* [feat/#153] 내 운동 캘린더 조회 API 구현 (#156)

* feat: 컨트롤러 구현

* feat: DTO 구현

* chore: 함수 Calendar 오타 수정

* feat: 서비스 로직 구현

* chore: Calendar 오타 수정

* feat: 최상위 Response 반환 로직 구현

* feat: 나머지 반환 로직 구현

* docs: .gitignore에 application-dev.yml 추가

* config: application.yml에 aws 관련 설정 추가

* [feat/#152] 찜한 모임 전체 조회 API 구현 (#157)

* feat: 찜한 모임 전체 조회

* chore: 코드 오타 수정

* [feat/#166] 모임 운동 캘린더 조회 API에 찜 여부 추가 (#167)

* feat: DTO에 찜 여부 필드 추가

* feat: 서비스와 리포지토리에 찜 여부 반환 로직 구현

* feat: 컨버터에 북마크 여부 반환 로직 추가

* [feat/#154] 내 모임 운동 조회 API 구현 (#163)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 내가 속한 모임 리스트 조회 및 빈 응답 반환 로직 구현

* docs: Swagger 설명에 누락된 큰 따옴표 추가

* feat: 내가 속한 모임의 운동 리스트 최대 6개까지 가져오는 로직 구현

* feat: 반환 로직 구현

* [feat/#149] 운동 도메인에 빈 응답 조기 반환(Early Return) 패턴 도입 (#170)

* feat: 모임 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내 운동 캘린더 조회에서 빈 응답 조기 반환 패턴 도입

* feat: 내가 초대한 게스트 조회에서 빈 응답 조기 반환 패턴 도입

* [feat/#160] 알림 전체 조회 API 구현 (#171)

* feat: 알림 관련 기본 파일세팅 완료

* feat: 알림 전체 조회 기능 구현

* chore: 세미콜론 누락 추가

* refact: 반환타입 수정

* [feat/#111] 모임 삭제 API 구현 (#174)

* feat: 모임 삭제 API 서비스 메서드 추가

* feat: 모임 삭제 API 컨트롤러 구현

* feat: 모임 삭제 API 서비스 구현

* feat: 모임 엔티티에 모임 삭제 비즈니스 메서드와 status 필드 추가

* feat: PartyStatus ENUM 추가

* [refactor/#175] 모임 활동상태 검증 메서드 추가 (#176)

* feat: 모임 활성화 관련 에러 코드 추가

* refactor: 모임 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 조회 서비스에 모임 활성화 검증 로직 추가

* refactor: 운동 서비스에 모임 활성화 검증 로직 추가

* refactor: 찜 서비스에 모임 활성화 검증 로직 추가

* refactor: 모임 찜 양방향 연결로 변경 및 모임 삭제 시 모임 찜 연결 해제

* refactor: 운동 조회 서비스에 모임 활성화 검증 로직 추가

* [feat/#165] 내 모임 운동 캘린더 조회 API 구현 (#179)

* feat: 내 모임 운동 정렬방식 ENUM 추가

* fix: 충돌 해결

* docs: Swagger 성공 및 실패 응답 작성

* feat: 응답 DTO 구현

* feat: 조회 로직 구현

* refactor: 컨버터 메서드들 네이밍 통일 및 위치 한 곳으로 모음

* fix: DTO의 잘못된 참조 변경

* feat: 북마크 여부 로직 추가

* feat: 반환 로직 추가

* feat: fetch join을 위해서 로직 개선

* feat: 날짜별 그룹핑 DTO 로직 추가

* feat: 날짜별로 정렬해야 하기에 전체 운동 정렬 로직 제거

* feat: 사람 수 미리 계산 후 Converter에서 정렬

* feat: 운동 참여 인원 수 반환 로직 추가

* [feat/#178] 모임 멤버 조회 API 구현 (#180)

* feat: 모임 멤버 조회 API DTO 구현

* feat: 모임 멤버 조회 API 서비스 메서드 추가

* feat: 모임 멤버 조회 API 컨트롤러 구현

* refactor: 잘못된 로그 출력문 수정

* feat: 모임 멤버 조회 API 서비스 구현

* feat: 모임 멤버 조회 쿼리 구현

* feat: 모임 멤버 조회 API 컨버터 구현

* refactor: 모임 활성화 검증 추가

* refactor: 부모임장 ENUM에 추가

* feat: 모임 멤버 조회 role에 따른 정렬 구현

* [feat/#177] 캘린더 조회 API에서 날짜별로 아이템 묶기 (#181)

* feat: 내 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 내 운동 캘린더 조회 컨버터 로직 구현

* refactor: 불필요한 클래스 명시 제거

* feat: 모임 운동 캘린더 조회 DTO에서 날짜별 운동 DTO 추가

* feat: 모임 운동 캘린더 조회 컨버터 로직 구현

* [feat/#172] 대회 이미지 업로드 API 구현 (#173)

* [feat/#136] 모임 탈퇴 API 구현 (#182)

* feat: 모임 탈퇴 서비스 메서드 추가

* fix: 잘못된 요청 매핑 주소 수정

* feat: 모임 탈퇴 API 컨트롤러 구현

* feat: 모임 탈퇴 API 관련 에러코드 구현

* feat: 모임 탈퇴 API 서비스 구현

* refactor: 서비스 메서드 정리 및 코멘트 수정

* refact: 필요 없어진 배포 관련 파일 삭제

* [feat/#137] 모임 멤버 삭제 API 구현 (#187)

* feat: 모임 멤버 삭제 API 서비스 메서드 추가

* feat: 모임 멤버 삭제 API 컨트롤러 구현

* feat: 모임 멤버 삭제 API 서비스 구현

* feat: 모임 멤버 삭제 API 에러코드 추가

* feat: 읽지 않은 알림 여부 조회 (#184)

* [feat/#159] 특정 알림 읽음 처리 (#183)

* feat: 특정 알림 읽음처리

* refactor: 필요 없는 부분 삭제

* feat: 회원 검증 로직 및 타입 관련 Request DTO 추가

* [feat/#188] 모임 추천 조회 API 구현 (#190)

* feat: 모임 추천 조회 API 서비스 메서드 추가

* feat: 모임 추천 조회 API 컨트롤러 구현

* feat: 모임 추천 조회 API 서비스 구현

* feat: 모임 추천 조회 및 사용자 주소 조회 리포지토리 메서드 구현

* feat: 사용자가 이미 가입한 모임은 추천되지 않도록 구현

* [feat/#164] 추천 운동 조회 API 구현 (#191)

* feat: 컨트롤러 구현

* feat: 반환을 리스트로 변경

* feat: DTO 구현

* chore: 오탈자 수정

* feat: 운동 조회 로직 구현

* feat: 서비스에서 반환 로직 구현

* feat: ExerciseItem을 List로 반환하도록 변경

* feat: 10개만 조회할경우 거리가 가까운 운동 조회 못할 수 있으므로 전체 조회로 변경

* feat: 정렬 로직 구현

* chore: 로그 출력

* feat: 반환 로직 구현

* refactor: 운동 아이템 List 형태로 반환하는 메서드 제거

* feat: 에러 코드 추가

* docs: 스웨거 설명 추가

* [refactor/#194] 도메인별 ENUM 패키지 구조 개선 (#196)

* refactor: 활동 요일 ENUM을 PARTY DOMAIN 아래로 변경

* chore: ContestController에서 안 쓰는 import 제거

* refactor: MemberPartyStatus Member 도메인 아래로 변경

* refactor: ExerciseOrderType 사용처에 맞게 네이밍 변경 및 Bookmark 도메인 아래로 변경

* refactor: MemberStatus Enum을 Member 도메인 아래로 변경

* refactor: MyPartyExerciseOrderType Enum을 Exercise 도메인 아래로 변경

* refactor: NotificationType Enum을 Notification 도메인 아래로 변경

* refactor: PartyStatus를 Party 도메인 아래로 변경

* refactor: 모임 신청 관련 Enum들을 Party 도메인 아래로 변경

* refactor: 운동 참여 상태  Enum 운동 도메인으로 변경

* refactor: 메달 종류 Enum 대회 도메인으로 변경

* refactor: 활동 시간, 모임 운동 타입, 모임 정렬 타입 Enum 모임 도메인으로 변경

* [refactor/#189] 대회 등록 API에서 이미지 업로드 분리 (#197)

* refactor: 대회 등록 API에서 이미지 서비스 분리

* refactor: 날짜 데이터 형식 변경

* [refactor/#199] 대회 기록 수정 API에서 이미지 업로드 분리 (#200)

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리

* refactor: 대회 기록 수정 API 에서 이미지 업로드 분리 및 메서드 통합

* fix: 안 쓰는 코드 삭제

* [feat/#193] 내 참여 운동 조회 API 구현 (#201)

* feat: 필터 및 정렬 Enum 구현

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 필터 타입에 따른 정렬 로직 구현

* feat: 각 필터별 운동 조회 로직 구현

* feat: 빈 응답 조기 반환 로직 구현

* feat: 반환 로직까지 구현

* [feat/#198] 채팅 도메인 구현 (#203)

* Update issue templates

* [fix] cd 파일명 변경 gradle.yml to cd.yml

* [chore] ci 설정

* [fix] 파일이름 변경 ci to ci.yml

* [feat/#202] 특정 건물의 운동 상세 조회 API 구현 (#204)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 및 리포지토리 로직 구현

* feat: 날짜도 컨버터로 전달

* chore: DTO 네이밍 통일

* feat: 반환 로직 구현

* Update ci.yml

* debug: 충돌 해결 중 빠진 중괄호 추가

* Update ci.yml

* [feat/#205] 월간 운동 건물 지도 데이터 조회 API 구현 (#210)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 날짜 및 위치 정보 생성

* feat: 운동 조회 로직 구현

* feat: 필요없는 모임 조인 제거

* feat: 날짜별 건물 그룹핑 로직 및 반환 로직 추가

* feat: Addr의 위도 및 경도 필드 Float에서 Double로 자료형 변경

* fix: longitude 대신 latitude를 보내고 있던 로직 에러 해결

* feat: 날짜를 입력하지 않으면 오늘을 기본값으로 변경

* docs: 스웨거 수정

* feat: 위도와 경도 입력하지 않을 시 기본값으로 멤버 메인 주소를 사용

* feat: 거리 계산 로직을 위해 멤버 주소 또한 Double로 변경 + 사이드 이펙트 처리

* fix: 생성된 주소값을 반환하도록 변경

* docs: api 경로 변경 및 스웨거 설명 변경

* refactor: 클래스명 및 변수명 명확화

* docs: 스웨거 설명 추가

* [feat/#195] 모임 추천 조회 API 구현 (콕플 추천 / 필터) (#206)

* feat: QueryDSL 사용을 위해 의존성 추가 및 QuerydslConfig 구현

* fix: QueryDSL 추가로 인한 테스트 오류 방지를 위해 테스트용 yml 파일 추가

* feat: 모임 추천 조회 API 필터 요청을 담을 DTO 구현

* feat: 동적쿼리를 위한 리포지토리 추가 및 기존 리포지토리 상속

* feat: 동적쿼리를 처리하는 리포지토리 구현체 구현

* feat: 기존의 모임 추천 조회 컨트롤러에 필터 파라메터 및 정렬 조건 추가

* feat: 모임 추천 조회 서비스의 로직을 상황(콕플추천, 필터)에 따라 해당 로직을 사용하도록 구현

* feat: 동적쿼리가 정렬을 처리할 수 있도록 구현

* fix: record에서 불필요한 @Getter 제거 (에러발생)

* docs: 스웨거 요약문 변경

* fix: 삭제된 모임은 모임 추천 목록에 조회되지 않도록 수정

* refactor: PartyFilterDTO 객체 생성 빌더 패턴으로 리팩토링

* [feat/#120] 카카오 소셜로그인 구현 (#211)

* feat: SecurityConfig 일부 추가

* feat: 순수 회원가입 로직 작성

* feat: jwt 구현 완료

* feat: 카카오 소셜로그인 구현 및 테스트 완료

* fix: 로그인 한 사용자의 id를 가져올 수 있게 컨트롤러 수정

* fix: 테스트코드 삭제

* fix: 리다이렉트 uri 수정

* feat: cors 설정

* refact: 만료기간 상수로 분리

* [feat/#209] 모임 채팅방 목록 조회 API 구현 (#213)

* feat: 모임 채팅방 목록 조회 DTO 구현

* feat: 모임 채팅방 목록 조회 컨버터 구현

* feat: 모임 채팅방 목록 조회 컨트롤러 구현

* feat: 모임 채팅방 목록 조회 서비스 구현

* feat: 모임 채팅방 목록 조회 레포지토리 구현

* fix: 안쓰는 코드 삭제

* feat: 예외처리 구현

* refactor: 페이징 커서 방향 String에서 ENUM으로 교체

* refactor: getter 사용

* [refact/#214] 나이대 변수명 변경 (#219)

* refactor: 나이대 변수명 변경 (Age -> BirthYear)

* fix: SecurityConfig 파일 원복

* [feat/#217] 모임 생성 시 자동으로 모임 채팅방 생성 로직 구현 (#218)

* feat: 모임 생성 시 자동 채팅방 생성 및 모임장 채팅방에 자동 참여 로직 구현

* fix: 쿼리문 레포지토리 위치 수정

* [feat/#215] 모임 채팅방 이름 검색 API 구현 (#216)

* feat: 모임 채팅방 이름 검색 API 구현

* fix: 충돌 해결

* fix: 안 쓰는 임포트 제거

* feat: 모임 채팅방 이름 검색 쿼리 구현

* chore: 로그 추가

* fix: 레포지토리 수정

* [fix/#208] 모임 요청 파라미터 Enum 변환 및 검증 로직 수정  (#223)

* fix: 모임유형 한글로 입력을 받도록 수정

* fix: 활동시간 한글로 입력을 받도록 수정

* fix: 활동요일 한글로 입력을 받도록 수정

* docs: 급수 에러코드 설명문 변경

* feat: 키워드 한글 변환 로직 구현 및 에러코드 추가

* fix: 모임 추천 조회 필터의 입력값을 검증하도록 수정

* refactor: 급수 에러코드 CommonErrorCode 재활용

* [debug#225] 출생년도 비교로 변경 및 관련 필드명 변경

* [feat/#221] 모임 가입 수락 시 채팅방 자동 참여 로직 구현 (#226)

* [fix/#222] notification 테이블에 칼럼 추가 (#233)

* feat: notification 테이블에 칼럼 추가

* fix: memberId 방식 변경

* fix: Security Config 원상복구

* feat: 알림 이미지 전달 구현, key -> url 변환 구현

* feat: 로그인 후 상세정보 받기 구현

* [feat/#227] 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현 (#228)

* feat: 모임 탈퇴 시, 자동으로 채팅방 퇴장 코드 구현

* fix: 메세지 저장 방식 변경

* refactor: 채팅방 퇴장 메서드 추출

* fix: senderName 삭제

* [fix/#230] 모임 이미지 저장 방식 변경 및 imgKey 주소로 변환 (#234)

* fix: 모임 생성 시, imgKey를 전달받도록 변경

* debug: 모임 생성 시 이미지 null값 허용하여 에러 해결

* fix: 정적 팩토리 메서드와 모임 이미지 빌더 imgKey로 변경

* fix: PartyImg에서 imgUrl 필드 제거

* fix: 북마크 컨버터에 변경된 모임 imgUrl 호출 메서드 적용 및 static 제거

* fix: 채팅 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 운동 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* fix: 모임 컨버터에 변경된 모임 imgUrl 호출 메서드 적용

* refact: imageService 의존성 주입 및 변환 로직을 북마크 서비스로 이전

* refact: imageService 의존성 주입 및 변환 로직을 채팅 서비스로 이전

* refactor: imageService 의존성 주입 및 변환 로직을 모임 서비스로 이전

* [fix/#236] 대회 이미지 저장 방식 변경 (#237)

* fix: 대회 이미지 img_key만 저장하도록 수정

* refactor: 이미지 호출 관련 기존 컨버터에서 하던 로직을 서비스에서 하도록 리팩토링

* refactor: String으로 변결

* fix: 파라미터 조건 추가

* [feat/#192] 새로운 운동 추천 캘린더 조회 API 구현 (#229)

* feat: DTO 구현

* feat: 컨트롤러 구현

* feat: 멤버 정보 조회 및 기간 계산

* refactor: 기간 계산 로직 DateRange 안의 메서드로 변경

* feat: 콕플 추천 필터링된 운동 조회 로직 구현

* fix: 정렬 로직을 컨버터에서 진행하므로 메서드 제거

* feat: 기본 where절 구현

* refactor: 조인할 예정이므로 exercise.party를 party로 수정

* feat: 필터 where절 구현

* feat: 쿼리 전체 로직 구현

* refactor: 모임 레벨 조인 대신에 Exists절로 변경

* refactor: 콕플 추천 조회 로직 EXISTS절로 급수 비교하도록 변경

* feat: 운동 리포지토리에서 커스텀 인터페이스를 상속받도록 변경

* feat: 동적 쿼리 로직 호출

* feat: 추가 정보 조회 로직 구현

* feat: Response 반환 로직 구현

* feat: 정렬 로직 구현을 위해 정렬 필드도 넘기기

* feat: 주별 그룹화 로직 구현

* feat: 거리 정렬 로직을 위해 필드 추가

* feat: 콕플 추천 정렬 로직 구현

* feat: 필터 정렬 로직 구현

* feat: 데일리 아이템 생성 로직 구현

* feat: 위클리 생성 로직 구현

* fix: Party 필드명 변경에 따른 변경사항 적용

* fix: 나이 대신 생일년도로 비교하도록 변경

* feat: 참여인원이 많은 순으로 정렬을 위해 역방향으로 정렬

* [fix/#235] 운동 도메인에 이미지 로직 변경 적용 (#244)

* feat: 컨버터에 이미지 키 변환 메서드 추가

* fix: 새로운 운동 추천 캘린더 조회 API에 로직 반영

* fix: 운동 추천 조회 API에 로직 반영

* fix: 내 모임 운동 캘린더 조회 API에 로직 반영

* fix: 내 모임 운동 전체 조회 API에 로직 반영

* fix: 내 참여 운동 캘린더 조회 API에 로직 반영

* fix: 건물 운동 상세 조회 API에 로직 반영

* feat: 멤버 이미지 url 받아오는 메서드 추가

* fix: 운동 상세 조회 API에 로직 반영

* [feat/#232] 신규 멤버 추천 API 구현 (#246)

* feat: 추천 멤버 DTO 구현

* feat: 추천 멤버 조회 API 서비스 메서드 추가

* feat: 추천 멤버 조회 API 서비스 컨트롤러 구현

* feat: 추천 멤버 조회 API 커스텀 리포지토리 추가

* refact: 사용자의 id가 필요없기에 제거 및 오타 수정

* feat: 추천 멤버 조회 API 서비스 구현

* feat: 추천 멤버 조회 API 컨버터 구현

* fix: 프로필 이미지 key -> url 변환 로직 구현 및 적용

* feat: 추천 멤버 조회 동적 쿼리 구현

* fix: 검색 조건을 적용하는 경우도 기본적으로 모임 급수로 필터링하도록 수정

* [fix/#239] 로그인 후 상세 정보 받기 API 로직 수정 (#240)

* fix: 일부 로직 에러 수정

* fix: 시큐리티 원래대로

* feat: 찜 개수 제한 관련 로직 추가 (#242)

* [feat/#248] 웹소켓 기본 설정 및 연결 관리 구현 (#249)

* feat: WebSocket 의존성 추가

* feat: WebSocket 설정 구현

* feat: WebSocket 메시지 Enum 구현

* feat: 웹소켓 핸들러 틀 구현

* feat: 웹소켓 연결 완료 후 로직 구현

* feat: 웹소켓 종료 후 로직 구현

* feat: 웹소켓 전송 에러 로직 구현

* [feat/#243] 개인 채팅방 생성 및 참여 API 구현 (#245)

* feat: 개인 채팅방 생성 및 참여 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 및 레포지토리 구현

* fix: 칼럼 수정 및 추가

* chore: 예외처리 추가

* chore: 자동 정렬

* feat: 사용자 이름 바뀌었을때, displayName 동기화 구현

* fix: senderName 삭제

* feat: 개인 채팅방 목록 조회 API 응답 구현

* feat: 컨버터 구현

* feat: 컨트롤러 구현

* feat: 서비스 구현

* [feat/#252] 개인 채팅방 이름으로 검색 API 구현 (#254)

* fix: 오타 수정

* feat: 컨트롤러 구현

* feat: 서비스 구현

* feat: 레포지토리 구현

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* [feat/#162] 알림 추가 로직 구현 (#253)

* feat: 알림 추가 로직 구현

* feat: 알림 추가 로직 개발

* fix: bookmark컨트롤러 시큐리티 활성화

* feat: 개수 제한  추가

* feat: title 추가

* [fix/#255] 알림 전체 조회 응답에 data 필드 추가 (#263)

* [feat/#247] 신규 멤버 초대 보내기 API 구현  (#257)

* feat: PartyInvitation 엔티티 구현

* feat: 멤버 초대 보내기 API DTO 구현

* feat: 멤버 초대 보내기 API 서비스 메서드 추가

* feat: 멤버 초대 보내기 API 컨트롤러 구현

* feat: 멤버 초대 보내기 API 서비스 구현

* feat: 멤버 초대 리포지토리 구현

* feat: 대기 중인 초대 검증 에러코드 추가

* feat: 멤버 초대 보내기 API 컨버터 구현

* [feat/#264] 개발자 테스트용 토큰 발급 (#266)

* fix: 운동 도메인 id값 로그인한 사용자 id로 변경 (#268)

* [feat/#262] 모임 초대 처리 API 구현 (#270)

* feat: 모임 초대 처리 API DTO 구현

* feat: 모임 초대 처리 API 서비스 메서드 추가

* feat: 모임 초대 처리 API 컨트롤러 구현

* feat: 모임 초대 처리 API 서비스 구현

* feat: 모임 초대 상태 변경 비즈니스 메서드 구현

* feat: 모임 초대 처리 API 에러코드 추가

* fix: 모임 초대 시 채팅 참여 메서드 추가 및 JoinPartyChatRoom 범용적으로 사용 가능하도록 리팩토링

* [fix] cors 수정

* [fix/#238] 모임 유형을 오후 또는 오전으로 조회 시, 상시도 조회되도록 수정 (#272)

* fix: 모임 유형 오전, 오후 조회 시 상시도 조회되도록 로직 구현

* [fix] cors 수정

* chore: 안 쓰는 import문 제거

* feat: 모임 유형이 오전, 오후인지 체크하는 Utils 클래스 생성

* fix: 모임 유형 오전 or 오후 조회 시 상시도 조회되도록 변경

* refactor: 조건 로직을 Utils 메서드를 사용하도록 변경

---------

Co-authored-by: kanghana1 <qazplm12093@naver.com>
Co-authored-by: dmori <chosehoon2@naver.com>

* [chore/#274] 운동 도메인에서 이미지 url 필드명을 profileImageUrl로 통일 (#275)

* chore: 운동 상세 조회 API에서 필드명 변경

* chore: 운동 추천 조회 API에서 필드명 변경

* chore: 건물 운동 상세 조회 API에서 필드명 변경

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* [refactor/#276] 운동 도메인 커맨드 서비스 분리 (#277)

* refactor: 운동 생성 검증 로직 이동

* refactor: 운동 신청 검증 로직 이동

* refactor: 게스트 초대 로직 검증 이동

* refactor: 운동 참여 취소 로직 검증 이동

* refactor: 게스트 초대 취소 로직 검증 이동

* refactor: 매니저에 의한 운동 참여 취소 로직 검증 이동

* refactor: 운동 삭제 로직 검증 이동

* refactor: 운동 업데이트 로직 검증 이동

* refactor: 운동 신청 메서드 참여 서비스로 이동

* refactor: 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 매니저에 의한 운동 참여 취소 메서드 참여 서비스로 이동

* refactor: 게스트 초대 메서드 게스트 서비스로 이동

* refactor: 게스트 초대 취소 메서드 게스트 서비스로 이동

* chore: 커맨드 서비스 이름 생명주기 서비스로 변경

* chore: 메서드 파일 내 순서 변경

* refactor: 운동 생성 로직 CommandService에서 호출하도록 변경

* refactor: 운동 삭제 로직 CommandService에서 호출하도록 변경

* refactor: 운동 업데이트 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 로직 CommandService에서 호출하도록 변경

* refactor: 운동 신청 취소 로직 CommandService에서 호출하도록 변경

* refactor: 특정 참여자 운동 취소 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 로직 CommandService에서 호출하도록 변경

* refactor: 게스트 초대 취소 로직 CommandService에서 호출하도록 변경

* refactor: 패키지 구조 변경

* [feat/#231] 모임 정보 수정 API 구현 (#278)

* feat: 모임 정보 수정 DTO 구현

* feat: 모임 정보 수정 API 서비스 메서드 추가

* feat: 모임 정보 수정 API 컨트롤러 구현

* feat: 모임 정보 수정 API 서비스 구현

* feat: 정보 수정 비즈니스 로직 및 연관관계 편의 메서드 구현

* fix: 모임 정보 수정 DTO 검증 추가

* [feat/#279] 초기 채팅방 조회 API 구현 (#281)

* feat: 컨트롤러 구현

* fix: 메시지 중 이모지는 TEXT로 통합되어서 보내짐, 입장 및 퇴장을 처리하는 SYSTEM 필드로 수정

* feat: DTO 구현(채팅방 정보, 메시지 리스트, 참여자 리스트로 구분)

* chore: 메서드 명 명확화

* feat: 서비스 틀 구현

* feat: 채팅방 및 채팅방 참여 권한 검증

* feat: 채팅방 유형에 따라 가져오는 정보 분기 로직 구현

* refactor: 상대방 조회하는 로직이 N+1 문제를 불러일으키므로 이를 DB 조회 방식으로 해결

* refactor: 조회한 상대방 정보에서 멤버까지 접근하여 이름 필드 사용하도록 변경

* refactor: 모임 프로필 조회 시 N+1 문제가 발생하므로 이를 FETCH JOIN으로 해결

* fix: 잘못된 네이밍 변경

* feat: ChatInfo 생성 로직 구현

* feat: 최신 50개 메시지 조회 로직 구현

* feat: 메시지 정보 생성 로직 구현

* refactor: stream 로직 개선

* fix: 메시지 조회할 때 멤버도 조인하도록 변경

* feat: 메시지 정보 반환 로직 구현

* fix: 채팅방 멤버 조회할 때 멤버와 멤버 프로필까지 조회하도록 변경 + 이름순 정렬

* refactor: stream 로직 메서드 추출

* feat: 멤버 정보 반환 로직 구현

* feat: 마지막 메시지까지 읽음 처리

* feat: Response 반환 로직 구현

* fix: 메서드명 명확화

* chore: 개행 제거

* [debug/#289] 전송 이미지 크기 설정 (#293)

* [feat/#280] 과거 메시지 조회 API 구현 (#282)

* feat: 컨트롤러 구현

* feat: DTO 구현

* fix: Slice로 반환받기 위해 Response 객체 대신 MessageInfo를 직접 반환

* feat: 채팅방 멤버 검증 로직 구현

* feat: 커서 기반 메시지 조회 로직 구현

* fix: Transactional 어노테이션 잘못된 import 정정

* refactor: 정렬 로직이 필요없으므로 Pageable 대신 필요한 필드만 사용하도록 변경 + List로 반환

* feat: hasNext 판별 로직 구현

* feat: 오래된 순으로 조회했으므로 다시 반전

* feat: 메시지 정보 반환 로직 구현

* feat: 다음 커서 반환 로직 구현

* feat: 응답 반환 로직 구현

* fix: JPQL에서는 LIMIT를 지원하지 않으므로 Pageable로 데이터 크기 제한

* [feat/#256] 모임 채팅방 목록 조회 slice 기반 무한스크롤 구현 (#261)

* [fix/#291] 모임 id값 로그인한 사용자 id로 변경

* [fix/#294] 초대 알림 추가시 invitationId 넘겨주기 (#295)

* fix: 이미지 요청 크기 늘리기

* fix: data필드에 invitationId 추가

* [feat/#260] 모임 관련 알림 생성 로직 추가 (#290)

* feat: 모임 관련 알림 생성 로직 추가

* fix: INVITE일 경우, invitationId도 알림생성요청 dto에 포함

* debug: 에러 코드 변경

* [feat/#250] 메시지 전송 기능 구현 (#259)

* feat: 클라이언트에서 서버로 보내는 Request DTO 구현

* feat: Request 객체와 세션에서 필요한 정보 추출

* feat: 에러 처리 로직 구현

* feat: 메시지 반환 DTO 구현

* fix: develop 브랜치 rebase

* feat: 메시지 생성 및 저장 로직 구현

* fix: rebase 충돌 해결

* fix: Request 객체를 직접 받는 걸로 변경

* chore: 오타 수정

* fix: 필요없는 필드 제거

* feat: 반환 로직 구현

* feat: 메시지 전송 로직 호출 및 에러 처리 로직 구현

* feat: Request 객체 검증 로직 구현

* chore: 조건문 순서 변경

* refactor: 서비스로 Request 객체 넘기는 것은 안티패턴이므로 제거

* feat: 브로드캐스트 로직 구현

* refactor: 에러 처리 서비스 단에서 진행하도록 변경

* fix: 브로드캐스트 동시성 문제 해결

* feat: 브로드캐스트 병렬 실행 로직 구현

* chore: 파일 들여쓰기 및 import 정리

* fix: 조회 로직 에러 수정

* feat: 테스트 의존성 추가

* feat: 핸들러 테스트 초기 세팅 구현

* feat: 웹소켓 연결 성공 테스트 구현

* feat: 웹소켓 연결 실패 테스트 구현

* feat: 메시지 전송 성공 테스트 구현 - 브로드캐스트 제외

* fix: 잘못된 필드명 변경

* feat: 여러 사용자 테스트를 위해서 @InjectedMocks 대신 수동 생성으로 변경

* fix: package-private 메서드에 접근하기 위해 패키지 경로 동일화

* chore: 코드 순서 변경

* feat: 브로드캐스트 로직 테스트 구현

* feat: 완전한 메시지 전송 플로우 테스트 구현

* feat: DTO에 필드 추가 및 프로필도 같이 조회하도록 변경

* feat: 이미지 url도 반환하도록 변경

* fix: 테스트에서도 이미지 url 추가

* debug: rebase 과정 중 빌드 에러 해결

* fix: 채팅룸 네임 필드 삭제 (#304)

* [fix/#302] 하드코딩->로그인 아이디로 변경 (#303)

* fix: AWS 배포 과정에서 gradle 의존성 캐싱하도록 변경

* [feat/#283] 모임 채팅방 나가고 들어올 때 시스템 메시지 보내는 로직 구현 (#308)

* feat: 모임 입출입 ENUM 구현

* feat: 모임 입출입 이벤트 구현

* feat: 모임 입출입 이벤트 리스너 구현

* fix: 메시지 타입 중 이미지 제거

* feat: 이벤트 리스너에서 웹소켓 서비스를 호출하여 시스템 메시지 전송 로직 시작

* chore: 패키지명 변경

* feat: 핸들러와 서비스의 순환 참조 방지를 위해 시스템메시지 이벤트 구현

* fix: 웹소켓 서비스에서 시스템 메시지 이벤트 발행

* feat: 시스템 메시지 이벤트 리스너 구현 - 브로드캐스트 진행

* feat: 모임 채팅방 참여 이벤트 발행

* feat: 모임 채팅방 퇴장 이벤트 발행

* feat: Async 어노테이션 활성화를 위해 Config 구현

* chore: WebSockeetMessageDTO 객체 위치 변경

* refactor: 웹 소켓 연결도 enum값으로 처리하도록 변경

* refactor: 브로드캐스트 서비스 분리(1) - 웹소켓 연결

* refactor: 브로드캐스트 서비스 분리(2) - 웹소켓 종료

* refactor: 브로드캐스트 서비스 분리(3) - 브로드캐스트

* refactor: 테스트 메서드 이동

* refactor: 채팅방 멤버 변경 이벤트 발행

* fix: 모임에서 나가고 들어오는 것과 채팅방 나가고 들어오는 걸 하나의 트랜잭션에서 처리

* fix: 채팅방 나가고 들어오는 이벤트 리스너 구현

* feat: 채팅방 나가고 들어오는 로직 및 메시지 전송 로직 ChatRoomService에 구현

* fix: 필요없는 메서드들 제거

* fix: 세션 추가 메서드 네이밍 명확화

* fix: 웹소켓 핸들러만 테스트하도록 변경

* refactor: 시스템 메시지 보내는 로직을 웹소켓 서비스로 이동

* fix: 핸들러 테스트 제외하고 포스트맨으로 테스트하도록 변경

* refactor: 웹소켓 서비스에서 브로드캐스트 로직 처리하도록 변경

* [feat/#284] 개인 채팅 slice기반 목록 조회 구현 (#309)

* [feat/#305] redis 기본 설정 추가 및 도입 (#313)

* debug: 임시로 웹소켓 경로 허용 (#316)

* [feat/#265] 채팅방 구독 로직 구현 (#314)

* feat: 채팅방 구독 로직 틀 구현

* chore: 브로드캐스트 서비스 구독 서비스로 이름 변경

* feat: 채팅 메시지 전송 이벤트 구현

* refactor: 메시지 전송을 이벤트 발행으로 처리하도록 변경

* feat: 채팅 구독 이벤트 레코드 구현

* refactor: 채팅방 멤버 전체 브로드캐스트 대신 구독자만 브로드캐스트 하기 위해 구독 관리 방식 변경

* refactor: 네트워크 I/O는 성능에 별로 영향을 주지 않으므로 for문으로 변경

* fix: 실패한 사용자 처리 로직 구현

* fix: 구독 로직을 ChatWebSocketService 대신 SubscriptionService에서 진행

* feat: 구독 반환 DTO 구현

* feat: 구독 이벤트 발행 로직 및 성공 메시지 반환 로직 구현

* feat: 구독 이벤트 리스너 구현

* feat: 발신자 제외 브로드캐스트 기능 추가 - 자기 메시지 중복 수신 방지

* fix: 웹소켓 연결 시 멤버 이름 설정 안하는 에러 해결

* [feat/#306] JWT를 활용해 웹소켓 연결 인증 단계 구현 (#317)

* feat: HandShakeInterceptor 구현체 틀 구현

* feat: 에러 처리 로직 틀 구현

* feat: URL에서 JWT 토큰 추출

* feat: 멤버 id를 jwt에서 추출하여 세션에 넣어두기

* feat: 인터셉터 단계 추가하고 프론트 url만 허용하도록 변경

* develop 브랜치와 충돌 해결

* [feat/#287] 다운로드 토큰 발급 구현 (#310)

* feat: DownloadToken 엔티티 구현

* feat: 다운로드 토큰 발급 DTO 구현

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* feat: 다운로드 토큰 발급 API 컨트롤러 구현

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* ChatMessageFile 엔티티 구현

* feat: 다운로드 토큰 발급 API 서비스 구현

* feat: DownloadToken 정적 팩토리 메서드 구현

* feat: 다운로드 토큰 발급 API 리포지토리 추가

* feat: 다운로드 토큰 발급 API 에러코드 추가

* feat: 다운로드 토큰 발급 API 컨버터 구현

* feat: 양방향 연결을 위해 chatMessageFile 필드 추가

* [feat/#288] 파일 다운로드 구현 (#318)

* feat: 다운로드 토큰 발급 API 서비스 메서드 추가

* refact: ChatFileService로 파일 관련 로직 구현하도록 변경

* feat: 채팅 파일 다운로드 API 서비스 메서드 추가

* feat: 채팅 파일 다운로드 API 컨트롤러 구현

* feat: 채팅 파일 다운로드 API 서비스 구현

* feat: 채팅 파일 다운로드 API 에러코드 추가

* feat: 채팅 파일 다운로드 API 리포지토리 메서드 추가

* feat: 이미지 서비스에 파일 다운로드 메서드 구현

* fix: 토큰 유효시간 3분으로 수정

* fix: cors 프론트엔드 url 반영

* [feat/#319] 개발자용 토큰 발급 API(다른 사용자) 구현 (#320)

* feat: 컨트롤러 구현

* feat: 메서드 구현

* feat: 다른 사용자 개발자 토큰 발급도 스프링 시큐리티에서 허용하도록 변경

* [fix/#324] 모임 주소 중복 유니크 제약조건 추가 (#325)

fix: 모임 주소 중복 유니크 제약조건 추가

* [feat/#300] 채팅방 구독 해제 로직 (#321)

* feat: 구독 해제 핸들러 구현

* feat: 구독해제 이벤트 생성 메서드 구현

* feat: 이벤트 리스너 로직 구현

* feat: 구독 해제 로직 구현

* [feat/#311] 파일 다운로드 리팩토링 / 파일 업로드 API 구현 (#323)

* bug: 잘못된 다운로드 토큰 url 생성 로직 수정

* fix: Pre-signed URL로 임시 마스터키 발급

* refact: 직접 s3 object를 가져오도록 리팩토링하여 성능항샹 및 문제 해결

* refact: 파일 업로드에서도 통일된 enum타입을 사용하기 위해 ImgType -> DomainType으로 명칭 변경

* feat: 파일 업로드 API 컨트롤러 구현

* feat: 파일 업로드 API 서비스 구현

* refact: enum에 해당 도메인 경로 저장하도록 리팩토링

* refact: 중복 로직을 공통 메서드로 구현 및 파일/이미지 업로드하는 uploadToS3 메서드 구현

* refact: 불필요한 extractKeyFromUrl 메서드 제거

* refact: UploadDTO 형식 통일

* [feat/#322] 탈퇴 회원 시큐리티 필터에서 검증 (#327)

* feat: 탈퇴 회원 시큐리티 필터에서 검증

* fix: 에러메시지  수정

* [feat/#328]  JWT null인 경우 예외처리 (#329)

* [feat/#296] 키워드 추가 API 구현 (#330)

* feat: 키워드 추가 API DTO 구현

* feat: 키워드 추가 API 서비스 메서드 추가

* feat: 키워드 추가 API 컨트롤러 구현

* feat: 키워드 추가 API 서비스 구현

* feat: 키워드 추가 검증 에러코드 추가

* feat: 키워드 추가 API 리포지토리 구현

* [feat/#335] 키워드 삭제 API 구현 (#336)

* feat: 키워드 삭제 API 컨트롤러 구현

* feat: 키워드 삭제 API 서비스 메서드 추가 및 서비스 구현

* feat: 키워드 삭제 비즈니스 로직 구현

* feat: 키워드 삭제 에러코드 추가

* feat: 키워드 삭제 API 리포지토리 구현

* [feat/#301] 채팅방 자동 읽음 로직 구현 (#331)

* feat: 핸들러 구현

* feat: 웹소켓 Request DTO에 마지막으로 읽은 메시지 ID 넣기

* feat: 채팅 메시지 읽기 이벤트 구현

* refactor: 이벤트 트랜잭션 최적화

* feat: 이벤트 리스너 구현

* feat: 마지막으로 읽은 메시지 업데이트

* feat: 브로드캐스트할 읽음 반환 레코드 구현

* feat: 브로드캐스트할 메시지 생성 로직 구현 및 브로드캐스트 호출

* fix: 브로드캐스트 메시지 변수명 변경

* refactor: 브로드캐스트 오버로딩을 위해 Sealed 인터페이스 구현

* feat: 읽음 메시지 브로드캐스트 로직 구현

* refactor: 메시지 브로드캐스트 메서드명 변경

* fix: 필드명 통일

* debug: 메시지 업데이트 쿼리 에러 해결

* fix: 읽음 메시지 브로드캐스트 할 때 마지막으로 읽은 메시지 정보 반환하지 않도록 변경

* fix: 구독된 채팅방 자동읽음 처리를 위해 기존 로직 전부 삭제

* feat: 메시지 자동 읽음 이벤트 로직 구현

* feat: 읽음 처리 로직 구현

* fix: 사용하지 않도록 변경한 메서드 제거

* debug: LEFT JOIN으로 개인 채팅 조회 안 되는 에러 해결 (#338)

* [fix/#297] 여복인 경우 MaleLevel 추가 불가능하도록 수정 (#340)

* fix: 여복인 경우, 남자 급수를 방지하는 검증 로직 추가

* feat: 에러코드 추가

* [fix/#326] 특정 지역으로 조회 시, addr2가 전체인 모임도 조회되도록 수정 (#341)

* [fix/#334] 개인 채팅에서 처음 메시지 보내면 채팅방 초대 로직으로 변경 (#342)

* feat: 채팅방 멤버 엔티티에 상태 추가

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* refactor: 모임 채팅방 생성 로직 채팅 도메인으로 이동

* refactor: 채팅방 생성 + 자동 참여 로직 엔티티 메서드로 리팩터링

* refactor: 모임 채팅방 자동 참여 시 null인지 체크하도록 검증 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 모임 채팅방 생성 메서드명 명확화

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* refactor: 멤버 조회 메서드 네이밍 명확화

* fix: 채팅방 멤버 나는 참가 상태로, 상대방은 대기 상태로 생성

* fix: 개인 채팅방 목록 조회 및 검색 시 JOINED 상태인 경우만 조회하도록 변경

* feat: 개인 채팅방에서 첫 메시지 전송일경우 상대방도 초대하도록 변경

* fix: @Builder.Default 어노테이션으로 일대다 필드를 생성하지 않아도 기본값으로 생성하도록 변경

* docs: 개인 채팅방 생성 및 참여 api 설명 명확화

* chore: api 클래스 내 순서 변경

* refactor: /chats는 RequestMapping으로 처리

* [fix/#345] 급수 조건이 맞지 않더라도 모임의 멤버가 될 수 있도록 수정 (#346)

* fix: 모임 가입신청 시, 급수 조건에 적합한지 검증하는 로직 제거

* refact: 기존 나이대 조건, 성별 조건 검증 메서드를 모임 생성에도 활용할 수 있도록 리팩토링

* fix: 운동 신청 시 급수 조건 검증 로직 주석처리 (#349)

* fix: 임시 url -> 실제 메달 이미지 url (#351)

* [feat/#355] 운동 수정을 위한 조회 API 구현 (#356)

* feat: 컨트롤러 구현

* feat: DTO 구현

* feat: 서비스 구현

* feat: 컨버터 구현

* docs: 조회 조건 삭제

* fix: 모임 운동 캘린더 조회 API에서 운동 참여 여부도 반환하도록 변경 (#354)

* [feat/#350] 모임 id로 roomid 조회 API 구현 (#352)

* feat: 채팅방 id 조회 API DTO 추가

* feat: 채팅방 id 조회 API 컨트롤러 구현

* feat: 채팅방 id 조회 API 서비스 구현

* feat: 채팅방 id 조회 API 컨버터 구현

* feat: 멤버 검증을 위한 리포지토리 메서드 추가

* feat: 채팅방 id 조회 API 에러코드 추가

* docs: README 작성 (#358)

* [fix/#361] 모임 관련 검증 수정사항 반영 (#363)

* fix: 가입신청 처리 시, 이미 멤버인지 검증 로직 추가

* fix: 모임 생성 시, 급수 조건에 적합한지 검증하는 로직 제거

* [fix/#362] 현재 (목록/개인) 채팅방 목록 조회 및 검색 API에서 채팅방이 없을 때 에러 던지는 걸 빈 배열 던지는 걸로 반환 (#364)

* fix: 모임 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* fix: 개인 채팅방 조회 시 아무것도 없으면 빈 배열 반환하도록 변경

* debug: 웹소켓 설정에서 프론트 배포 주소 CORS 허용 (#360)

* [fix/#332] 채팅 메시지 조회할 때 읽지않은 멤버 수도 반환하도록 변경 (#344)

* fix: 모임 생성 및 모임 참여 시 채팅방 멤버 상태도 JOINED로 설정하도록 추가

* chore: 더이상 파티 서비스에서 사용하지 않는 채팅 리포지토리들 제거

* refactor: 파티 채팅방 생성 메서드 메서드명 및 인자 리팩터링

* feat: 메시지 읽음 상태 엔티티 구현

* feat: 채팅 보낼 시 채팅방 읽음 상태 생성 후 저장

* feat: 채팅 구독자들 메시지 읽음으로 변경

* feat: 마지막으로 읽은 메시지 id도 업데이트 하도록 구현

* refactor: 채팅방 목록 조회 시 안 읽은 메시지 카운트를 메시지 읽음 상태 테이블에서 조회하도록 리팩터링

* feat: 브로드캐스트 할 DTO에 안 읽은 멤버 필드 추가

* feat: 메시지 보낼 때 지금 구독자 수 체크하는 메서드 구현

* feat: 구독자들 읽음 상태로 변경 및 안읽은 메시지 수 반환하기

* feat: 안 읽은 사람 수도 반환하도록 변경

* refactor: 이벤트 구조로 처리하는 대신 활성 구독자 수 체크하며 한 번에 읽음 상태 업데이트

* feat: 구독 시 메시지마다 안 읽은 수 업데이트 정보 틀 구현

* feat: 안 읽은 메시지 id 리스트 조회

* feat: 안 읽은 메시지가 없을 때 로직 구현

* feat: 메시지마다 안 읽은 사람 수 카운트 로직 구현

* feat: 채팅방 구독할 때 마지막 메시지 업데이트 하도록 변경

* feat: 구독 시 메시지 업데이트 브로드캐스트 로직 구현

* debug: Long으로 반환하기 위해 Query문 사용

* chore: 사용하지 않는 메서드 정리

* feat: 구독하는 사람은 업데이트 메시지 받지 않도록 변경

* [debug/#365] 잘못된 사용자id를 넘겨주어 생기던 로직 오류 해결 (#366)

* [docs] 리드미 약간 수정

* [feat/#367] 채팅 보낼 때 이미지와 파일도 같이 보낼 수 있도록 로직 추가 (#373)

* fix: 메시지 전송 시 파일과 이미지들도 보낼 수 있도록 DTO 필드 추가

* fix: 이벤트 생성 시 파일과 이미지들도 보내도록 변경

* chore: 사용하지 않는 서비스 제거

* fix: 리스너와 서비스에서 파일과 이미지들 받도록 변경

* refactor: dirty checking으로 불필요한 저장 로직 제거

* feat: 메시지 저장할 때 이미지와 파일도 저장

* refactor: 브로드캐스트 응답과 분리하기 위해 중첩 record로 변경

* fix: 브로드캐스트 할 때 파일 정보와 이미지 정보를 담을 DTO 구현

* feat: 브로드캐스트할 파일 및 이미지 DTO 생성 로직 구현

* feat: 브로드캐스트 DTO에 누락된 필드 추가

* fix: 브로드캐스트 DTO 생성 로직에 이미지와 파일 필드 추가

* fix: 채팅 이미지 엔티티 다운로드를 위해 수정

* fix: 채팅 이미지 Request 필드 수정

* fix: 채팅 이미지 생성 필드 수정

* fix: 내용, 이미지, 파일 모두 없을경우 에러를 던지도록 변경

* fix: 일대다 매핑에서 Builder.Default 추가

* chore: 필요없는 엔터 제거

* [feat/#370] 이미지 다운로드 API 구현  (#371)

* fix: ChatMessageImg 수정

* feat: 채팅 이미지 다운로드 API 서비스 추가

* feat: 채팅 이미지 다운로드 API 서비스 구현

* debug: 오타 수정

* fix: 파일 업로드 시에도 파일 이름, 크기, 타입을 반환하도록 수정

* [fix/#339] 급수 검색에서 포함된 글자만으로도 조회되도록 수정 (#374)

* fix: 급수 검색에서 포함된 글자만으로도 조회되도록 수정

* [fix/#375] 모임 상세 조회 응답 필드 추가 (#377)

* fix: 모임 상세정보 DTO에 필드 추가

* feat: 대기중인 가입신청 여부를 확인하는 비즈니스 로직 구현

* feat: 수정사항 반영하여 컨버터에 추가

* debug: 운동 상세 조회 API에서 멤버 ID값이 아닌 멤버 운동 참여 ID값을 반환하던 로직 에러 해결 (#381)

* debug: CD 최신 이미지 반영 문제 해결 (#383)

* debug: 남아있는 컨테이너 강제 제거하는 스크립트 추가 (#384)

* [fix/#385] 채팅방 목록에서 마지막 메시지 표시 로직 개선 (#386)

* feat: 엔티티에 마지막 메시지 내용 반환하는 메서드 구현

* fix: content대신 마지막 메시지 내용 반환 메서드 사용

* [fix/#388] 키워드 추가를 다중 선택이 가능하도록 수정 (#389)

* fix: 키워드 추가 DTO 리스트로 수정

* fix: 키워드 추가 API 수정 및 연관관계 편의 메서드 추가

* fix: 키워드 삭제 및 사용하지 않는 에러코드 제거

* debug: content가 비어있을 때 hasContent가 true가 되는 에러 해결 (#391)

* [fix/#392] 모임 목록 조회 시, 응답에 찜 여부 추가 (#394)

* fix: 찜 여부를 모임 목록, 모임 상세 조회 DTO에 추가

* fix: 서비스 메서드에 북마크 여부를 확인하는 로직 추가

* fix: 찜한 모임들의 ID을 조회하는 메서드 리포지토리에 추가

* fix: 찜 여부 필드 컨버터에 추가

* [fix/#379] 프로필 이미지 관련 오류 수정 (#393)

* [feat/#372] WebSocket 요청마다 에러를 반환하도록 개선 (#395)

* feat: 구독 시 에러 메시지 반환을 위해 메서드 분리

* feat: 구독 해제 시 에러 메시지 반환을 위해 메서드 분리

* feat: 메시지 전송 시 에러 메시지 반환을 위해 메서드 분리

* fix: 에러 메시지 전송할 때 채팅방 ID 반환 로직 제거

* refactor: 메시지 전송 시 즉시 검증으로 리팩토링

* feat: 구독 및 구독 해제 검증 로직 구현

* refactor: 같은 의미를 담고 있는 에러 코드 통합

* fix: 에러 응답에 채팅방 id 미포함으로 변경

* fix: 에러 응답시 메시지 제대로 포함되도록 변경

* refactor: 웹소켓 연결 성공 시 멤버 정보 조회 메서드를 멤버 쿼리 서비스로 이동

* refactor: 웹소켓 서비스 네이밍 내부 코드에 따라 채팅 송신 서비스로 명확화

* refactor: 웹소켓 서비스들 패키지 분리

* refactor: 웹소켓 메세지 응답 로직 별도 서비스로 분리

* chore: import문 및 코드 스타일 정리

* [fix/#379] 프로필 사진 수정 오류 (#396)

* [fix/#398] 토큰 재발급 경로 permitAll 처리 (#399)

* fix: 토큰 재발급 경로 permitAll 처리

* fix: 리프레시토큰 null 예외처리

* fix: 리프레시토큰 null 예외처리

* [feat/#400] 채팅 메시지에서 이모티콘과 일반 이미지 구분 기능 구현 (#402)

* feat: 채팅 메시지 이미지 엔티티에서 이모티콘 여부 필드 추가

* feat: 초기 채팅방 조회 API에서 이미지 필드 List를 이미지 객체로 변환

* refactor: 이미지 정보와 멤버 정보 공통 DTO로 분리 -> 추후 같은 기능을 하는 메서드를 합치기 위함

* refactor: 메시지 조회 로직에서 중복된 코드를 CommonDTO를 활용해 제거

* refactor: 컨버터 로직 구현

* refactor: 메시지 보낼 때도 이모지 필드 반환하도록 변경

* [fix/#397] 모임 초대, 가입신청 처리 알림 추가  (#401)

* feat: 알림 dto의 필드 및 enum 추가

* fix: 알림 생성자 메서드 추가

* fix: 모임 초대 처리 시, 알림 생성 코드 구현

* fix: enum 명칭 변경 (모임 초대 승인)

* fix: 가입 신청 처리 알림 생성자 및 enum 추가

* fix: 가입 신청 처리 시, 알림 생성 코드 구현

* fix: 알림 내용에 모임 이름 제거

* [feat/#403] 마이프로필 키워드 조회 추가 (#404)

* [chore/#405] 리프레시 토큰 재발급 텀 줄이기 (#406)

* fix: 내 운동 리스트 조회 API에 레벨 필드 추가 (#408)

* [feat/#343] Redis 기반 채팅방 구독 관리 시스템 구축 (#409)

* feat: Redis 설정 중 lettuce 클라이언트 …
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FIX] 토큰 재발급 api 시큐리티 설정 풀기

3 participants