Skip to content

Commit

Permalink
hotfix: merge hotfix from main into develop (#642)
Browse files Browse the repository at this point in the history
* chore: 읽기, 쓰기 DB 연결 조건 변경 (flyway 쓰기 작업 오류 해결) (#592)

* release: 백엔드 버전 1 배포 (#468)

* docs: 리드미 추가

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* docs: PR 템픔릿 파일명 규칙에 맞게 변경

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* docs: PR 템픔릿 파일 위치 규칙에 맞게 변경

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* docs: 모임 개설 API 문서화 (#3)

* docs: 모임 개설 API 문서화

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* config: 백엔드 모듈 설정 추가

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

---------

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* docs: 모임 개설 API 문서 가독성 개선 (#6)

* docs: 모임 개설 API 문서화

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* config: 백엔드 모듈 설정 추가

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* docs: 모임 개설 API 문서 가독성 개선

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

---------

Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* feat: 엔티티 구현 (#8)

* feat: Meeting 엔티티 추가

* feat: Member 엔티티 추가

* feat: Mate 엔티티 추가

* feat: Notification 엔티티 추가

* refactor: Location 필드 변경

* docs: 모임 참여 API 문서화 (#11)

* docs: 모임 개설 API DTO 이름 변경

* docs: 모임 참여 API 문서화

* docs: 모임 개설, 모임 참여 API 상태 코드 변경

* feat: 안드로이드 기초세팅 (#15)

* config: 프로젝트 생성

* config: 의존성 추가

* design: 디자인 기초 설정

* chore: 안드로이드 기본 manifest 설정

- 알림 권한
- 인터넷 권한
- 가로 모드 고정 설정

* feat: Timber 초기 설정

* chore: MainActivity -> IntroActivity 클래스명 변경

* chore: 패키지 구조 설정

* feat: Retrofit 초기 설정

* docs: 참여중인 모임 목록 조회 API 문서화 (#17)

* chore: dto 디렉토리 세부화

* docs: 참여한 모임목록 조회 API 문서화

* refactor: 리소스 url 미반환

---------

Co-authored-by: coli-geonwoo <[email protected]>

* docs: FCM 토큰 저장, 초대 코드 유효성 검사 API 문서화 (#16)

* docs: 회원 추가 API 문서 추가

* docs: 초대 코드 유효성 검사 API 문서 추가

* style: 코드 컨벤션 적용

* refactor: 회원 추가 API 매핑 URL 추가

* style: 한 줄에 하나의 점 컨벤션 적용

* docs: 로그 목록 API 추가 (#14)

* chore: backend ci 스크립트 작성 (#42)

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 스플래쉬 화면 구현 (#41)

* design: 오디 로고 이미지 추가

* feat: 스플래쉬 화면 구현

* chore: Android 12에 추가된 Splash disable 위한 설정 추가

* feat: 공통 컴포넌트 구현 (#40)

* design: 뒤로 가기 버튼이 존재하는 툴바 ui 구현

* design: 입력창 스타일 구현

* design: 하단 버튼 스타일 구현 (다음, 확인)

* design: 제목이 있는 툴바 ui 구현

* design: 로그 화면의 툴바 ui 구현

* design: EditText drawable 테두리 수정

* style: 코드 줄바꿈 삭제

* chore: 앱 아이콘 오디 아이콘으로 변경 (#44)

* chore: 앱 status bar 추가 (#45)

* chore: backend ci 스크립트 작성 (#48)

* chore: backend ci 스크립트 작성

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 스크립트 테스트

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 스크립트 paths 주석처리

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: dockerfile 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend-cicd-dev.yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend-cicd-dev.yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend-cicd-dev.yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

---------

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 주소 검색 화면 구현 (#47)

* design: 약속 장소 입력 ui 구현

* design: 주소 검색 웹뷰 ui 구현

* config: 데이터 바인딩, 뷰 바인딩 의존성 추가

* feat: 주소 검색 다이얼로그 띄우는 기능 구현

* design: 다이얼로그 ui 수정

* style: ktLint 적용

* config: 데이터 바인딩, 뷰 바인딩 의존성 추가 방식 변경

* refactor: 다이얼로그 설정 코드 scope function으로 변경

* feat: Timber에 DebugTree 추가 (#50)

* chore: buildConfig true로 설정

* feat: OdyDebugTree 구현

* Merge branch 'feature/49' into develop

* Merge branch 'feature/49' into develop

* Revert "Merge branch 'feature/49' into develop"

This reverts commit e06c1435188680a53f426b5fb3154b8ed2ef7db0.

* Revert "Merge branch 'feature/49' into develop"

This reverts commit 7859febd2bb38655b56ad3736cf48361da8ae7c3.

---------

Co-authored-by: aprilgom <[email protected]>

* chore: android ci 구축 (#54)

* chore: android ci 스크립트 작성

* chore: android ci 스크립트 오류 수정

* chore: android ci 스크립트 수정

* chore: android ci 스크립트 수정

* chore: android ci 스크립트 수정

* feat: FCM 구현 (#52)

* feat: 헤더에 Authorization 필드 추가, BASE_URL local.properties로 이동

* feat: 회원 추가 서비스 구현

* feat: FCM 구현, 앱 설치 후 처음 실행 시 회원 추가 API 전송

* style: lint

* config: 의존성 컨벤션 준수

* config: 서버 URL 변수 이름 BASE_URL로 변경

* refactor: Service 경로 postfix 이름 PATH로 변경

---------

Co-authored-by: kimhm0728 <[email protected]>

* chore: cicd 파이프라인 구축 (#55)

* chore: backend ci 스크립트 작성

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 스크립트 테스트

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 스크립트 paths 주석처리

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: docker build push job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: dockerfile 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend-cicd-dev.yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend-cicd-dev.yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend-cicd-dev.yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd job 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd yml 주석 제거

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cd yml 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend dockerfile 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend ci 오류 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: dockerfile 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: dockerfile 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: dockerfile 수정

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd yml, dockerfile 수정

Co-authored-by: coli-geonwoo <[email protected]>

---------

Co-authored-by: coli-geonwoo <[email protected]>

* chore: backend cicd yml 파일 통합 (#62)

* chore: 사용하지 않는 backend ci yml 파일 삭제

Co-authored-by: coli-geonwoo <[email protected]>

* chore: workflow 스크립트 내 actions 버전 최신화

Co-authored-by: coli-geonwoo <[email protected]>

* chore: ci 작업에서 test 실패 시 로그 출력 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: ci 작업에서 test 실패 시 로그 출력 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: ci 작업에서 test 실패 시 로그 출력 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: ci 작업에서 test 실패 시 로그 출력 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

* chore: ci 작업에서 test 실패 시 로그 출력 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

---------

Co-authored-by: coli-geonwoo <[email protected]>

* chore: android ci 스크립트 수정 (#64)

* chore: android ci 스크립트 수정

* chore: android ci 스크립트 테스트

* chore: android ci 스크립트 수정

* chore: android ci 스크립트 테스트

* chore: android ci 스크립트 수정

* feat: 주소 검색 다이얼로그 구현 (#67)

* feat: 주소 검색 웹뷰 html 추가

* style: EditText 스타일 변경

* config: 중복되는 의존성 제거

* feat: 다이얼로그에서 웹뷰를 띄우는 기능 구현

* feat: 다이얼로그에서 선택한 주소를 fragment에 전달하는 기능 구현

* fix: ui 스레드에서 주소를 받아오도록 수정

* refactor: 고차 함수를 인터페이스로 변경

* style: 다이얼로그 크기 변경

* feat: 주소 리스너 인터페이스 추가

* style: ktlint 적용

* chore: AddressListener -> AddressReceiveListener 인터페이스명 변경

* chore: DestinationFragment -> MeetingDestinationFragment 클래스명 변경

* feat: 모임 개설 시 프래그먼트들 연결하는 뷰페이저 (#69)

* chore: dotsibdicator 의존성 추가

* feat: 모임 방 개설에 필요한 정보들 입력하는 화면들 추가

* feat: ViewPager2 Adapter 구현

* feat: ViewPager와 탭바 뒤로 가기 연결

* feat: 클래스 명 변경 및 indicator 변경

WormDotsIndicator -> DotsIndicator indicator
StartingPointFragment -> JoinStartingPointFragment

* chore: ktlint apply true로 변경

* chore: deprecated buildconfig 제거

* chore: ksp 버전 업그레이드

1.6.10-1.0.4 -> 1.9.0-1.0.13

* chore: MeetingInfoActivity exported true로 변경

* feat: 모임 참여 완료 화면 구현 (#70)

* chore: 박수 이미지들 추가

* feat: 모임 개설 완료 화면 구현

* chore: DestinationFragment -> MeetingDestinationFragment 변경

* feat: 모임 참여 완료 화면 (#72)

* chore: 달력 이미지들 추가

* feat: 모임 참여 완료 화면 구현

* chore: 화면 회전 가로로 고정 및 exported false로 변경

* chore: tools:text에 해당하는 값 하드 코딩으로 변경

* feat: 메인 화면 구현 (#73)

* design: 인트로 화면 xml 작성

* design: activity_intro.xml 작성

* feat: Event 작성

* feat: IntroNavigateAction 작성

* feat: Intro 버튼 리스너 인터페이스 작성

* feat: 각 버튼 클릭에 따른 Navigation Event 발생 구현

* feat: IntroActivity에 ViewModel 추가

* feat: observe 초기화 코드 추가

* refactor: IntroActivity와 MeetingInfoActivity 연결

* refactor: binding 함수 분리, initialize로 함수명 통일

* chore: shape_purple_radius_20.xml -> rectangle_purple_radius_20.xml 이름 변경

* design: 탑 바 추가

---------

Co-authored-by: haeum808 <[email protected]>

* feat: 모임 참여 시 프래그먼트들 연결하는 뷰페이저 (#74)

* chore: MeetingInfoListener -> InfoListener로 인터페이스 명 변경

* feat: 모임 참여 뷰페이저 구현

* chore: initializeDataBinding에 ViewPager 초기화 메서드 추가

* chore: VisitorInfo -> JoinInfo로 메서드명 변경

* chore: InfoListener -> BackListener로 인터페이스 명 변경

* feat: 알림 권한 요청 (#75)

* feat: 알림 권한 요청

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* chore: android ci 필드 추가 (#78)

* chore: android ci 스크립트 api key 추가

* chore: android ci 스크립트 테스트

* chore: android ci 스크립트 테스트

* feat: 위도, 경도 가져오는 api 연동 (#76)

* feat: 위경도 가져오는 repository 구현

* feat: 카카오 location response dto 추가

* feat: 카카오 location api 연동

* feat: 위도 경도를 프래그먼트에 전달하는 기능 구현

* refactor: 위도 경도 받아오는 기능을 비동기로 처리

* fix: 위도 경도 비동기로 받아와서 프래그먼트에 전달

* fix: 위경도 받아온 후 다이얼로그 닫도록 수정

* refactor: interceptor로 헤더 추가

* style: ktLint 적용

* chore: moshi 어댑터 import 수정

* refactor: 함수 분리

* refactor: 위경도에 대한 mapper 생성

* chore: 패키지 구조 변경

* refactor: 위경도 데이터에 대한 ui model 추가

* style: ktLint 적용

* chore: 사용하지 않는 파일 삭제

* feat: 약속 날짜 입력 화면 (#79)

* feat: 날짜 선택 화면 구현

* chore: 불필요한 스낵바 제거

* feat: 날짜 선택 시간에 따른 예외 처리

* style: ktlint

* feat: 모임 정보 입력 검증 로직 추가 (#68)

* feat: 모임 정보 입력 검증 로직 추가

* fix: 검증할 DTO에 검증 어노테이션 추가

* style: 코드 컨벤션 적용

* feat: nickname 검증을 담당하는 도메인 추가

* refactor: 엔티티에서 이미 선언된 NotNull을 임베디드 객체에서 제거

* feat: 닉네임 입력 화면 구현 (#86)

* design: 닉네임 입력 화면 ui 구현

* feat: 닉네임 최대 길이 뷰모델에서 가져오도록 구현

* feat: 닉네임이 변경되면 닉네임 글자수가 보이는 기능 구현

* feat: 엑스 버튼 누르면 입력된 닉네임 없어지는 기능 구현

* feat: 닉네임 입력 여부에 따라 다음 버튼 비활성화 되는 기능 구현

* style: ktLint 적용

* feat: 초대 코드 복사 bottom dialog (#84)

* design: bottom sheet 틀 디자인

* design: bottom sheet 디자인

* feat: 초대 코드 복사하기 구현

* chore: initialize로 네이밍 통일 및 스낵바에 Int값 전달로 변경

* chore: 초대 코드 관련 UX 라이팅 변경

초대 코드가 복사 됐습니다. -> 초대 코드가 복사 복사되었습니다.

* feat: 약속 시간 입력 화면 구현 (#97)

* design: 약속 시간 입력 화면 ui 구현

* feat: 시간과 분을 NumberPicker에 데이터로 넣어주는 기능 구현

* feat: NumberPicker 무한 스크롤 구현

* refactor: NumberPicker 숫자 지정하는 기능을 프래그먼트로 이동

* feat: 현재 시간으로 NumberPicker 초기값 셋팅하는 기능 구현

* feat: 다음 버튼 누르면 시간 유효성 검증 구현

* refactor: 다음 버튼 리스너를 인터페이스로 분리

* style: ktLint 적용

* refactor: numberPicker value를 데이터 바인딩으로 수정

* feat: 초대 코드 입력 화면 구현 (#99)

* design: 초대 코드 입력 화면 뷰 구현

* feat: 초대 코드 유효성 검증 repository 구현

* chore: manifest에 액티비티 추가

* design: edit text 속성 추가

* feat: 초대 코드 입력 여부에 따라 엑스 버튼의 가시성을 변경하는 기능 구현

* feat: 엑스 버튼 클릭 시 입력한 초대 코드 지우는 기능 구현

* design: strings 와 selector 추가

* feat: 확인 버튼 클릭 시 유효성 검증하는 기능 구현

* style: ktLint 적용

* chore: 불필요한 코드 삭제

* feat: toolbar back 버튼 리스너 구현

* chore: infoListener -> backListener 네이밍 수정

* chore: dialog 크기 수정 (#98)

* feat: 서브모듈 환경 구축 (#101)

* chore: ci submodule 적용

* chore: 서브모듈 디렉토리 추가

* chore: private.yml 파일 수정 테스트

* chore: private.yml 파일 수정

* test: test argument 수정

* chore: ci 스크립트 수정

* chore: ci 스크립트 수정

---------

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 출발지 입력 화면 구현 (#100)

* style: 출발지 입력 화면 ui 구현

* feat: 도착지 입력 시 수도권 유효성 검증 구현

* refactor: 주소 검색 클릭 리스너 인터페이스로 분리

* chore: 패키지 분리

* feat: 출발지 입력 시 수도권 유효성 검증 구현

* feat:  수도권 여부에 따라 다음 버튼 활성화 기능 구현

* style: ktLint 적용

* feat: 모임 이름 입력 화면 구현 (#102)

* design: 모임 이름 입력 ui 구현

* feat: 글자수 데이터 바인딩 기능 구현

* refactor: 모임 시간 범위 표현 방식 수정

* fix: strings 추가

* fix: 바인딩 빌드 오류 해결

* feat: 출발 시간 알림 구현 (#60)

* feat: 출발 시간 알림 예약 기능 추가

Co-authored-by: mzeong <[email protected]>

* refactor: 토큰으로 회원 조회 ArgumentResolver로 공통화

Co-authored-by: mzeong <[email protected]>

* fix: TaskScheduler 빈 등록

Co-authored-by: mzeong <[email protected]>

* test: 출발 시간 알림 예약 기능 테스트 추가

Co-authored-by: mzeong <[email protected]>

* fix: JpaAuditing 활성화

Co-authored-by: mzeong <[email protected]>

* fix: 요청 DTO 매핑을 위한 RequestBody 어노테이션 추가

Co-authored-by: mzeong <[email protected]>

* fix: save 메서드에 Transactional 어노테이션 추가

Co-authored-by: mzeong <[email protected]>

* style: 코드 컨벤션 적용

Co-authored-by: mzeong <[email protected]>

* fix: firebase 키 캐쉬 내역 제거

* fix: 테스트 시에 테스트용 yml이 수정되도록 규칙에 맞게 이름 수정

Co-authored-by: mzeong <[email protected]>

* refactor: 모임 내 모든 사용자가 알림 받도록 topic 기능 사용

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 알림에 닉네임 포함하도록 수정

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 예외 메세지 오타 수정

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 디바이스 토큰 헤더 형식 검증 로직 분리

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 컨트롤러 시그니처 변경 및 스웨거 문서 수정

- 디바이스 토큰 헤더 커스텀 어노테이션 생성

Co-authored-by: hyeon0208 <[email protected]>

* fix: FCM 토픽 구독 로직 분리

Co-authored-by: hyeon0208 <[email protected]>

* refactor: Member 필드에 DeviceToken 타입 사용

Co-authored-by: hyeon0208 <[email protected]>

* refactor: FCM 설정 옵션 코드 분리 및 테스트를 위한 enable 로직 제거

Co-authored-by: hyeon0208 <[email protected]>

* refactor: FCM message 생성 로직 가독성 개선

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 변수 선언으로 `taskScheduler.schedule()` 호출 시 가독성 개선

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 가독성 개선을 위해 AndroidNotification 변수 선언

Co-authored-by: hyeon0208 <[email protected]>

* refactor: Fixture에 private 생성자 추가

Co-authored-by: hyeon0208 <[email protected]>

* refactor: IntegrationTest -> BaseControllerTest 이름 변경

Co-authored-by: hyeon0208 <[email protected]>

* refactor: test application.yml 파일 제거

Co-authored-by: hyeon0208 <[email protected]>

* refactor: 롬복을 이용하지 않고 Fixture private 생성자 추가

Co-authored-by: hyeon0208 <[email protected]>

---------

Co-authored-by: Hyeon0208 <[email protected]>
Co-authored-by: H <[email protected]>

* feat: 초대 코드 Preference dataStore 세팅 (#104)

* chore: preference datastore 의존성 추가

* feat: 초대 코드 복사 preference datastore 기초 세팅

* feat: 모임 참여/개설 시 뷰모델 데이터 관리 #93 (#105)

* feat: 입력값 유효성에 따라 다음 버튼 활성화되도록 구현

* feat: 다음 버튼이 비활성화되면 스와이프도 불가능하도록 구현

* refactor: startActivity 방식을 getIntent로 변경

* feat: 다음 화면으로 이동하면 다음버튼이 비활성화 되도록 구현

* fix: 출발지 입력에 대한 유효성 검증 처리를 Event로 변경

* refactor: 모임 개설 시 데이터 viewModel에서 관리하도록 수정

* feat: 모임 개설 시 화면 플로우 구현

* style: ktLint 적용

* fix: Swagger에서 API 호출 시 Bad Request 응답 오류 (#107)

* refactor: `common/annotation` 패키지 이름 오타 수정

* refactor: Authorization 헤더 사용을 위한 설정 추가 및 코드 변경

- 커스텀 어노테이션 DeviceTokenHeader 제거
- 디바이스 토큰 접두사 수정

* fix: 멤버 추가 시 멤버 검증 로직 포함되지 않도록 수정

* fix: nickname 객체로 변경에 따른 코드 수정

* fix: 디바이스 토큰 접두사 추가에 따른 테스트 코드 수정

* fix: LocalDate, LocalTime Swagger 상 타입 표현 string으로 수정

Co-authored-by: hyeon0208 <[email protected]>

* fix: 닉네임을 객체로 변환함에 따른 getter 코드 수정

Co-authored-by: hyeon0208 <[email protected]>

---------

Co-authored-by: hyeon0208 <[email protected]>

* feat: 모임 초대 코드 생성 기능 추가 (#61)

* feat: 모임 초대 코드 생성 기능 추가

Co-authored-by: mzeong <[email protected]>

* style: 한줄에 한개의 점만 찍는다 컨벤션 적용

* refactor: 디코딩 검증 로직 추가

---------

Co-authored-by: mzeong <[email protected]>

* feat: 서버 헤더 형식 변경 (#112)

* feat: 로그 화면 구현 (#108)

* feat: Notification 도메인 타입 정의

* feat: api 서버로부터 받는 NotificationLog 타입 정의

* feat: retrofit의 NotificationService 구현

* feat: NotificationLogRepository의 명세와 기본 Repository 구현

* refactor: NotificationLog -> NotificationEntity

* design: item_notification_log.xml 작성

* feat: 타입 추가 정의

* chore: merge

* refactor: DefaultNotificationLogRepository 싱글턴으로 변경

* feat: NotificationLogViewModel 구현

* feat: NotificationLogActivity 구현

* design: rectangle_cream_downside_radius_30.xml 작성

* design: item_notification_log.xml 작성

* chore: merge

* chore: merge

* feat: 로그 리사이클러 뷰 구현

* chore: merge

* refactor: 알림 로그를 불러올 때 meetingId를 이용해 불러오도록 변경

* feat: 뷰와 데이터 바인딩

* chore: 오타 수정

* feat: 초대 코드 화면에서 로그 화면으로 이동 기능 구현

* refactor: 리뷰 반영

* refactor: ViewHolder 분리

* feat: 닉네임, 출발지 입력 (#80)

* refactor: Nickname 도메인 개선

- OdyException 커스텀 예외 생성
- 이름 변경 (NickName -> Nickname)

* refactor: 위경도 검증 로직 추가

- Location 필드에 `@NotNull` 추가

* feat: 전역 예외 처리기 추가

* refactor: 불필요한 final 키워드 제거

* refactor: 공백만 존재하는 닉네임 불가하도록 수정

* feat: 소요 시간 계산 기능 구현 (#96)

* chore: private 파일 gitignore 추가

* feat: 소요 시간 계산 기능 구현

* refactor: 소요 시간 계산 API client 변경

* feat: Duration Deserializer 구현

Co-authored-by: coli-geonwoo <[email protected]>

* refactor: RouteClient calculateDuration 메서드 수

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 출발 시간 계산 로직 구현

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 소요 시간 계산 API 에러 핸들링

* fix: 커밋되지 않은 response 클래스 추가

* chore: 불필요한 build.gradle 구문 삭제

* refactor: 변수 선언문 try 내부로 이동

* refactor: 중첩된 로직 별도 변수로 추출

* refactor: 축약된 exception 변수명 수정

* refactor: 소요시간 VO 이름 수정, Odsay api response 객체 이름 수정

* refactor: URI 생성 시 StringBuilder 적용

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>

* feat: 스낵바 위치 변경 및 showSnackBar 형식 통일 (#116)

* feat: 로그 목록 조회 (#87)

* chore: dto 디렉토리 변경

request > response

* feat: NotificationRepository 구현

* feat: dto 변환로직 구현

* feat: notificationService 구현

* style: 컨벤션 준수

* docs: test용 yml파일 추가

* refactor: notification 생성자 추가

* test: 로그 목록 반환 테스트 작성

* refactor: domain to dto 계층 이동

* refactor: method 이름 수정

* test: 로그 목록 조회 통합 테스트 추가

* style: new-line 추가

* chore: 로그 목록 반환 메서드 이동

NotificationController > MeetingController

* chore: 메서드 명 일치화

findAllMeetingLogsById > findAllMeetingLogs

* chore: domain to dto 메서드명 변경

toResponse > from

* refactor: auditing config 분리

* chore: dto 명 변경

NotificationSaveResponse > NotiLogFindResponse
NotiLogFindResponse > NotiLogFindResponses

* chore: 테스트 디렉토리 이동

* style: 불필요한 import문 제거

* chore: 디렉토리 변경

* Revert "chore: 디렉토리 변경"

This reverts commit c1b9f595357b999fe4aac325d460246ab3e8cb91.

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>

* feat: CI/CD 스크립트 분리 (#126)

* chore: ci/cd script 분리

* chore: cd 스크립트 수정

---------

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 모임 개설 기능 추가 (#121)

* style: 한 줄에 하나의 점만 찍는다. 컨벤션 적용

* refactor: 변경된 클래스명으로 getter 네이밍 수정

* chore: 초대코드생성기 util 패키지로 이동

* feat: 모임 개설 API 기능 추가

* feat: 회원 추가 API 기능 추가

* refactor: 변경된 firebase 엑세스 키 파일 위치로 경로 수정

* feat: DB 테이블 삭제 클래스 추가

* test: 컨트롤러 테스트 추가

* refactor: 서브 모듈 패키지 변경 사항 추가

* refactor: 초대코드 디코딩하여 모임방 조회 적용

* refactor: entityManger 의존성 주입 추가

* fix: 회원 생성, 모임 참여 API 오류 수정 (#127)

* fix: deviceToken unique, notnull 속성 적용

* fix: deviceToken 공백 검증 로직 적용

* style: import 재정렬

* feat: deviceToken 문자열 앞뒤 공백 제거 로직 추가

* refactor: findDeviceToken 쿼리 성능 개선

* feat: 회원 생성시 토큰 중복 검사 추가

* feat: mate 테이블의 memberId, meetingId unique 설정

* feat: 모임 참여시 중복 검증 로직 추가

* refactor: 모임 개설시 mate에도 회원 정보 저장

* refactor: DeviceToken NotNull 제약 조건 추가

---------

Co-authored-by: eun-byeol <[email protected]>

* feat: 모임 내 닉네임 중복 검증 (#119)

* feat: 초대코드 검증 API 추가 (#123)

* feat: 초대코드 검증 API 추가

* feat: 404를 반환하는 커스텀 예외 추가

* test: 404 오류를 검증하는 테스트로 변경

* feat: 모임 개설 서버 연결 (#131)

* feat: 모임 개설 service, request, response 구현

* feat: MeetingRepository에 postMeeting 메서드 추가

* feat: meeting response 전달 및 초대 코드 저장 구현

* feat: 특정 회원이 참여한 모임 목록 조회 API 구현 (#129)

* feat: 멤버가 참여한 모임 리스트 반환 쿼리 구현

* feat: 멤버가 참여한 모임 리스트 반환 기능 구현

* feat: token fixture 추가

* style: static import 제거

* test: 멤버 참여 모임 목록 조회 통합 테스트 추가

* test: NotificationRepositoryTest directory 이동

* test: 간섭 발생 테스트 disabled 처리

* fix: test 오류 개선

* fix: import 오류 해결

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>
Co-authored-by: eun-byeol <[email protected]>

* feat: 다음 버튼 비활성화 시 뷰페이저 스와이프 막는 기능 구현 (#122)

* refactor: LivaData set value 방식 변경

* feat: 모임 개설 시 뷰페이저 스와이프 막는 기능 구현

* feat: 뷰페이저 화면 이동 시 유효성 검증 기능 구현

* style: ktLint 적용

* fix: 모임 시간 유효하지 않아도 다음 페이지로 이동하는 버그 수정

* chore: nextPage -> moveOnNextPage 함수명 변경

* feat: 모임 개설 시 개설 완료 화면으로 이동하는 기능 구현

* feat: Notification 구현 (#128)

* feat: Notification 메시지 바로 출력

* chore: 의존성 추가

* fix: 경로 변경에 의한 import 변경

* feat: 알림 타입에 따른 알림 메시지 변경

* feat: fcm을 위한 string 작성

* feat: 알림 로그 화면에 bottom dialog 적용 (#130)

* chore: domain 패키지 정리

* chore: 리스너 이름 변경

* feat: meeting domain model에 초대코드 추가

* feat: NotificationLogActivity에 bottom sheet 기능 병합

* refactor: FakeRepo에서 DefaultRepo로 변경

* design: elevation 수정

* fix: app 네임스페이스 추가

* fix: manifest 수정

* refactor: FCM 전송 데이터 안드로이드 요청사항 반영 (#136)

* fix: 실패하는 테스트 수 (#137)

* fix: 초대 코드 입력 성공 시 참여 화면으로 이동하도록 수정 (#133)

* feat: 모임 개설 api 연결 (#139)

* feat: 모임 개설 service, request, response 구현

* feat: MeetingRepository에 postMeeting 메서드 추가

* feat: meeting response 전달 및 초대 코드 저장 구현

* chore: okhttp logging 의존성 추가

* chore: Http Logging 추가

* chore: 오타 수정

* feat: MeetingService postMeeting 추가

* chore: Timber 메시지 수정

* chore: 키에 맞는 인텐트로 변경

* feat: 모임 개설 api 연결

* feat: 커스텀 예외 생성 및 적용 (#140)

* feat: 커스텀 예외 생성 및 적용

* fix: fcmPushSender MockBean 추가

* fix: 테스트 실패 원인 파악 및 성공을 위해 `@Disabled` 처리

- NotificationService 내에서 RouteClient 접근해서 문제 발생

* feat: 모임 참여 서버 연결 (#143)

* feat: 서버 참여 api 연결

* style: ktlint 수정

* chore: 메서드 분리 및 메서드 한줄로 변경

* feat: 참여중인 모임 목록 조회 (#142)

* feat: 참여한 모임이 있을 경우 첫 번째 모임에 참여, 아닐 경우 인트로 화면으로 이동하는 기능 구형

* feat: 참여한 모임 중 첫 번째 모임의 로그를 띄워주는 기능 구현

* refactor: 리뷰 반영

* fix: 자잘한 ux 버그 다수 수정 (#145)

* fix: import 오류 수정

* fix: NumberPicker 디폴트 값이 현재 시간으로 설정되지 않는 버그 수정

* fix: 주소 EditText 한줄만 입력할 수 있도록 수정

* fix: 유효한 날짜 선택 시에도 유효하지 않다는 스낵바 뜨는 버그 수정

* fix: 닉네임 입력 화면으로 이동 시 화면 깜빡임 현상 수정

* fix: back press 시 이전 fragment로 이동하도록 수정

* style: ktLint 적용

* design: 바텀 시트 stroke 제거 및 elevation 추가

* feat: EC2 서버의 H2 콘솔 접근 설정 및 누락된 모임장 알림 로직 추가 (#146)

* chore: EC2 서버의 H2 콘솔 접근을 위한 설정 추가

* fix: 모임 참여 API에서 누락된 알림 로직 추가

* fix: ODsay 사용하는 테스트 코드 Disabled 처리

* fix: ODsay 사용하는 MeetingControllerTest 코드 Disabled 처리

---------

Co-authored-by: H <[email protected]>

* fix: FCM 토픽 Malformed topic name 에러 해결 (#149)

* fix: FCM 토픽 Malformed topic name 에러 해결 (#151)

* fix: FCM 토픽 Malformed topic name 에러 해결

* fix: FCM 토픽 Malformed topic name 에러 해결

* fix: 의도하지 않은 값이 토픽에 들어간 코드 수정 (#153)

* fix: 로그 화면 버그 해결 (#157)

* fix: 로그 화면 데이터 mapping 버그 수정

* design: 로그 화면 그림자 drawable 수정

* fix: LocalDateTime mapping 방식 수정

* design: 로그 화면 툴바의 뒤로가기 버튼 제거

* fix: fcm 토큰 없는 경우 meetings를 불러오지 않도록 수정

* style: ktLint 적용

* chore: Meetings -> MeetingsResponse 클래스명 변경

* fix: LocalDateTime mapping 오류 해결

* fix: 클립보드 복사 시 스낵바 제거

* fix: LocalDateTime mapping 오류 해결

* fix: 로그 화면으로 이동 시 깜빡이는 현상 해결

* refactor: 리뷰 반영

* fix: CalendarView -> DatePicker로 변경하여 날짜 선택 불가 버그 수정 (#155)

* �feat: 로그 목록 조회 시 과거순 정렬 (#144)

* refactor: 아규먼트 리졸버 어노테이션 적용

* refactor: 데이터베이스에 데이터 추가 순으로 알림 로그 정렬

* test: 모임 반환 테스트 오류 해결

* refactor: 현재 이전의 로그 목록을 조회하도록 수정

* refactor: NotiLog 바인딩 수정

createdAt > sendAt

* refactor: 불필요한 레코드 삭제

* refactor: LocalTime 밀리 세컨즈 제거

* test: 로그 필터링 적용 테스트 작성

---------

Co-authored-by: coli-geonwoo <[email protected]>

* fix: 알림 전송 예약 시점이 아닌 전송 시점에 상태 변경되도록 수정 (#162)

- FcmSendRequest 매개변수 변경
- updateDone -> updateStatusToDone 메서드명 변경
- 시연을 위해 알림 전송 시간 임의 지정
- FcmSendRequest 매개변수 변경에 따른 테스트 코드 수정

* feat: 초대코드 존재유무 검증로직 구현 (#164)

* feat: 초대코드 존재유무 검증로직 구현

* refactor: id 기반 모임 조회로 로직 변경

---------

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 모임 입장 시 ENTRY 알림 저장, 전송 (#165)

* chore: RequestDto 패키지 위치 이동

* style: 컨트롤러 컨벤션 개행 적용

* feat: 모임 입장 시 ENTRY 알림 저장, 전송 기능 추가

* refactor: 알림 전송 코드 개선

* refactor: 본인의 입장 푸쉬 알림은 안뜨도록 fcm 토픽 구독 순서 변경

* fix: 스플래쉬 딜레이 수정 (#163)

* fix: 스플래쉬 delay 수정

* fix: LocalDateTime parse 형식 수정

* style: ktLint 적용

* refactor: 패키지 구조 변경 (#174)

* refactor: data model -> data entity로 패키지명 변경

* refactor: entity -> remote 패키지 아래로 이동

* refactor: 각 entity 안에 request, response 패키지 만들기 및 remote 패키지 아래에 Ody api를 연결하는 패키지, FCM 패키지 만들기

* refactor: domain - repository 아래 이슈 별로 패키지 분리

* refactor: presentation common 만들기

* refactor: startingpoint -> departure 패키지 명 변경

* refactor: NotificationLogListAdapter -> NotificationLogsAdapter 클래스명 변경

* refactor: notificationlog -> meetingRoom 패키지명 변경

* refactor: startingpoint -> departure xml 명 변경

* refactor: domain으로 AddressValidator 이동

* refactor: presentation - listener 패키지 만들기

* refactor: presentation ui 모델은 presentation model 패키지 안에 넣기

* refactor: data - fake -> 테스트 패키지 쪽으로 위치 변경

* refactor: meeting 패키지 만들고 meeting과 관련된 파일들 이동

* refactor: join 패키지 만들고 join과 관련된 파일들 이동

* refactor: DepartureFragment -> JoinDepartureFragment로 프로그래먼트 명 변경

* style: ktlint

* refactor: meeting, join -> meetingcreation, meetingjoin으로 패키지명 변경

* refactor: meetingcreation, meetingjoin, meetingroom -> creation, join, room 으로 패키지명 변경

* refactor: data - remote - thirdparty, core로 패키지 분리

* style: ktlint

* style: ktlint

* refactor: manifest tools 속성 제거 (#184)

* refactor: manifest tools 속성 제거

* feat: SingleLiveData 추가

* refactor: Event -> SingleLiveData 변경

* style: ktLint 적용

* test: RouteClient Mock 테스트 (#177)

* test: 길찾기 api 성공 restClient MockTest

* test: 도착지와 출발지가 700m 이내인 테스트 추가

* fix: 500 에러 시에만 OdyServerErrorException 발생하도록 수정

* test: 잘못된 api-key 요청 시 예외 발생 테스트 추가

* test: 클라이언트 예외 발생 테스트 추가

* test: static 키워드 삭제

* refactor: RouteClient 인터페이스화

* test: service layer FakeRouteClient 적용

* test: controller layer FakeRouteClient 적용, @Disabled 제거

* test: RouteClient 관련 테스트 파일 디렉토리 이동

* refactor: URI 생성 로직 가독성 개선

* test: 불필요한 테스트 제거

* feat: NPE 체크 로직 추가

* test: 불필요한 RouteClient 설정 제거

* refactor: Event -> SingleLiveData로 개선 (#185)

* feat: SingleLiveData 추가

* refactor: Event -> SingleLiveData 변경

* style: ktLint 적용

* chore: open 키워드 제거

* refactor: 모임 날짜를 LocalDate로 관리 (#186)

* refactor: 매핑 메서드 Mapper.kt 에서 각 Model의 메서드로 이동 (#182)

* refactor: 매핑 메서드 Mapper.kt 에서 각 Model의 메서드로 이동

* refactor: 매핑 메서드들 각 Mapper로 이동

* feat: 알림 생성 시점이 전송 시점보다 늦은 경우 예외 처리  (#166)

* feat: 알림 생성 시점이 전송 시점보다 늦은 경우 예외 처리

* refactor: 생성자 접근제어자 수정, 주석 제거

* test: SpyBean 제거

* refactor: DepartureTime이 시간 비교하도록 수정

* test: assertThat 구문에서 when 절 분리

* test: findAny()로 변경

* test: 저장되었는지 검증하는 로직 수정

* test: 검증부 filter 조건 변경

* refactor: application에서 repository, datastore, retrofit service 인스턴스 관리 (#183)

* refactor: 싱글턴 객체들 Application으로 이동

* refactor: 타입 이름 명시

* refactor: datastore 호출 부분을 repository 계층을 거치도록 변경

* refactor: ViewModelFactory 인스턴스를 각 액티비티에서 생성하도록 변경

* refactor: fcm 토큰 새로운 토큰 발급 시 repository에 저장

* chore: merge 작업

* refactor: fcm 토큰 새로운 토큰 발급 시 repository에 저장 (#193)

* refactor: 2차 스프린트 구현 사항 리팩터링 (#189)

* chore: 함수 이름 통일

initializeObservingData -> initializeObserve

* refactor: SingleLiveData의 타입을 Boolean에서 Unit으로 변경

* refactor: 약속 날짜 유효성 검증을 ViewModel로 분리

* chore: 함수, 프로퍼티 순서 변경

* refactor: 매핑 메서드 Mapper.kt 에서 각 Model의 메서드로 이동 (#182)

* refactor: 매핑 메서드 Mapper.kt 에서 각 Model의 메서드로 이동

* refactor: 매핑 메서드들 각 Mapper로 이동

* feat: 알림 생성 시점이 전송 시점보다 늦은 경우 예외 처리  (#166)

* feat: 알림 생성 시점이 전송 시점보다 늦은 경우 예외 처리

* refactor: 생성자 접근제어자 수정, 주석 제거

* test: SpyBean 제거

* refactor: DepartureTime이 시간 비교하도록 수정

* test: assertThat 구문에서 when 절 분리

* test: findAny()로 변경

* test: 저장되었는지 검증하는 로직 수정

* test: 검증부 filter 조건 변경

* refactor: application에서 repository, datastore, retrofit service 인스턴스 관리 (#183)

* refactor: 싱글턴 객체들 Application으로 이동

* refactor: 타입 이름 명시

* refactor: datastore 호출 부분을 repository 계층을 거치도록 변경

* refactor: ViewModelFactory 인스턴스를 각 액티비티에서 생성하도록 변경

* refactor: fcm 토큰 새로운 토큰 발급 시 repository에 저장

* chore: merge 작업

* refactor: Splash 화면 이동 판단 로직을 뷰모델로 이동

* style: ktLint 적용

* refactor: 약속 시간이 초기화되었는지 판단하는 로직을 변수로 분리

* chore: 함수명 변경 empty -> clear

* chore: updateMeetingDate -> checkMeetingDateValidity 함수명 변경

---------

Co-authored-by: haeum808 <[email protected]>
Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: aprilgom <[email protected]>

* refactor: RouteClient 응답 분기를 객체로 캡슐화 (#188)

* refactor: RouteClient 응답 분기를 객체로 캡슐화

* chore: 패키지 디렉토리 변경

domain > dto

* refactor : 응답 매핑 로직을 mapper로 이전

* refactor : 불필요한 static 객체 삭제

* refactor : 500에러 처리 로직 추가

* refactor : NPE 예외 처리

* refactor : 롬복으로 private 생성자 구현

* test: OdsayResponseMapperTest 작성

* style: message 개행 변경

Co-authored-by: H <[email protected]>

* refactor: OdsayRouteClient에 mapper 로직 반영

* fix: FutureOrPresentDateTimeValidatorTest 오류 개선

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: H <[email protected]>

* design: 폰트, 컬러 xml 지정 (#219)

* design: font 스타일 추가

* design: colors 네이밍 변경

* design: 컬러 추가

* refactor: 2차 스프린트 리팩터링 (#196)

* refactor: FCMService와 NotificationHelper 분리

* refactor: 알림 권한이 이미 있을 시 early return, viewmodel 이름 수정

* refactor: NotificationLog Result 반환하도록 수정

* refactor: 이벤트 리스너 네이밍 수정

* refactor: MeetingRoomViewModel 초기화 init 블럭 내 실행, Timber 로그 내 toString 제거

* style: ktLintFormat

* fix: NotificationLog repo 수정에 따른 FakeRepository 수정

* style: ktLintFormat

* refactor: 2차 스프린트 구현 사항 리팩터링 (#218)

* refactor: JoinCompleteActivity에서 방 만들고 방 참여하던 로직을 MeetingCreationViewModel로 이동

* refactor: clickListener들 메서드 앞에 on prefix 추가

* refactor: Repository 반환값 MeetingResponse들 -> Meeing로 변경

* refactor: JoinInfoRequest -> MeetingJoinInfo로 변경

* style: ktlint

* refactor: MeetingRequest -> MeetingCreationInfo로 변경

* refactor: MeetingCreationNavigateAction 구현

* refactor: MeetingJoinNavigateAction 구현

* style: ktlint

* style: ktlint

* style: ktlint

* fix: FakeMeetingRepository 오버라이드 반환값 변경

* style: ktlint

* refactor: makeMeeting -> createMeeting, createMeetingResponse -> makeMeetingResponse 네이밍 변경

* refactor: name, date 널 체크 추가

* refactor: 좌표 압축 메서드 추가 및 data 계층으로 이동

* refactor: join nickname 널 처리 추가

* style: ktlint

* fix: 모임 참여 안되던 버그 수정

* refactor: 서비스가 DTO 반환하도록 수정 (#181)

* refactor: 서비스가 DTO 반환하도록 수정

* refactor: 하나의 스트림으로 dto 생성하도록 수정

Co-authored-by: eun-byeol <[email protected]>

* fix: 하나의 stream으로 dto 생성하도록 수정을 위한 import 추가

* refactor: FcmPushSender 내 Notification 알림 조회 로직 제거

- getNickname 반환 타입 수정
- `@Async` 제거에 따른 FcmEventScheduler 파일 삭제
- FcmSendRequest 필드 수정

Co-authored-by: hyeon0208 <[email protected]>

* fix: FcmSendRequest 변경에 따른 테스트 코드 수정

Co-authored-by: hyeon0208 <[email protected]>

* refactor: Nickname 객체 필드명 value로 수

Co-authored-by: hyeon0208 <[email protected]>

---------

Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: hyeon0208 <[email protected]>

* refactor: BaseActivity, BaseFragment (#220)

* feat: BindingActivity, BindingFragment 구현

* style: ktlint

* refactor: showSnackbar 메서드 추가 및 binding by lazy 사용, application private 제거

* refactor: showSnackbar 메서드 message 타입 변경 및 application 추가

* refactor: BindingActivity, BindingFragment 적용

* style: ktlint

* refactor: BindingActivity에 initializeBinding 추상 메서드 추가

* docs: 서비스 소개글 작성 (#242)

* docs: 약속 참여 API 문서화 (#246)

* docs: 404에러 문서화를 위한 커스텀 어노테이션 추가

* docs: Swagger 회원 참여 API 문서화

* refactor: AliasFor 어노테이션으로 ApiResponse 속성값 매핑

* refactor: api url 버전명 추가

* feat: 기존의 /mates 요청 메서드 추가

* docs: 약속 단건 조회 API 문서화 (#245)

* docs: 약속 참여자 상태 목록 조회 API 문서화� (#243)

* refactor: 서브 모듈 설정

* docs: 약속 참여자 eta 상태 목록 조회 API 문서화

* refactor: 도착 조건이 빠른 상태 순으로 상수 정렬

Co-authored-by: coli-geonwoo <[email protected]>

* docs: API 문서 상으로 도착지까지 남은 소요시간이 "분"임을 명시

Co-authored-by: coli-geonwoo <[email protected]>

* docs: 400에러 시 오류에 대한 이유 자세히 명시

Co-authored-by: coli-geonwoo <[email protected]>

* docs: 참여자 위치 상태 조회 요청 dto 위경도 변경

Co-authored-by: coli-geonwoo <[email protected]>

* chore: DTO명 MateEtaxx로 수정

* docs: 400에러 설명 상세화

* fix: MateResponse 파일 복구

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>

* docs: 약속 개설 API 문서화 (#249)

* feat: 약속 개설 v1 api dto 구현

* docs: 약속 개설 v1 API 문서화

* style: 추가 개행 삭제

Co-authored-by: mzeong <[email protected]>

* docs: deprecated 옵션 추가

* refactor: dto renaming

MeetingSaveV1Request > MeetingSaveRequestV1
MeetingSaveV1Response > MeetingSaveResponseV1

* docs : 모임 > 약속 수정

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>

* refactor : 약속 개설 API 구현 (#250)

* feat: controller 약속 개설 v1 메서드 구현

* feat: 약속 개설 v1 메서드 구현

* style: 컨벤션 준수

* refactor : dto 이름 변경 반영

* refactor : 모임 > 약속 용어 통일

* style: 개행 제거

* test: statusCode 숫자로 표기

* test: deprecated 옵션 추가

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>

* design: 로그 화면 뷰 디자인 (#248)

* chore: 오디 아이콘 추가

* design: 보라색 둥근 사각형 drawable 추가

* design: 로그 화면 오디? 버튼 디자인

* refactor: selector에 색상 제거

* design: 오디? 버튼 padding 10dp로 변경

* refactor: meeting_room_ody -> meeting_room_dashboard_button 네이밍 변경

* chore: 불필요한 파일 제거

* chore: rectangle_radius_0.xml 파일 추가

* design: 복사하기 버튼에 색상 추가

* chore: selector_button_color.xml 추가 및 Button -> AppCompatButton으로 변경

* design: 초대 코드 확인 버튼에 tint 추가

* design: 유저 현황 화면 디자인 (#252)

* design: 유저 위치 현황 화면 item 디자인 구현

* design: xml 파일명 수정

* feat: 로그 툴바에 뒤로가기 버튼 추가

* design: 유저 현황 화면 구현

* chore: string resource 이름 변경

* fix: 뱃지 중앙 정렬되지 않는 현상 수정

* refactor: layoutManager xml로 이동

* chore: meeting room 패키지 구조 변경

* feat: manifest에 현황 화면 추가

* chore: eta -> etadashboard 패키지명 변경

* style: ktLint 적용

* refactor: 모임 개설, 참여 api 분리하기 (#255)

* refactor: 약속 개설 v1 api에 맞게 요청/응답 데이터 수정

* refactor: 약속 참여 v1 api에 맞게 요청/응답 데이터 수정

* refactor: 약속 참여/개설 뷰모델 분리

* fix: MeetingResponse mapping 버그 수정

* fix: 약속 참여로 이동하지 않는 버그 수정

* fix: 모임 참여 시 유효성 검증 제대로 되지 않는 버그 수정

* style: ktLint 적용

* chore: startingPoint -> departure 프로퍼티명 변경

* chore: 쓰이지 않는 indicator 제거

* design: 홈 화면 리스트 디자인 (#260)

* design: 홈 화면 리스트 디자인

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* feat: 유저 현황 화면 api v1 연결 (#261)

* feat: 유저 위치 현황 api dto 구현

Co-authored-by: haeum808 <[email protected]>

* feat: 유저 위치 현황 Repository 구현

Co-authored-by: haeum808 <[email protected]>

* style: ktLint 적용

Co-authored-by: haeum808 <[email protected]>

---------

Co-authored-by: haeum808 <[email protected]>

* feat: 약속 참여 V1 API 구현 (#247)

* docs: 404에러 문서화를 위한 커스텀 어노테이션 추가

* docs: Swagger 회원 참여 API 문서화

* refactor: AliasFor 어노테이션으로 ApiResponse 속성값 매핑

* refactor: api url 버전명 추가

* feat: 기존의 /mates 요청 메서드 추가

* feat: 약속 참여 v1 API 구현

* style: 코드 컨벤션 적용

* chore: mate 패키지로 이동

* feat: 참여자 저장 응답 DTO 추가 및 지원하지 않는 메서드 제거

* docs: 리스트 형식 데이터를 @ArraySchema 사용해 표시

* refactor: 지원하지 않는 meeting 메서드 제거

* design: 홈 화면 리스트 없는 경우 디자인 (#262)

* design: 모임이 없을 때 보이는 화면

* chore: 불필요한 코드 삭제

* fix: FakeMeetingRepository postMeeting 반환 값 수정

* style: ktlint

* design: 홈 화면 플로팅 버튼 디자인 (#263)

* chore: 하얀색 취소, 더하기 아이콘 추가

* design: 홈 화면 플로팅 버튼 디자인

* fix: FakeMeetingRepository postMeeting 반환 값 수정

* style: ktlint

* fix: FakeMeetingRepository patchMatesEta 추가

* feat: 유저 현황 화면 리스트 어댑터 구현 (#265)

* feat: Eta item에 대한 uiModel 구현

* feat: adapter 구현 및 데이터 바인딩 연결

* style: ktLint 적용

* refactor: 함수 분리

* feat: 위치 권한 팝업 띄우는 로직 구현

* refactor: missing tooltip 리스너를 바인딩 어댑터로 분리

* style: ktLint 적용

* refactor: Pair 대신 Point 객체 사용

* refactor: magic number 제거 및 DurationMinuteType 구현

* style: ktLint 적용

* feat: 내 약속 목록 조회 API 문서화 및 구현 (#251)

* feat: 내 약속 목록 조회 API 문서화

- Swagger 문서화 코드 추가 및 이전 버전 API deprecated 설정
- 컨트롤러 단에 임시 반환을 위한 더미 데이터 추가
- 응답을 위한 dto 생성 및 문서를 위한 예시와 설명 추가

* feat: 내 약속 목록 조회 API

* fix: fixture 객체 사용에 따른 unique 제약 조건 위반 코드 제거

* fix: cherry-pick 시 누락된 코드 추가 및 fixture member 객체 미사용 코드로 수

* fix: meetingService, mateService 순환 참조 해결

* fix: fixture meeting 객체 사용에 따른 unique 제약조건 위반

* refactor: `saveAndSendNotifications` 호출하는 MeetingService 메서드명 수정

* refactor: `findByMeetingAndMember` 메서드 제거 및 해당 로직 meetingService 내에서 직접 수행

* fix: 모임 구독 시 실패

* refactor: 약속 인원 수, 메이트로 응답 생성 로직 메서드 분리

* fix: 시간 데이터 초 제거 후 반환하도록 수정 (#270)

* refactor: v1/mates 응답값 수정 (#268)

* refactor: 모임 참여 시 응답 데이터 수정

* refactor: 모임 참여 시 응답 데이터 수정

* feat: LocalTime의 ss 제거

* feat: 플로팅 버튼 화면 이동 구현 (#271)

* feat: 플로팅 버튼 눌러서 이동하는 로직 구현

* fix: 약속 참여 벼튼을 눌럿을 때 초대 코드 입력 화면으로 이동

* refactor: 함수 한줄로 변경

* feat: 홈 화면 리스트 어댑터 구현 (#272)

* feat: ListAdapter 구현

* feat: item fold 구현

* feat: 약속 시간 바인딩 어댑터

* feat: 쓰이지 않는 리스트 제거

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* feat: 폴링 방식 스케줄링 구현 (#274)

* config: WorkManager 의존성 추가

Co-authored-by: haeum808 <[email protected]>

* feat: WorkManager 작업 예약할 Worker 구현

Co-authored-by: haeum808 <[email protected]>

* feat: 작업 예약 하는 로직을 가진 Repository 추가

Co-authored-by: haeum808 <[email protected]>

* feat: 약속 참여 시 31번 작업 예약하는 기능 구현

Co-authored-by: haeum808 <[email protected]>

* feat: 유저 현황 화면에서 데이터 LiveData 받아오는 기능 구현

Co-authored-by: haeum808 <[email protected]>

* style: ktLint 적용

Co-authored-by: haeum808 <[email protected]>

* refactor: WorkRequest 생성하는 로직을 Worker로 이동

* refactor: 함수 분리 및 상수화

* feat: meetingId 전달하는 로직 구현

Co-authored-by: haeum808 <[email protected]>

* fix: 코루틴 캔슬되는 오류 수정

Co-authored-by: haeum808 <[email protected]>

---------

Co-authored-by: haeum808 <[email protected]>

* refactor: 약속 단건 조회 API 구현 (#256)

* refactor: mates 필드 @ArraySchema로 수정

* refactor: ErrorCode404 어노테이션으로 수정

* feat: 날짜, 시간 JsonFormat 적용

* feat: 회원이 참여하고 있는 특정 약속의 참여자 리스트 조회

* test: 약속에 참여하고 있는 회원이 아니면 예외 발생

* feat: 약속과 참여자들 정보 조회

* test: 약속 조회 시, 약속이 존재하지 않으면 예외 발생

* refactor: meetingId primitive type으로 변경

* refactor: JsonFormat 불필요한 옵션 제거

* test: Fixture.MATE 제거

* fix: import 추가

* fix: 머지 과정에서 누락된 코드 추가

---------

Co-authored-by: mzeong <[email protected]>

* feat: 위치 권한 받아오는 기능 구현 (#276)

* config: play service gms 의존성 추가

* chore: 위치 권한 메니페스트에 추가

* feat: 위치 권한 요청 기능 구현

* style: ktlint

* refactor: 코드리뷰 반영

* fix: ImageView에 제약 걸기

* fix: 깃액셔 문제

* feat: 약속 목록 조회 api 연결 (#279)

* feat: meetings/me api 연결

* feat: 시작 화면 변경, FloatingButton 통합

* feat: 시작 화면 변경, FloatingButton 통합

* refactor: 리뷰 반영

* feat: 로그 화면으로 navigate

* fix: ciˆ

* refactor: 리뷰 반영

* feat: 단일 약속 api 연결 (#281)

* feat: 단일 약속 api 연결

* feat: 24시간 내 로그화면 이동 활성화/ 이외 비활성화

* fix: 안내 메시지 수정

* refactor: 리뷰 반영

* feat: gps 위경도 받아오는 기능 구현 (#282)

* feat: 위치 경도 불러오는 기능 구현

* chore: log 제거 및 compress 메서드 추가

* feat: repository에서 compress 하게 변경

* style: ktlint

* chore: 0..8 상수화

* refactor: 퍼미션 체크 함수화

* style: ktlint

* chore: 함수 간소화

* chore: repository 요청 함수 분리

* chore: 한 줄로 변경

* feat: 약속 참여자 상태 목록 조회 API 기능 구현 (#277)

* feat: 직선 거리 계산 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 조건별 참여자 상태 반환 기능 추가

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 참여자가 약속 참여시 최초로 Eta 저장 기능 추가

* refactor: 소요시간 출발시간 로직 분리

* feat: Eta, Mate 관련 DTO 추가

* refactor: 예상소요시간 필드 추가

* feat: 참여자 Eta 목록 반환기능 구현

* fix: Fixture 사용 개선으로 코드 오류 개선

* test: Eta Test 추가

* test: eta 테스트 추가

* refactor: service 로직 경량화

* refactor: 가독성 개선

* style: Fixture 변수 재할당

* feat: eta 목록 조회 컨트롤러 코드 추가

* fix: backend 패키지 하위 변경만 커밋 내역에 포

* refactor: 중복 Eta dto 제거

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: mzeong <[email protected]>

* refactor: 유저 위치 현황 조회 시 자신의 닉네임 response로 받도록 수정 (#284)

* refactor: 서버 응답에 자기자신의 닉네임 추가

Co-authored-by: eun-byeol <[email protected]>

* fix: 직렬화, 역직렬화 오류 수정

* style: ktLint 적용

* style: ktLint 적용

* style: ktLint 적용

* fix: 빌드 오류 수정

* style: ktLint 적용

---------

Co-authored-by: eun-byeol <[email protected]>

* fix: update 미반영 오류 문제 해결 (#287)

* refactor: HomeActivity -> MeetingsActivity로 이름 변경 (#291)

* refactor: HomeActivity -> MeetingsActivity로 이름 변경

* refactor: 기타 home 제거

* style: ktLintFormatˆ

* fix: 유저 현황표 폴링 방식 수정 (#292)

* refactor: 폴링 간격 수정

Co-authored-by: haeum808 <[email protected]>

* refactor: 가장 최신의 데이터를 observe하도록 수정

Co-authored-by: haeum808 <[email protected]>

---------

Co-authored-by: haeum808 <[email protected]>

* refactor: 데모데이 이슈 문제 해결  (#293)

* refactor: 현재 위치로 소요시간 계산하도록 수정

* refactor: 참여자의 현재 위도 경도 null 처리

* refactor: 도착 상태에 따른 소요시간 반환

* refactor: etaService를 MeetingController가 의존하도록 변경

* refactor: 곧도착 조건 로직 메서드로 분리

* feat: 현황 화면 툴바 리스너 등록 (#304)

* feat: 현황 화면 툴바 리스너 구현

* feat: 툴바에 모임 이름 전달하는 코드 추가

* feat: 초대 코드 입력에서 다른 화면으로 이동할 때 초대 코드 입력 화면 finish() (#305)

* fix: 리스트 깜빡임 현상 해결 (#306)

* fix: 리스트 깜빡임 현상 해결

* refactor: 아이템 애니메이션 제거 코드를 xml로 이동

* fix: 개설하기에서 뒤로가기 버튼 누르면 현 화면 없애기 및 오디 캐릭터 추가 (#301)

* fix: 개설하기에서 뒤로가기 버튼 누르면 finish()

* fix: 개설하기, 참여하기 후 돌아오면 메뉴 닫기

* style: ktlint

* chore: 오디 캐릭터들 추가

* design: 약속 없을 때 오디 캐릭터 추가

* design: 약속 만들었을 때 오디 캐릭터 추가

* design: 약속 참여 했을 때 오디 캐릭터 추가

* chore: BindingAdapter 사용으로 변경

* chore: BindingAdapter 사용으로 변경

* test: 2차 스프린트 구현 사항 테스트 (#308)

* config: 테스트 관련 의존성 추가

* test: 초대 코드 입력 화면 ui 테스트 구현

* test: 주소 유효성 검증 테스트 구현

* config: 프래그먼트 테스트를 위한 의존성 추가

* test: 약속 이름 입력 화면 테스트 구현

* test: 약속 이름 입력 테스트 수정 및 패키지 이동

* test: 닉네임 입력 화면 테스트 구현

* refactor: typeText -> replaceText로 변경

* chore: 불필요한 테스트 제거

* style: given/when/then 작성

* fix: unitTest 실행되지 않는 현상 해결

* feat: 로그에서 30분전이면 오디 버튼이 아예 안뜨게 구현 (#309)

* fix: 약속 로그 관련 수정 사항 (#314)

* fix: 로그 list가 깜빡이는 문제, 그림자가 listitem을 덮지 않는 문제 해결

* Update android/app/src/main/res/layout/activity_notification_log.xml

Co-authored-by: kimhm0728 <[email protected]>

---------

Co-authored-by: kimhm0728 <[email protected]>

* feat: 내 약속 목록 조회 시 현재 이후 약속만 조회 (#302)

* feat: 약속 시간을 기준으로 내 약속 목록 필터링

* fix: 24시간 전 약속도 포함되도록 수정

* fix: meeting fixture를 사용하지 않도록 코드 수정

* �test: DisplayName 설명 구체화

Co-authored-by: eun-byeol <[email protected]>

* refactor: 테스트 안정성을 위해 LocalDateTime 변수로 선언 후 사용

* rafactor: 시간 비교 코드 수정

Co-authored-by: coli-geonwoo <[email protected]>

---------

Co-authored-by: eun-byeol <[email protected]>
Co-authored-by: coli-geonwoo <[email protected]>

* fix: 약속 리스트 관련 수정 사항 (#315)

* refactor: 디자인 수정 및 클릭 위에 따른 navigation과 fold 수정, 깜빡임 수정

* refactor: 비활성화된 오디 버튼 클릭 시 표시 메시지 변경

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* �fix: 행방불명상태의 소요시간 응답 오류 해결 (#317)

* refactor: isMissing 소요시간 반환 로직 추가

* refactor: 저장 및 업데이트 시점에 나노초 제거, createAt 변경 방지 옵션 추가

* refactor: prePersist 기능 사용 롤백

* test: isModified 테스트 오류 수정

* fix: 해방불명 오류 해결 (#320)

* fix: 해결되지 않은 행방불명 오류 해결 (#323)

* fix: compress 메서드 수정, gps 온오프 확인 (#321)

* fix: compress 메서드 좌표 길이에 상관없이 안전하게 자르게 변경

* fix: 유저가 gps 껐는지 확인하는 로직 추가

* style: ktlint

* style: ktlint

* fix: 도착한 상태인 사람의 소요시간이 -1로 반환되고 있는 문제 해결 (#325)

* fix: 확장 버튼 패딩 20dp 주기 (#329)

* fix: 로그에서 오디? 버튼이 30분 전부터 계속 보이게 변경 (#327)

* fix: 로그 화면에서 null이 잠깐 나타났다 사라지는 뷰 수정 (#332)

* design: 초대 코드 item과 모임 정보 칸과의 간격을 늘림 (#334)

* feat: 안드로이드 로깅 환경 구축 (#337)

* feat: Analytics 기초 구현

* config: firebase crashlytics 의존성 추가

* feat: 네트워크 로깅 확장 함수 추가

* feat: 네트워크 로깅 구현

* feat: 약속 리스트 -> ETA 현황, 약속 방 -> ETA 현황 이동 버튼에 로그 추가

* feat: bindingFragment 체류시간, 이탈 시점 추적 로그

* style: ktLintFormat

* fix: rollback

---------

Co-authored-by: kimhyemin <[email protected]>

* feat: EtaDashboardViewModelTest 구현 (#338)

* config: coroutine test 의존성 추가

* feat: FakeMatesEtaRepository 추가

* feat: ViewModel 테스트를 위한 클래스들 추가

* feat: EtaDashBoardViewModelTest 추가

* style: ktlint

* chore: given, when, then 형식 추가

* fix: 로그 화면 닉네임들 길어지면 안보이는 버그 수정 (#341)

* feat: 닉네임 길면 스크롤 되게 변경

* style: xml 코드 reformat code

* refactor: response. requset api 순서에 맞게 맞추기, 패키지 위치 수정 (#340)

* chore: MateEtaInfoResponse 위치 변경

* chore: 패키지 위치 변경 및 api 순서에 맞게 변경

* docs: test coverage report 스크립트 추가 (#254)

* docs: test coverage report 스크립트 추가

* docs : 테스트 커버리지 워크플로우 추가

---------

Co-authored-by: coli-geonwoo <[email protected]>

* refactor : 나노초 제거를 직렬화 도구로 수행 (#303)

* refactor: 시간 형식을 직렬화 도구로 통일

* style: 컨벤션 준수

* style: 첫번째 행 개행 추가

* test: 직렬화 도구 테스트 추가

* test: 테스트 검증 스트림으로 수정

---------

Co-authored-by: coli-geonwoo <[email protected]>

* refactor: 시간 비교 로직에서 초/나노초 단위 trim (#346)

* refactor: 나노초/초 제거를 util 클래스로 수행

* style: 불필요한 import 문 삭제

* test: 24시간 이내 판단로직 테스트 오류 개선

* chore: 메서드명 변경

trim > trimSecondsAndNanos

---------

Co-authored-by: coli-geonwoo <[email protected]>

* �refactor: EtaStatus 매핑 로직 개선 및 테스트 코드 추가 (#351)

* refactor: calculate()인자로 Location 타입을 받도록 수정

* refactor: eta 로직 가독성 개선

* refactor: eta 테이블에 isMissing 컬럼 추가

* test: Eta 예외 상황 테스트 추가

* refactor: 조건식 검증 순서 변경

* test: 테스트 코드 축약

---------

Co-authored-by: coli-geonwoo <[email protected]>

* config: 앱 출시를 위한 수정 (#350)

* config: VERSION.1_8 -> VERSION_17

* config: versionCode 1 -> versionCode 4

* config: ad id에 대한 설정 무시하게 설정

* config: parcelize, kapt, crashlytics 버전 카탈로그에 맞게 변경 (#353)

* refactor: 권한 체크, 권한 요청 분리 (#347)

* refactor: PermissionHelper에 위치, 알림 권한 체크하는 로직 추가

* refactor: PermissionHelper에 위치, 알림 권한 체크하는 로직 추가

* refactor: coarse, fine location 권힌이 허용되면 백그라운드 location 요청하게 변경

* refactor: PermissionHelper에 권한 요청하는 로직 추가

* style: ktlint

* refactor: 함수화

* refactor: 메서드 네이밍 변경

* style: ktlint

* style: ktlint

* refactor: 불필요한 코드 삭제

* refactor: requires API 어노테이션 삭제

* feat: 서버 응답 400, 500번대 예외 처리 (#359)

* feat: ApiResultCallAdapter 구현

* feat: fetchMeetingCatalog2ˆ

* feat: sample error handlingˆ

* chore: renamed packageˆ

* refactor: call adapter의 response type private로 변경

* test: FakeMeetingRepository 메서드 구현

* refactor: 네트워크 에러 시 출력 메시지 수정

* refactor: body null 체크

* chore: 패키지 변경 data -> domain

* refactor: 서버 에러 리턴시 에러 메시지 파라미터 이름 변경 error -> errorMessageˆ

* refactor: Extension의 람다 이름 변경, func -> blockˆ

* refactor: nullable 포함

* refactor: sealed interface로 변경

* refactor: FakeMeetingRepository listOf() -> emptyList()로 변경

* refactor: ApiResultCall execute 미지원 메시지 한글로 변경

* refactor: 로깅 관련 코드 리팩터링 (#361)

* feat: 로깅 인터페이스 및 구현체 구현

* refactor: 기존 firebaseAnalytics를 추상화한 객체로 수정

* style: ktLint 적용

* refactor: 기존 firebaseAnalytics를 추상화한 객체로 수정

* chore: 로깅 프레임워크 적용 및 모니터링 대시보드 구성 (#348)

* chore: docker run 시에 volume 설정 추가

Co-authored-by: mzeong <[email protected]>

* chore: 불필요한 env 제거

Co-authored-by: mzeong <[email protected]>

* chore: 로그 파일 생성을 위해 Logback 설정

Co-authored-by: eun-byeol <[email protected]>

* chore: commons-logging 제외

Co-authored-by: eun-byeol <[email protected]>

* feat: exceptionHandler, interceptor 로그 추가

Co-authored-by: eun-byeol <[email protected]>

* chore: backend cd 스크립트 push 브랜치 수정

Co-authored-by: mzeong <[email protected]>

* chore: backend cd 스크립트 docker volume 수정

Co-authored-by: mzeong <[email protected]>

* chore: 로그 파일 gitignore에 추가

Co-authored-by: eun-byeol <[email protected]>

* chore: amount path 절대 경로로 수정

Co-authored-by: mzeong <[email protected]>

* chore: 로그 파일 절대 경로로 수정

Co-authored-by: eun-byeol <[email protected]>

* chore: 현재 작업중인 브랜치로 checkout하도록 임시 수정

Co-authored-by: mzeong <[email protected]>

* chore: profile에 따라 파일 경로 변경

Co-authored-by: eun-byeol <[email protected]>

* chore: 푸시 시 배포 적용되는 브랜치 수정

Co-authored-by: eun-byeol <[email protected]>

* chore: interceptor에서 request body 로그 출력

- wrapper, filter 생성

Co-authored-by: eun-byeol <[email protected]>

* chore: interceptor에서 response body 로그 출력

- wrapper 생성

Co-authored-by: eun-byeol <[email protected]>

* chore: 로그 개행 제거, 정상 요청에 대한 response body 로그 추가

Co-authored-by: eun-byeol <[email protected]>

* chore: ContentCachingResponseWrapper 사용해 response body 로그 추가

Co-authored-by: eun-byeol <[email protected]>

* chore: ContentCachingRequestWrapper 사용해 request body 로그 추가

Co-authored-by: eun-byeol <[email protected]>

* chore: cd workflow trigger 이벤트 수정

Co-authored-by: mzeong <[email protected]>

---------

Co-authored-by: eun-byeol <[email protected]>

* refactor: 현황 화면과 로그 화면을 하나의 activity로 관리 (#365)

* refactor: 액티비티 xml 파일 추가 및 프래그먼트로 변경

* refactor: 로그, 현황 화면의 viewModel 제거, 하나로 합치기

* refactor: 현황 화면의 툴바, 복사 로직을 액티비티로 이동

* refactor: 로그 화면의 툴바, 복사 로직을 액티비티로 이동

* feat: 프래그먼트 화면 전환 로직 구현

* chore: eta -> etaDashboard, room -> notificationLog 함수명 변경

* style: ktLint 적용

* feat: 뒤로 가기 버튼 누르면 백스택 삭제하는 로직 구현

* test: 리팩터링에 따른 테스트 수정

* style: ktLint 적용

* design: 툴바 폰트 크기 줄이기  (#389)

* fix: 정확한 위치 가져오게 getCurrentLocation로 변경 (#390)

* feat: 약속 참여자 ETA 조회 시, 수도권 외 지역 예외처리 (#368)

* feat: 커스텀 어노테이션으로 수도권 위경도 좌표 검증 로직 구현

* feat: 수도권 위경도 좌표 검증 로직 Request Dto에 적용

* test: 수도권 위경도 좌표 검증 테스트 코드 가독성 개선

* refactor: 불필요한 괄호 제거

* refactor: 변수명 수정

* fix: 컨트롤러에서 @SupportRegion 로직 타지 않는 문제 해결

* design: 로그인 화면 디자인 (#388)

* design: 로그인 화면 디자인

* design: 올바른 해상도 이미지로 변경

* design: 쓰이지 않는 이미지 제거

* refactor: 리뷰 반영

* design: 로그인 이미지 뷰에서 scaletype 삭제

* test: InviteCodeViewModel 테스트 (#392)

* test: SingleLiveData를 위한 getOrAwaitValue와 SingleLiveData가 한 번 Handled 되었는지 알기 위한 getIfHandled 구형

* test: checkInviteCode() 테스트 구현

* test: FakeAnalyticsHelper logEvent의 리턴 Unit으로 변경

* test: 리뷰 반영

* fix: 동일한 topic을 구독하여 참여하지 않은 메이트의 알림 받음 (#367)

* refactor: 생성일시도 포함하여 주제 구독

- FcmTopic 객체에서 2)약속 아이디, 생성일시로 2)형식에 부합하는 주제 생성
- FcmSendRequest 필드로 FcmTopic 사용하여 잘못된 주제로 구독되는 것 방지
- 로그 메세지 상세화

* style: 어노테이션 순서 정렬

Co-authored-by: eun-byeol <[email protected]>

* refactor: 가독성 향상을 위해 `StringBuilder` 대신 `+` 사용

Co-authored-by: eun-byeol <[email protected]>

* refactor: 부 생성자, 주 생성자 순으로 정렬

Co-authored-by: eun-byeol <[email protected]>

* refactor: `Meeting`이 `FcmTopic`을 모르도록 코드 수정

---------

Co-authored-by: eun-byeol <[email protected]>

* test: 3차 스프린트 구현 사항 테스트 (#396)

* test: MeetingJoinViewModel 테스트 작성

* test: AddressSearchViewModel 테스트 작성

* test: MeetingJoinViewModel given/when/then 순서 수정

* test: MeetingCreationViewModel 테스트 작성

* style: ktLint 적용

* refactor: FakeRepository의 반환값을 테스트 픽스처로 분리

* test: MeetingRoomViewModel의 로그 관련 함수 테스트 작성

* refactor: mapper 함수 타입 변경

* refactor: 프로퍼티 타입 변경 및 테스트 픽스처 분리

* style: ktLint 적용

* refactor: 테스트 픽스처 데이터 수정

* test: 약속 날짜를 오늘 날짜로 선택했을 때의 테스트 추가

* chore: 불필요한 코드 삭제

* test: MeetingsViewModel 테스트 작성 (#398)

* test: MeetingsViewModel 테스트 작성

* refactor: meetingsViewModel 한 줄 메서드들 줄바꿈 후 중괄호 삽입

* refactor: Fixture 적용, MeetingCatalog -> MeetingCatalogUiModel 매핑 메서드명 수정

* chore: 뷰모델 테스트 패키지 변경 (#403)

* design: 현황 화면 뱃지 애니메이션 추가 (#401)

* design: 친구 현재 위치 현황표 닉네임 사이즈 줄이기

* feat: 지각, 지각 위기 바운스 애니매이션 추가

* chore: 맞춤법 수정

* chore: 프로덕션 서버에 서비스 띄우기 (#393)

* chore: dev 전용 CD 파일 수정

Co-authored-by: eun-byeol <[email protected]>

* chore: prod 전용 CD 파일 추가

Co-authored-by: eun-byeol <[email protected]>

* chore: path 임시 주석 처리

Co-authored-by: eun-byeol <[email protected]>

* chore: prod name 수정

Co-authored-by: eun-byeol <[email protected]>

* chore: 이미지 태그명 수정

Co-authored-by: eun-byeol <[email protected]>

* chore: 도커 이미지 실행 이미지 태그명 수정

Co-authored-by: eun-byeol <[email protected]>

* chore: 이미지 pull, 제거 순서 변경
Co-authored-by: eun-byeol <[email protected]>

* chore: prod 서버 로깅 설정 추가
Co-authored-by: eun-byeol <[email protected]>

* chore: prod cd event branch 변경

Co-authored-by: Hyeon0208 <[email protected]>

* chore: prod ci 스크립트 추가

Co-authored-by: Hyeon0208 <[email protected]>

---------

Co-authored-by: H <[email protected]>

* design: 로그 화면 디자인 수정 (#409)

* refactor: 현황 화면과 로그 화면의 툴바를 분리

* refactor: 로그 리스트 어댑터의 멀티 뷰 타입 제거

* style: ktLint 적용

* design: 로그 화면 툴바 디자인 수정

* design: 로그 리스트 아이템 디자인 수정

* design: 로그 햄버거 메뉴 디자인 구현

* feat: 햄버거 약속 친구 리스트 연결 기능 구현

* fix: 디자인 오류 수정

* fix: MeetingRoomActivity 백 버튼 리스너 버그 수정

* style: ktLint 적용

* design: 로그 리스트 아이템에 말줄임표 추가

* refactor: splash 라이브러리 사용으로 변경 (#406)

* config: Splash Screen 의존성 추가

* chore: Splash 액티비티 삭제

* feat: MeetingsActivity에서 Splash 화면 뜨게 수정

* chore: 스플래쉬 로고 크기 수정

* refactor: 애니메이션 제거 및 함수 분리

* feat: 재촉하기 API 구현 (#394)

* chore: 중복된 클래스 제거

* docs: 문서화 코드 작성

* feat: notificationType nudge 추가

* feat: 불변 값 객체로 전환

* feat: fetch join 활용한 mate 메서드 구현

* feat: 콕찌르기 구현

* feat: errorCode400 description 추가

* style: 쿼리 컨벤션 준수

* style: 개행 컨벤션 준수

* chore: 메서드 분리

* chore: api 수정

* chore: test DisplayName 수정

* test: test 가독성 개선

* refactor: meeting 변수 분리 삭제

* chore: 찌르기 > 재촉하기

* chore: api 수정

* docs: api 수정

* test: displayName 구체화

* fix: fcmTopic 값 객체 수정사항 반영

---------

Co-authored-by: coli-geonwoo <[email protected]>

* feat: 네트워크 오류, 서버 오류 ��시 스낵바/토스트 구현 (#411)

* feat: 주소 검색 위경도 변환시 에러 핸들링 구현

* feat: 모임 개설 에러 핸들링 구현

* feat: 초대 코드 입력 에러 핸들링 구현

* feat: 약속 참여 에러 핸들링 구현

* feat: 참여 중인 약속 목록 조회 에러 핸들링 구현

* feat: 약속 로그, 현황 화면 에러 핸들링 구현

* chore: 불필요한 코드 삭제

* test: fake repository 반환타입 수정

* style: ktLint 적용

* refactor: 토스트를 스낵바로 수정

* refactor: 에러 핸들링 관련 코드를 BaseViewModel로 분리

* refactor: _errorEvent, _networkErrorEvent를 private으로 변경

* docs: 약속 참여자 도착 현황 조회 API 문서화 (#405)

* config: 난독화 적용 (#415)

* config: 코드 난독화 적용

* config: 카카오 로그인 난독화 예외 처리 추가

* config: retrofit 난독화 예외 처리 추가

* config: 디버그 빌드 시 난독화 추가

* refactor: ETA 조회 API 응답 수정 (#418)

* refactor: ETA 조회 API 응답 수정 (#417)

* feat: 약속 참여자 도착 현황 조회 API 응답 수정

- 응답에 requesterMateId, mateId 추가
- ETA 업데이트 로직 메서드 분리
- `EtaService` meetingId, memberId로 mate 조회하는 메서드 `MateService`로 이동
- 응답 DTO 교체에 따른 컨트롤러, 서비스 테스트 수정
- meetingId로 모든 mate 조회하는 메서드 이름 수정
- 약속 단건 조회 시 mate가 아닌 경우 400 대신 404 반환하도록 수

* fix: 문서화용 하드코딩 제거

* feat: 위치 현황 카카오톡 공유 기능 구현 (#426)

* config: firebase storage 의존성 추가

* feat: 뷰를 캡쳐하고 byteArray로 변환하는 기능 구현

* feat: firebase storage에 이미지 업로드하는 기능 구현

* feat: 공유하기 클릭 시 이미지 업로드 기능 구현

* refactor: 화면 전체가 아닌 RecyclerView만 캡쳐되도록 수정

* config: 카카오 공유하기 의존성 추가

* config: 카카오 공유하기 기초 셋팅

* chore: 패키지명 변경

* feat: 카카오 공유하기 기능 구현

* feat: 카카오 공유하기 기능과 뷰모델 연결

* refactor: 이미지 사이즈 카카오 api에 전달하도록 수정

* refactor: 카카오 공유 api 호출을 코루틴으로 수정

* style: ktLint 적용

* test: 테스트 파라미터 수정

* chore: ci에 kakao native key 추가

* style: ktLint 적용

* config: 버전 카탈로그 이름 변경

* refactor: ByteArrayOutputStream use 사용으로 변경

* refactor: 코루틴 사용 방법 변경

* chore: 패키지 변경

* style: ktlint 적용

* feat: 로딩 중 ProgressBar 다이얼로그 띄우는 기능 구현 (#430)

* design: 로딩 다이얼로그 구현

* feat: BindingActivity에 로딩 다이얼로그 show/hide 함수 추가

* feat: BaseViewModel에 isLoading 변경하는 함수 추가

* config: 프로가드 규칙 추가

* feat: 서버에서 데이터 받아오는 부분에 로딩 추가

* feat: 콕찌르기 기능 (#420)

* feat: 콕 찌르기 알림 타입 추가

* feat: 콕 찌르기 기능 구현

* feat: FakeMeetingRepository에 fetchNudge 추가

* refactor: nudgeSuccess -> nudgeSuccessMate 네이밍 변경

* refactor: get -> fetch로 변경

* test: 친구 재촉하면 친구 재촉 성공하는지 테스트

* style: ktlint

* style: ktlint

* style: ktlint

* feat: 초대 코드 카카오톡 공유하기 기능 구현 (#431)

* chore: 리스너 패키지 이동

* feat: 초대 코드 공유하기 기능 구현

* style: ktLint 적용

* style: 이미지 url 수정

* style: ktLint 적용

* feat: 초대 코드 공유 기능에 loading 추가

* style: ktLint 적용

* refactor: Firebase Analytics 로깅을 비동기로 남기도록 수정 (#435)

* refactor: 코루틴 스코프 내에서 로깅 함수 호출하도록 수정

* refactor: fragment 코루틴 스코프를 viewLifecycleOwner.lifecycleScope로 변경

* refactor: 재촉하기 API에 재촉한 사람 정보가 포함되도록 수정 (#437)

* docs: 문서화 코드 수정

* feat: 같은 약속 참여자인지 확인하는 책임 추가

* feat: 재촉하는 mate의 닉네임이 포함되도록 로직 개선

* feat: nudgeRequest dto null 검증로직 추가

* style: 컨벤션 준수

* refactor: deviceToken 반환로직 작성

* chore: 메서드 명 변경

* refactor: mate로부터 디바이스 토큰 추출

* chore: 에러 메시지 수정

---------

Co-authored-by: coli-geonwoo <[email protected]>

* fix: fragment 로깅 찍는 시점 수정 (#441)

* chore: MySQL DB를 실행할 EC2 생성 및 프로덕션 EC2 서버와 연결 (#419)

* feat: eta entity NotNull 속성 추가

Co-authored-by: Hyeon0208 <[email protected]>

* chore: mySql DB 적용, ddl-auto 속성 validate로 변경

- schema sql 파일 추가
Co-authored-by: Hyeon0208 <[email protected]>

* chore: 스키마 오류 수정

* chore: 스키마 타입 오류 수정

* chore: defer-datasource-initialization 설정 제거

* fix: mate save메서드 트랜잭션 적용

* chore: test yml 설정에 defer-datasource-initialization 설정 제거

---------

Co-authored-by: eun-byeol <[email protected]>

* chore: HTTPS 적용 (#436)

* chore: prod cd 포트포워딩 443 변경

Co-authored-by: Hyeon0208 <[email protected]>

* chore: cd docker 포트포워딩 변경

Co-authored-by: Hyeon0208 <[email protected]>

* chore: MsSQL 설정 추가

* fix: Swagger CORS 에러 해결

---------

Co-authored-by: Hyeon0208 <[email protected]>
Co-authored-by: mzeong <[email protected]>

* chore: 로그 관련 중복 코드 제거 및 로그 내 Request Body 개행 제거 (#422)

* chore: console에 로그 레벨에 따른 색상 출력 기능 추가

* chore: log pattern 변수화, 로그 출력 시간 서울 기준으로 변경

* refactor: Interceptor 내 로그 메시지 중복 코드 Wrappers Dto로 분리

* refactor: Wrapping 전용 Filter 클래스명 수정

* refactor: record class에서 일반 class로 변경

* chore: deprecated API 제거 (#438)

* refactor: deprecated된 api 제거

* refactor: deprecated api test 수정

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: eun-byeol <[email protected]>

* fix: manifest에서 MAIN, LAUNCHER 인텐트 필터와 data 인텐트 필터를 분리 (#445)

* refactor: 약속 참여 API 응답 수정 (#439)

* refactor: 약속 참여 API 응답 수정

- 닉네임 중복 체크 로직 제거
- 참여자의 `estimatedMinutes`로 RouteTime 생성

* refactor: `Meeting` 내 `getMeetingTime` 메서드 사용

Co-authored-by: coli-geonwoo <[email protected]>

* �refactor: 테스트 편의를 위해 `MateSaveResponse` 스웨거 예시를 미래 날짜로 수정

Co-authored-by: eun-byeol <[email protected]>

* style: 한 줄 최대 길이 초과로 개행

Co-authored-by: eun-byeol <[email protected]>

* fix: 누락된 LocalDate, LocalTime 임포트 추가

---------

Co-authored-by: coli-geonwoo <[email protected]>
Co-authored-by: eun-byeol <[email protected]>

* chore: dev 서버 DB MySQL 교체 작업 (#446)

* chore: dev 서버 MySQL DB로 교체

Co-authored-by: eun-byeol <[email protected]>

* chore: 주석 처리 및 연결 테스트

Co-authored-by: eun-byeol <[email protected]>

* chore: 주석 처리 및 연결 테스트

Co-authored-by: eun-byeol <[email protected]>

* chore: 주석 제거

Co-authored-by: eun-byeol <[email protected]>

* chore: 컨테이너 명 변경 및 포트 포워딩 포트번호 변경

Co-authored-by: eun-byeol <joe…
  • Loading branch information
12 people authored Oct 2, 2024
1 parent 816ee8c commit 4bd1762
Show file tree
Hide file tree
Showing 21 changed files with 81 additions and 72 deletions.
4 changes: 2 additions & 2 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'
compileOnly 'org.projectlombok:lombok'

implementation "org.flywaydb:flyway-mysql"
implementation "org.flywaydb:flyway-core"
implementation 'org.flywaydb:flyway-mysql'
implementation 'org.flywaydb:flyway-core'
}

tasks.named('test') {
Expand Down
17 changes: 17 additions & 0 deletions backend/src/main/java/com/ody/common/config/FlywayConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.ody.common.config;

import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FlywayConfig {

@Bean
public FlywayMigrationStrategy repairMigrateStrategy() {
return flyway -> {
flyway.repair();
flyway.migrate();
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ protected Object determineCurrentLookupKey() {
boolean isTransactionActive = TransactionSynchronizationManager.isActualTransactionActive();
boolean readOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly();
ReplicationType type = ReplicationType.from(isTransactionActive, readOnly);
log.info("(트랜잭션 활성화 여부 : {}) (readOnly : {}) => {} DB 연결", isTransactionActive, isTransactionActive, type);
log.info("(트랜잭션 활성화 여부 : {}) (readOnly : {}) => {} DB 연결", isTransactionActive, readOnly, type);
return type;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
@RequiredArgsConstructor
public enum ReplicationType {

READ((transactionActive, readOnly) -> !transactionActive || readOnly),
WRITE((transactionActive, readOnly) -> transactionActive && !readOnly);
READ((transactionActive, readOnly) -> transactionActive && readOnly),
WRITE((transactionActive, readOnly) -> !transactionActive || !readOnly);

private final BiPredicate<Boolean, Boolean> condition;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class SupportRegionValidator implements ConstraintValidator<SupportRegion
private static final BigDecimal MAX_LATITUDE = new BigDecimal("38.3");
private static final BigDecimal MIN_LONGITUDE = new BigDecimal("125.6");
private static final BigDecimal MAX_LONGITUDE = new BigDecimal("127.9");
private static final BigDecimal MISSING_COORDINATES = new BigDecimal("0.0");

private String latitudeFieldName;
private String longitudeFieldName;
Expand Down Expand Up @@ -41,11 +42,17 @@ public boolean isValid(Object object, ConstraintValidatorContext constraintValid

private boolean isInLatitudeRange(String latitude) {
BigDecimal latitudeValue = new BigDecimal(latitude);
return MIN_LATITUDE.compareTo(latitudeValue) <= 0 && MAX_LATITUDE.compareTo(latitudeValue) >= 0;
return isMissingCoordinate(latitudeValue)
|| (MIN_LATITUDE.compareTo(latitudeValue) <= 0 && MAX_LATITUDE.compareTo(latitudeValue) >= 0);
}

private boolean isInLongitudeRange(String longitude) {
BigDecimal longitudeValue = new BigDecimal(longitude);
return MIN_LONGITUDE.compareTo(longitudeValue) <= 0 && MAX_LONGITUDE.compareTo(longitudeValue) >= 0;
return isMissingCoordinate(longitudeValue)
|| (MIN_LONGITUDE.compareTo(longitudeValue) <= 0 && MAX_LONGITUDE.compareTo(longitudeValue) >= 0);
}

private boolean isMissingCoordinate(BigDecimal coordinate) {
return MISSING_COORDINATES.compareTo(coordinate) == 0;
}
}
12 changes: 0 additions & 12 deletions backend/src/main/java/com/ody/meeting/domain/Location.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package com.ody.meeting.domain;

import com.ody.common.exception.OdyBadRequestException;
import jakarta.persistence.Embeddable;
import jakarta.persistence.Embedded;
import jakarta.validation.constraints.NotNull;
import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -14,8 +12,6 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Location {

private static final List<String> SUPPORT_REGION = List.of("서울", "경기", "인천");

@NotNull
private String address;

Expand All @@ -28,18 +24,10 @@ public Location(String address, String latitude, String longitude) {
}

public Location(String address, Coordinates coordinates) {
validateSupportRegion(address);
this.address = address;
this.coordinates = coordinates;
}

private void validateSupportRegion(String address) {
SUPPORT_REGION.stream()
.filter(address::startsWith)
.findAny()
.orElseThrow(() -> new OdyBadRequestException("현재 지원되지 않는 지역입니다."));
}

public String getLatitude() {
return coordinates.getLatitude();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.ody.util.TimeUtil;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -62,6 +61,7 @@ private void scheduleEtaNotice(Meeting meeting) {
LocalDateTime etaNoticeTime = meeting.getMeetingTime().minusMinutes(ETA_NOTICE_TIME_DEFER);
Instant startTime = etaNoticeTime.toInstant(TimeUtil.KST_OFFSET);
taskScheduler.schedule(() -> fcmPushSender.sendNoticeMessage(noticeMessage), startTime);
log.info("{} 타입 알림 {}에 스케줄링 예약", NotificationType.ETA_NOTICE, startTime.atZone(TimeUtil.KST_OFFSET));
}

private String generateUniqueInviteCode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.ody.meeting.domain.Meeting;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import java.time.format.DateTimeFormatter;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -13,6 +14,7 @@
public class FcmTopic {

private static final String TOPIC_NAME_DELIMITER = "_";
private static final DateTimeFormatter MEETING_CREATE_AT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");

@Column(name = "fcm_topic")
private String value;
Expand All @@ -28,6 +30,6 @@ public FcmTopic(String rawValue) {
private static String build(Meeting meeting) {
return meeting.getId().toString()
+ TOPIC_NAME_DELIMITER
+ meeting.getCreatedAt();
+ meeting.getCreatedAt().format(MEETING_CREATE_AT_FORMAT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public static Notification createEntry(Mate mate, FcmTopic fcmTopic) {
NotificationType.ENTRY,
LocalDateTime.now(),
NotificationStatus.DONE,
null
fcmTopic
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.ody.notification.domain.Notification;
import com.ody.notification.domain.NotificationStatus;
import com.ody.notification.domain.NotificationType;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
Expand All @@ -15,10 +16,10 @@ public interface NotificationRepository extends JpaRepository<Notification, Long
from Notification noti
left join fetch Mate m on noti.mate = m
left join Meeting meet on m.meeting = meet
where meet.id = :meetingId and noti.sendAt <= now()
where meet.id = :meetingId and noti.sendAt <= :time
order by noti.sendAt asc
""")
List<Notification> findAllMeetingLogs(Long meetingId);
List<Notification> findAllMeetingLogsBeforeThanEqual(Long meetingId, LocalDateTime time);

@Query("""
select noti
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.ody.notification.domain.message.DirectMessage;
import com.ody.notification.domain.message.GroupMessage;
import com.ody.notification.dto.request.FcmGroupSendRequest;
import com.ody.util.TimeUtil;
import java.time.Instant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -52,6 +54,7 @@ private void updateDepartureReminderToDone(Notification notification) {
public void sendNoticeMessage(GroupMessage groupMessage) {
try {
FirebaseMessaging.getInstance().send(groupMessage.message());
log.info("공지 알림 전송 | 전송 시간 : {}", Instant.now().atZone(TimeUtil.KST_OFFSET));
} catch (FirebaseMessagingException exception) {
log.error("FCM 공지 전송 실패 : {}", exception.getMessage());
throw new OdyServerErrorException(exception.getMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import com.ody.util.TimeUtil;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -77,10 +76,11 @@ public void scheduleNotification(FcmGroupSendRequest fcmGroupSendRequest) {
"{} 타입 {} 상태 알림 {}에 스케줄링 예약",
fcmGroupSendRequest.notification().getType(),
fcmGroupSendRequest.notification().getStatus(),
startTime
startTime.atZone(TimeUtil.KST_OFFSET)
);
}

@Transactional
@EventListener(ApplicationReadyEvent.class)
public void schedulePendingNotification() {
List<Notification> notifications = notificationRepository.findAllByTypeAndStatus(
Expand All @@ -93,7 +93,10 @@ public void schedulePendingNotification() {

@DisabledDeletedFilter
public NotiLogFindResponses findAllMeetingLogs(Long meetingId) {
List<Notification> notifications = notificationRepository.findAllMeetingLogs(meetingId);
List<Notification> notifications = notificationRepository.findAllMeetingLogsBeforeThanEqual(
meetingId,
LocalDateTime.now()
);
return NotiLogFindResponses.from(notifications);
}

Expand Down
4 changes: 0 additions & 4 deletions backend/src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ spring:
jpa:
hibernate:
ddl-auto: validate
defer-datasource-initialization: false
sql:
init:
mode: never
Expand All @@ -11,9 +10,6 @@ spring:
url: ENC(KUJNgDMlvi/imeVHjCO2QekgI4DNxZT9IrW0QlVVkJXJUUQ2DAUOqI91FVH7aFhXVCsfXtf0EUmF/JqN3GpXa/mVj3o4BNbqS3QsU50BgwEEodko+VwHY2ebDHUxlKA1/FXBSmu6p+Rd3rcNEzoBIA==)
username: ENC(jNYhZN6xMCmPQ7GZM+Hu3A==)
password: ENC(VRtr3RjM+XnPvRdLjrPMHyTSzDlEjR7o)
flyway:
enabled: true
baseline-on-migrate: true

log:
file:
Expand Down
7 changes: 2 additions & 5 deletions backend/src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,16 @@ spring:
web-allow-others: true
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:database?serverTimezone=Asia/Seoul
url: jdbc:h2:mem:database?serverTimezone=Asia/Seoul;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
username: sa
password:
jpa:
hibernate:
ddl-auto: validate
defer-datasource-initialization: false
dialect: org.hibernate.dialect.MySQLDialect
sql:
init:
mode: always
flyway:
enabled: true
baseline-on-migrate: true

log:
file:
Expand Down
4 changes: 0 additions & 4 deletions backend/src/main/resources/application-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ spring:
jdbc-url: jdbc:mysql://database-project.cluster-ro-cqsc6pyqhwww.ap-northeast-2.rds.amazonaws.com:3306/ody
username: ody
password: ENC(2n3gUzzFjknXpHDYwuF4d5BQw6XqLdsX)
defer-datasource-initialization: false
flyway:
enabled: true
baseline-on-migrate: true

log:
file:
Expand Down
11 changes: 10 additions & 1 deletion backend/src/main/resources/common.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
spring:
jpa:
open-in-view: false
defer-datasource-initialization: false
flyway:
enabled: true
baseline-on-migrate: true

springdoc:
default-consumes-media-type: application/json;charset=UTF-8
Expand All @@ -15,7 +19,7 @@ springdoc:

odsay:
url: https://api.odsay.com/v1/api/searchPubTransPathT
api-key: ENC(tHrCTqN0WANDzm2bOdUftqRCbiz64bAyY48Q3FsvMfhRNAnAbpAru/ebTLbwXoDfIcZuSPUFczw=)
api-key: ENC(4+ag02XbL8zS6rWoWHh7WzhKqBj5kaBwBcg04MpLr8nLJefO2PRY8E5o0WpRd3oRtvFv1s9lnWI=)
# TODO: 임시로 개인 api-key 추가 -> 팀 key로 변경 필요

google:
Expand All @@ -39,3 +43,8 @@ jasypt:
kakao:
url: https://kapi.kakao.com/v1/user/unlink
admin-key: ENC(b8lXOQquegCbdIgayVYIDBrhkNeyuucBArJScDGtEA2IWFiWeGUViiDhyZg0XpFE)

management:
health:
db:
enabled: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/*! ALTER DATABASE ody CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; */
/*! ALTER TABLE member CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; */
/*! ALTER TABLE meeting CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; */
/*! ALTER TABLE mate CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; */
/*! ALTER TABLE notification CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; */
/*! ALTER TABLE eta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; */
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
Expand All @@ -36,6 +37,16 @@ void isValid(String latitude, String longitude, boolean expected) {
assertThat(valid).isEqualTo(expected);
}

@DisplayName("행방불명 좌표(0.0)는 true를 반환한다")
@Test
void isValidMissingCoordinate() {
MateEtaRequest mateEtaRequest = new MateEtaRequest(false, "0.0", "0.0");

boolean valid = supportRegionValidator.isValid(mateEtaRequest, mock(ConstraintValidatorContext.class));

assertThat(valid).isEqualTo(true);
}

private static Stream<Arguments> supportRegionTestCases() {
return Stream.of(
Arguments.of("37.505713", "127.050691", true), // 서울
Expand Down
28 changes: 0 additions & 28 deletions backend/src/test/java/com/ody/meeting/domain/LocationTest.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ void findAllMeetingLogsById() {
notificationRepository.save(notification1);
notificationRepository.save(notification2);

List<Notification> notifications = notificationRepository.findAllMeetingLogs(odyMeeting.getId());
List<Notification> notifications = notificationRepository.findAllMeetingLogsBeforeThanEqual(odyMeeting.getId(), LocalDateTime.now());

assertThat(notifications.size()).isEqualTo(2);
}
Expand Down Expand Up @@ -86,7 +86,7 @@ void findAllNotificationsById() {
notificationRepository.save(pastNotification);
notificationRepository.save(futureNotification);

List<Notification> notifications = notificationRepository.findAllMeetingLogs(odyMeeting.getId());
List<Notification> notifications = notificationRepository.findAllMeetingLogsBeforeThanEqual(odyMeeting.getId(), LocalDateTime.now());

assertThat(notifications.size()).isOne();
}
Expand Down
Loading

0 comments on commit 4bd1762

Please sign in to comment.