Skip to content

Commit

Permalink
release: 백엔드 버전 2.3.3 배포 (#938)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>

* chore: CI 빌드 워크플로우 제거하고 Test만 실행하도록 변경

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

---------

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

* fix: develop 스키마 validation 오류 해결 BE BUG (#455)

* chore: local 프로필에서 h2 db를 사용하도록 변경

* fix: member에 nickname 컬럼 추가

* feat: 재촉하기 알림에 닉네임이 보이게 변경 (#457)

* feat: 재촉하기 api path -> body로 변경

* test: MeetingRoomViewModel 바뀐 api에 맞게 변경

* feat: "닉네임"이 제촉해요 형식으로 변경

* style: ktlint

* refactor: 위경도 좌표 �검증 로직 제거 및 Coordinate 객체 생성 (#447)

* refactor: Coordinates 객체 생성, 위경도 검증 로직 제거

* style: reformat code

* feat: double로 변환 가능한 좌표임을 검증

* refactor: `MateSaveRequest` 내 `toOriginCoordinates` 메서드 추가

* refactor: `Location`의 `getLatitude`, `getLongitude` 메서드 사용

* fix: 머지 과정에서 toOriginCoordinates 메서드 에러 해결

* feat: 카카오 소셜 로그인 구현 및 엑세스 토큰 발급 (#448)

* refactor: `DeviceToken` 필드명 `value`로 변경

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

* feat: `Member` 필드 추가

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

* feat: 임의의 `Provider`를 가진 회원이 존재하는지 조회

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

* feat: `Member` 생성

- 중복된 DeviceToken 검증
- 중복된 ProviderType, ProviderId 검증

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

* feat: 카카오 회원 생성 API

- 카카오 회원 생성, 액세스 토큰 갱신 API 문서화

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

* feat: `JwtTokenProvider` 구현

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

* fix: 누락된 `@RequestBody` 추가

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

* feat: 액세스, 리프레시 토큰 발급 및 액세스 토큰을 이용한 인증 전환

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

* chore: 누락된 jwt dependency 추가 및 ConfigurationProperties 설정

- ConfigurationProperties 설정 오류로 실패하는 테스트 추가

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

* feat: 액세스 토큰 갱신 API

* test: 헤더에 device-token 사용하는 테스트 Disabled 처리

* fix: 만료된 토큰 예외 처리 #428

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

* fix: 하나의 기기에 여러 카카오 계정 로그인 허용

- 카카오 계정이 다른 기기에 로그인 시 이전 디바이스 토큰 제거

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

* fix: 리프레시 토큰 만료 시 예외 처리 #432

* fix: 만료된 액세스 토큰도 파싱 #433

* test: 회원 생성 및 `DeviceToken` NotNull 조건 삭제

* test: 액세스 토큰 파싱, 검증, 액세스/리프레시 토큰 만료 확인

* test: 코드 재사용을 위해 TokenFixture 생성

* test: 카카오 로그인 API, 액세스 토큰 갱신 API

* test: 액세스 토큰 파싱, 갱신

* docs: Swagger summary 수정

* refactor: 사용하지 않는 AuthorizationHeader 내 상수 제거

* refactor: AccessToken 내 주석 제거

* test: AuthorizationHeader 생성

* fix: 잘못 머지된 NudgeMessage 빌드 코드 수정

* fix: Member 테이블 sql 수정

* fix: 누락된 Member 생성자 추가 및 제거될 테스트 Disabled 처리

* refactor: 사용하지 않은 Token 객체 제거

---------

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

* refactor: 로그 목록 조회, 약속 단건 조회 API에 imageUrl 필드 추가 (#461)

* feat: 약속 단건 조회에 imageUrl 추가

* feat: 로그 목록 조회에 imageUrl추가

* chore: 사용하지 않은 API 제거

* test: v1/mates 테스트 삭제

---------

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

* refactor: 약속 참여 api 수정 및 닉네임 입력 화면 삭제 (#452)

* refactor: 약속 참여 api 요청/응답 파라미터 수정

* chore: 닉네임 입력 화면 삭제

* chore: 닉네임 관련 테스트 삭제

* style: ktLint 적용

* fix: response 파라미터명 수정

* feat: 로그 목록 조회, 약속 단건 조회 response에 imageUrl 필드 추가 (#462)

* feat: response 들에 imageUrl 필드 추가

* feat: TestFixtures 프로퍼티에 imageUrl 값 추가

* style: ktlint

* fix: 수정된 jar가 배포되지 않는 문제 해결 (#464)

* chore: 컴포즈 파일 제거

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

* chore: 스키마 설정 수정

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

* chore: CD 파이프라인 clean up 명령어 수정

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

* chore: 서브모듈 커밋

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

* chore: CD 파이프라인 변경된 환경변수에 맞춰 제거

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

* feat: 형상 관리용 Dev 전용 Docker 컴포즈 파일 추가

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

---------

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

* feat: 카카오 소셜 로그인 구현 (#442)

* chore: 카카오 sdk 의존성 추가

* feat: 카카오톡으로 리다이렉션 추가

* feat: 카카오톡으로 가입 기능 구현

* feat: api 서버에 가입 요청하는 기능 구현

* chore: mockWebServer 의존성 추가

* refactor: 스플래시에서 로그인 화면으로 이동하는 메서드 이름 변경

* chore: thirdparty.login.model 패키지명 entity로 변경

* refactor: deprecated된 MemberService 제거

* feat: 카카오 로그인 후 api 서버에 access token과 refresh token 요청, 토큰 만료시 새 토큰 요청

* refactor: authorization 헤더 수정

* fix: refresh token이 제대로 가지 않는 문제 수정

* refactor: 사용되지 않는 키 삭제

* chore: mockServerTest 의존성 제거

* refactor: Meetings에서 로그인이 되어있지 않은 경우 로그인 화면으로 리다이렉션, 인터셉터에서 url 기반으로 refresh 체크하고 있는 문제 수정

* fix: LifecycleOwner 버그 수정

* fix: 로그인 이후 목록이 뜨지 않는 문제 수정

* refactor: LoginActivity에서 splash를 띄워주는 것으로 변경 + 자동 로그인 구현

* refactor: 리뷰 반영

* style: ktLintFormat

* fix: 메인 화면에서 어플리케이션 아이콘이 보이지 않는 문제 수정

* refactor: 리뷰 반영

* refactor: 리뷰 반영

* refactor: 쓰이지 않는 로그 제거

* refactor: 쓰이지 않는 메서드 제거

* refactor: 리뷰 반영

* chore: 안드로이드 CD 구축 (#463)

* chore: 안드로이드 cd 스크립트 작성

* chore: 리뷰 반영

* refactor: 모임 참여 로직 리팩터링 (#465)

* design: activity_meeting_join 출발지 입력 화면 디자인 수정

* refactor: MeetingJoinActivity에 출발지 입력 코드 추가

* refactor: 출발지 유효성 검증 로직 수정

* test: MeetingJoinViewModel 테스트 수정

* chore: 사용하지 않는 코드 삭제

* style: ktLint 적용

* refactor: 주소 editText setText 방식 수정

* fix: 약속 목록이 제대로 ui에 반영되지 않는 버그 해결 (#467)

* refactor: 약속 목록 옵저버 방식 변경

* feat: 로그인 화면 finish 추가

* fix: meetings Recyclerview 수정

* fix: 재촉하기 로그 문자열 수정

* fix: 약속 목록 isEmpty 버그 수정

* design: 오디 캐릭터 색상 변경

* refactor: 로그인 화면 네비게이션 바 보이게 수정

* style: ktLint 적용

* design: 초대코드 공유 이미지 링크 수정 (#470)

* feat: 약속 리스트에서 뒤로가기 2번 하면 나갈 수 있는 기능 구현 (#472)

* feat: 약속 리스트에서 뒤로가기 2번 하면 나갈 수 있는 기능 구현

* config: versionCode 4 -> 7

* refactor: 함수화 및 상수화

* docs: 회원 삭제 API (#477)

* chore: 앱 패키지명 변경 (#483)

* chore: 패키지명 변경

* chore: 패키지명 변경

* style: ktLint 적용

* chore: cd 스크립트 패키지명 변경

* fix: 카카오 웹 로그인 안되는 문제 수정 (#485)

* refactor: 지난 약속에 참여하지 못하도록 예외처리 (#474)

* feat: 지난 약속에 참여하지 못하도록 예외처리

* refactor: meeting에게 기한 만료 여부 묻도록 수정

---------

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

* design: 설정화면 디자인 (#492)

* chore: 필요한 아이콘들 추가

* feat: 홈화면에서 설정화면 가는 로직 구현

* feat: 설정 화면 디자인 및 설정 리스트 구현

* fix: 설정 화면 세로만 가능하게 변경

* refactor: onSetting -> onClickSetting

* refactor: 네이밍 변경

* refactor: 네이밍 변경

* refactor: 네이밍 변경

* style: ktlint

* chore: SettingActivity exported -> false

* feat: 설정 화면에서 개인정보 처리 방침, 서비스 이용 약관 링크 연결 (#496)

* feat: 개인정보 처리 방침, 서비스 이용 약관 설정에서 링크 연결

* refactor: 노션 uri들 local properties에서 관리

* android ci에 uri들 추가

* fix: 약속이 개설되지 않는 버그 수정 (#491)

* �refactor: 스프링 프로필 분리 (#494)

* chore: 테스트를 위한 트리거 변경

* chore: defer 옵션 추가

* chore: private yml dev 유저 옵션 변경

* chore: private yml root 비밀번호 추가

* chore: dev ddl-auto update로 변경

* chore: defer 옵션 제거

* chore: defer 옵션 제거

* chore: sql init 모드 변경

* chore: 프로필 분리

* chore: 사용되지 않은 환경변수 제거

* chore: 중복 설정 제거 및 프로필 별 적합한 옵션으로 수정

* chore: dev EC2에서 사용하는 컴포즈 파일 내용으로 수정

* chore: 실제 배포를 위한 develop으로 트리거 변경

* chore: dev 프로필 ddl-auto validate로 변경

* chore: local 환경의 로그 파일 경로 수정

* chore: 서브 모듈 update

* chore: 테스트를 위한 트리거 변경

* chore: defer 옵션 추가

* chore: dev ddl-auto update로 변경

* chore: defer 옵션 제거

* chore: defer 옵션 제거

* chore: sql init 모드 변경

* chore: 프로필 분리

* chore: 사용되지 않은 환경변수 제거

* chore: 중복 설정 제거 및 프로필 별 적합한 옵션으로 수정

* chore: 프로필 별 서브모듈 import 제거

* chore: 머지 충돌로 수정된 CD yml 다시 수정

* chore: dev의 ddl-auto validate로 변경

---------

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

* feat: 애플리케이션 재시작 시 PENDING 상태 알림 스케줄링 및 새벽 4시마다 지난 모임 삭제 기능 추가 (#410)

* feat: 시스템 타임 존 설정 추가

* feat: 알림 테이블에 fcmTopic 컬럼 추가

* feat: 애플리케이션 시작 시 PENDING 상태 알림 스케줄링 적용

* feat: 지난 약속방 논리 삭제 스케줄링 추가

* test: 접근제어자 protected로 변경 및 getter 제거

* feat: 오늘 약속의 기한이 지난 약속 리스트 조회 기능 추가 및 이벤트 발행 기능 추가

* feat: fcm topic 구독 해제 기능 추가

* test: 테스트 설명 추가

* refactor: Device Token getter 디미터 법칙 적용

* test: Base 추상 클래스 접근 제어자 수정

* refactor: 개행 적용

* style: 벌크 쿼리 메서드명 수정

* feat: 약속 참여 시간이 지난 약속방 참여 검증 추가

* refactor: 새벽 4시 스케줄링 코드 이벤트 리스너 제거 및 트랜잭션 제거

* refactor: 머지 충돌 작업 해결

* refactor: 조회 메서드에 약속 기간이 지나지 않은 조건 추가

* feat: 기간이 지나지 않은 약속 단건 조회 메서드 추가

* refactor: findFetchedMateById() 메서드 사용 시 약속 기한이 지난 약속 처리 로직을 service에서 처리

* test: 기한이 지난 약속 조회 테스트 어떤 약속인지 명확하게 변수명 네이밍

* style: 약속방 -> 약속으로 텍스트 변경

* style: 기간이 지나지 않은 약속방 전체 Mate 조회 메서드 네이밍 수정

* test: 2가지 검증 구문을 assertAll로 래핑

* feat: 로그아웃 기능 구현 (#493)

* chore: swagger 문서 작성

* feat: 생성자 로직 변경

* feat: 멤버 refreshToken 삭제 로직 구현

* feat: 로그아웃 기능 구현

* feat: 리프레시 토큰 초기화 로직 일관성 준수

* feat: 리프레시 토큰 validate 추가

* chore: 메서드 순서 변경

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

* feat: member 리프레시 토큰 update 기능 구현

* feat: 로그아웃 기능 구현

* chore: description 수정

* chore: 로그아웃 시 401 description 설명 추가

* refactor: 액세스 토큰만 받도록 로직 수정

* style: test 네이밍 변경

LogOut > Logout

* test: 테스트 에러 해결

* refactor: 불필요한 메서드 삭제

* refactor: 이미 로그아웃 상태더라도 200을 반환하도록 수정

---------

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

* chore: Dev 서버 Down 오류 해결  (#501)

* chore: 변경된 스키마로 수정

* chore: 방언 제거 및, sql.init.mode: never로 변경

* chore: dev의 sql.init.mode: always로 변경

* chore: local 프로필 sql.init.mode 설정 추가

* feat: 로그아웃 기능 구현 (#499)

* feat: ApiResult의 상태를 나타내는 is~ 변수 추가

* feat: 카카오 로그아웃 처리 콜백을 코루틴으로 구현

* feat: 오디 서버의 로그아웃 서비스 구현

* feat: 클라이언트에 저장된 access token과 refresh token 삭제 구현

* feat: repository에서 카카오와 오디 서버에서의 로그아웃 후 토큰을 삭제하는 기능 구현

* feat: Application에서의 의존성 주입

* feat: 설정 화면에서 개인정보 처리 방침, 서비스 이용 약관 링크 연결 (#496)

* feat: 개인정보 처리 방침, 서비스 이용 약관 설정에서 링크 연결

* refactor: 노션 uri들 local properties에서 관리

* android ci에 uri들 추가

(cherry picked from commit a33d7e4529cc044a991c8e8931653c9b08dcf30c)

* fix: 약속이 개설되지 않는 버그 수정 (#491)

(cherry picked from commit a4321624ed6282e6e6f143483a7603bdd5a81f8c)

* chore: 주석 삭제

* feat: kakaoLoginRepository와 SettingsActivity 연결

* refactor: SplashActivity와 LoginActivity 분리

* feat: 로그아웃시 로그인 액티비티로 이동

* feat: 로그아웃을 한 후 토스트 메시지를 보여주는 기능 구현

* refactor: 로그아웃을 한 후 토스트 대신 스낵바를 보여주는 기능으로 변경

* refactor: 반드시 로그아웃 처리가 된 뒤에 navigate를 하도록 변경

* refactor: 리뷰 반영

* refactor: 로그아웃, 회원 탈퇴 시 안내 메시지 string 이름 변경

* refactor: 리뷰 반영

---------

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

* refactor: debug, release 모드에 따른 BASE_URL 분기처리 (#460)

* refactor: BASE_URL 빌드 모드에 따른 분기 처리

* refactor: BASE_URL 분기 처리 수정

* config: ci 스크립트 base_url 수정

* refactor: BASE_URL 분기 처리 수정

* refactor: BASE_URL 위치 변경

* config: cd 스크립트 base_url 수정

* fix: common.yml 미반영으로 url null 값으로 인식 (#519)

* refactor: 기본적으로 보여주던 수도권 안내 멘트 삭제 (#516)

* �refactor: 출발 알림이 아닌 type들의 초기 상태를 DONE으로 변경 (#509)

* refactor: ENTRY, NUDGE 타입을 가진 알림의 status를 DONE으로 초기화

* refactor: 출발 알림 타입을 가진 알림만 상태를 DONE으로 변경하도록 수정

* refactor: NotificationType내에서 출발 알림 여부 확인

* feat: 알림이 현재 알림인지 확인하는 메서드 추가

* �refactor: 초대코대 코드 유일성 높이도록 개선 (#507)

* fix: BaseEntity 필드 NotNull 제약조건 제거

* chore: dev 프로필 sql.init.mode never로 변경

* refactor: 초대코드 필드 타입 및 제약조건 변경

* refactor: 8자리의 유일한 초대코드 생성 기능 추가

* feat: 초대 코드 중복 검사 및 초대코드로 조회 기능 추가

* refactor: 변경된 초대코드 스키마에 맞춰 테스트 코드 수정

* chore: sql auditing을 사용한 필드 not null 제약조건 제거

* refactor: 메서드 순서 변경

* style: 예외 메시지 띄어씌기 제거

* refactor: 미사용 메서드 제거 및 초대코드 검증로직 사용 메서드 변경

* refactor: 에러 로그 제거

* refactor: Auditing 필드 NotNull 제약조건 추가

* feat: FCM에 전송하는 메세지에 meetingId 추가 (#520)

* feat: fcm Message data에 meetingId 추가

* style: 메세지 클래스명 특성에 맞게 수정

* style: FCM 요청 DTO 클래스명 수정

* style: 개행 컨벤션 적용

* refactor: 변경된 클래스명 적용 및 코드 흐름 개선

* refactor: 연관관계 엔티티에서 약속 ID를 꺼내도록 수정

* refactor: 쿼리 변수 네이밍 수정 및 순서 수정

* refactor: meetingId getter 디미티 법칙 적용

* refactor: 메세지 특성에 맞게 네이밍 수정

* refactor: 디미터 법칙 적용한 엔티티 getter 제

* style: 코드 컨벤션 적

* fix: merge 충돌 오류 해결

* refactor: 민감한 설정을 jasypt를 활용해 암호화 적용 (#511)

* feat: Jasypt 의존성 및 설정 추가

* refactor: jasypt 암호화 적용된 값 적용

* chore: 이미지 빌드 시 jasypt 환경변수를 적용하도록 옵션 적용

* refactor: local, dev, prod 프로필에만 jasypt 설정 적용되도록 설정

* comment: 이상한 코드 TODO 주석 추가

* refactor: EC2 서버 코어 수에 맞춰 encryptor poolsize 2로 조정

* refactor: FCM 설정 파일을 암호화해 읽도록 변경

* refactor: 어노테이션 순서 변경

* chore: 서브모듈을 사용하지 않는 ci/cd 스크립트로 수정

* refactor: fcm.admin.sdk 값 common으로 이동 및 config.import 구문 추가로 지정한 yml 속성 읽도록 수정

* fix: InviteCodeGeneratorTest Disabled 처리

* chore: logging 향상을 위한 MDC 도입 (#504)

* chore: MDC 적용

- 로그 출력 패턴 수정
- 로깅을 위한 필터 이름 수정 및 MDC 로직 추가

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

* chore: 지각 참여자 로그 추가

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

---------

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

* feat: 회원 삭제 API (#512)

* feat: 특정 참여자의 PENDING 알림을 모두 DISMISSED 알림으로 수정

- NotificationStatus에 DISMISSED 추가

* feat: DISMISSED 알림 전송 안 함

- fixture 생성 로직 분리

* feat: 참여자 아이디에 해당하는 Eta 존재하면 soft delete

* feat: 회원 아이디에 해당하는 Mate 존재하면 soft delete

* feat: 회원 삭제 시 Mate, Eta 삭제 및 Notification DISMISSED 처리

* feat: 회원 삭제 컨트롤러

* fix: soft delete 구현에 따른 createQuery 사용 불가

* chore: Member, Mate, Eta에 deletedAt 열 추가, Notification status 열에 dismissed 추가

* test: 회원 삭제 API 멱등성

- fix: 헤더 어노테이션 누락

* fix: merge 과정에서 누락된 코드 복구

* feat: 회원 삭제 시 회원 삭제 알림 추가

- NotificationType MEMBER_DELETION 추가
- Notification sql 수정

* refactor: NotificationStatus 내 isDismissed 메서드 제거

* docs: 회원 삭제 API 멱등성 테스트 DisplayName 구체화

* test: 회원 삭제 서비스 테스트 내 누락된 검증 로직 추가

* refactor: 불필요한 개행 제거

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

* refactor: BaseRepositoryTest 생성

* feat: 삭제 회원 로그를 포함해서 약속 로그 목록 조회

* fix: H2 환경에서 sql 대소문자 차이로 데이터 생성 불가

* refactor: NotificationStatus 변경하는 벌크 쿼리 제거

* refactor: 조회 후 제거 대신 deleteById 사용

* refactor: 중복 device token unique 제약조건 제거

* fix: 머지 후 테스트 실패

---------

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

* fix: jasypt 비밀번호 못 읽는 문제 해결 (#527)

* fix: 도커에 전달된 환경변수를 애플케이션이 못 읽는 문제 해결 (#530)

* chore: 임시로 파이프라인 수정

* chore: 환경변수 설정 옵션 ENV로 변경

* chore: develop 브랜치로 CD 트리거 변경

* chore: yml 상 jasypt 옵션 제거

* chore: 트리거 변경

* chore: 트리거 변경

* chore: jasypt 설정 yml상 제거

* chore: 트리거 develop으로 롤백

* fix: 회원 삭제 구현 후 로그 목록 조회 API 오작동 (#534)

* chore: 빈 리스트 조회 원인을 파악하기 위해 로그 출력

* chore: 테스트를 위해 dev 서버 배포 이벤트 수정

* chore: 테스트 위한 프로덕션 코드 수정에 따른 테스트 disabled

* chore: 빈 리스트 조회 원인을 파악하기 위해 추가 로그 출력

* �chore: 배포 이벤트 변경

* fix: `@SQLRestriction` 제거 및 필터 전역 적용

- 필터 적용되지 않는 findById에 deletedAt으로 필터링 로직 추가

* Revert "�chore: 배포 이벤트 변경"

This reverts commit 064a3fd89c2f4ddbb8a7002f87d15c5f249ce7b1.

* Revert "chore: 테스트를 위해 dev 서버 배포 이벤트 수정"

This reverts commit 960aa721c1558208b65853001e1df89dfb2adeb2.

* Revert "chore: 빈 리스트 조회 원인을 파악하기 위해 로그 출력"

This reverts commit a2615062

* test: `@SQLRestriction` 제거에 따른 엔티티 삭제 테스트 수정

* refactor: `@SQLRestriction` 제거에 따른 NotiLogFindResponse 내 에러 핸들링 제거

* test: 삭제 Eta 조회에서 불필요한 flush 제거

* style: 불필요한 개행 제거

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

* refactor: NotiLogFindResponse 생성자를 정팩메로 교체

---------

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

* feat: 회원 탈퇴 기능 구현 (#518)

* feat: 카카오 연결 끊는 함수 구현

* feat: 탈퇴 시 auth token을 삭제하는 기능 구현

* feat: 탈퇴 기능을 ui와 연결

* feat: 서버 탈퇴 api 호출하는 기능 구현

* design: 탈퇴 다이얼로그 ui 구현

* feat: 탈퇴 버튼 클릭 시 다이얼로그 띄우는 기능 구현

* fix: retrofit service 프로가드 예외 적용

* refactor: LoginRepository 내에서 토큰을 삭제하도록 수정

* chore: 사용하지 않는 코드 삭제

* feat: 로그 타입에 회원 탈퇴 추가

* design: 설정 아이템의 클릭 범위 수정

* refactor: 로그 및 로딩 다이얼로그 추가

* refactor: 로그 타입과 푸시 알림 타입을 분리

* refactor: LoginActicity 이동 방식 변경

* style: ktLint 적용

* feat: imageUrl이 비어있는 경우 회색 이미지 표시하도록 수정

* refactor: TAG를 reflection simpleName에서 문자열로 변경

* refactor: 탈퇴 다이얼로그 데이터 바인딩 -> 뷰 바인딩

* design: mate 목록에서 이미지 없는 경우 회색 처리

* feat: 카카오 연결끊기 (#539)

* feat: 회원 삭제 시 소셜 서비스의 유저 정보 파기

* feat: 회원 삭제 시 카카오 연결 끊기 선행

* docs: 회원 삭제 API 코드와 문서 일치

* fix: 회원 삭제 컨트롤러 테스트 시 KakaoAuthUnlinkClient Mock 등록

* docs: 삭제 회원이 회원 삭제 API 요청 시 401 반환

* feat: AuthProvider, DeviceToken unique 제약조건 제거

* feat: 로그 목록 조회 시 삭제 회원의 프로필 이미지 빈 문자열로 응답

* test: 삭제 회원 정보 파기에 대한 테스트 제거

* feat: DI 라이브러리 적용 (#546)

* config: Hilt 의존성 추가

* feat: hilt 의존성 변경

* style: ktlint

* feat: MeetingRoomViewModel AssistedInject로 변경

* style: ktlint

* style: ktlint

* fix: Kakao URL 참조하게 변경

* del: 불필요한 코드 삭제

* style: ktlint

* feat: HiltWorker를 위한 Hilt 세팅

* fix: Workmanger 동작 안되던 오류 해결

* del: 불필요한 클래스 제거

* del: 불필요한 주석 제거

* del: 불필요한 주석 제거

* style: ktlint

* del: 불필요한 mApplication 프로퍼티 삭제

* style: ktlint

* fix: Dev 서버 Swagger 접속 에러 해결  (#549)

* refactor: Lazy 예외 해결

* refactor: swagger-ui 경로 수정

* chore: cd 문서 작성 오류 해결

* chore: swagger-ui path 지정 반영

* chore: swagger-ui path 기본값으로 변경

* chore: dev-cd 트리거 develop으로 롤백

* refactor: Nickname 객체 로직 정리 (#540)

* refactor: Member, Mate 닉네임 필드 타입을 `Nickname`으로 변경

* refactor: 디미터 법칙을 위한 메서드 제거에 따른 코드 수정

* �style: 어노테이션 정렬

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

* refactor: toDeviceToken, toNickname 메서드 제거

---------

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

* fix: 디미터 법칙을 위한 메서드 제거에 따른 코드 깨짐 (#558)

* fix: Odsay API 요청 정지 복구 (#559)

* feat: OdsayApi key 변경

* style: 애너테이션 재정렬

* refactor: @Disabled 처리된 테스트 통과가능한 테스트로 수정 (#551)

* refactor: 초대코드 하드 코딩 문자열을 InviteCodeGenerator로 생성된 초대코드로 변경

* refactor: Test 환경에서만 적용되는 FixtureGeneratorConfig로 변경

* refactor: 초대코드 테스트 @Disabled 제거

* refactor: findAllByMember() 테스트 @Disabled 제거

* refactor: FixtureGenerator에 회원의 엑세스 토큰 생성 로직 추가

* refactor: BaseServiceTest 추상 클래스에 FixtureGeneratorConfig 임포트 적용

* refactor: BaseRepositoryTest 추상 클래스에 TestAuthConfig 임포트 적용 및 test 프로필로 활성화

* refactor: BaseControllerTest 추상 클래스에 FixtureGeneratorConfig 임포트 적용 및 미사용 메서드 제거

* fix: 디미터 법칙 getter conflict 해결

---------

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

* design: 재촉하기 버튼 가이드 화면 구현 (#548)

* design: 재촉하기 가이드 첫번째 화면 ui 구현

* design: 재촉하기 가이드 두번째 화면 ui 구현

* feat: eta 처음 접속 시 가이드 화면 뜨는 기능 구현

* design: 지각, 지각 위기에 애니메이션 추가

* feat: 가이드 툴바 제목을 데이터 바인딩으로 전달

* style: ktLint 적용

* refactor: Datastore를 Hilt로 가져오도록 수정

* style: ktLint 적용

* fix: fcm admin sdk 변경 (#566)

* refactor: 회원 탈퇴 시 카카오 api 호출 제거 (#568)

* chore: 카카오 탈퇴 api 호출 제거

* fix: KakaoLoginRepository에 override 추가

* style: ktLint 적용

* fix: 입장 알림 전송 에러 문제 해결 (#569)

* fix: 입장 알림 오류 해결

* refactor: 알림 타입 로깅 추가

* chore: 오디세이 호출 횟수 확인을 위한 로그 추가

---------

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

* fix: odsay 호출 문제 해결 (#573)

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

* feat: 푸시 메세지를 클릭했을 때 앱 내로 접속 (#572)

* feat: 알림 누르면 해당 화면으로 이동하는 기능

* style: ktlint

* del: 불필요한 MEMBER_DELETION 타입 제거

* refactor: 가독성 좋게 변경

* refactor: 소요시간 계산 외부 api 의존성 낮추기 (#555)

* feat: Google 소요시간 계산 API 추가

* chore: google maps api 키 추가

* test: 다형성 적용된 RestClient 테스트로 수정

* refactor: DistanceMatrixResponse 필드 수정

* refactor: GoogleRouteClient 검증 추가 및 URI 인코딩 미적용

* test: GoogleRouteClient 테스트 추가

* test: 테스트용 RouteClient 구현체 네이밍 수정

* refactor: RouteService 런타임 시점에 의존성 변경 가능하도록 수정 및 로깅 추가

* test: 다형성 적용된 빈 의존성 순서 지정

* test: RouteServiceTest @Before Each 제거

* test: 호출이 없는 메서드에 대한 검증을 Mockito.never() 사용

* refactor: RouteConfig의 RouteClient 구현체들에 @Qualifer 제거

* test: TestRouteConfig 마지막 개행 제거

* test: 메서드 순서 변경

* feat: DistanceMatrixResponse에 API 문서 링크 주석 추가

* fix: hilt 적용된 뒤 초대하기, 리프래시 토큰 안되는 버그 (#578)

* fix: 카카오톡 초대 코드 공유 버그

* fix: 리프레쉬 Service가 RefreshRetrofit 참조하게 변경

* style: ktlint

* chore: Flyway로 데이터베이스 마이그레이션 (#577)

* chore: flyway dependency 추가

* chore: yml 설정 및 schema.sql 제거

* chore: 초기 세팅 sql 추가

* chore: AWS 로드밸런서 적용 (#564)

* chore: health check 의존성 추가

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

* chore: 인프라 구성에 따른 cd 스크립트 수정

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

* chore: prod lb 테스트를 위한 주석처리

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

* refactor: pull-and-deploy 공통 스크립트 네이밍 수정

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

* chore: lb 적용을 위한 cd 스크립트 테스트

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

* chore: lb 적용을 위한 cd 스크립트 테스트

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

* chore: build-and-deploy 공통 스크립트 제거

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

* chore: jasypt env 설정 추가

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

* chore: ddl-auto 옵션 변경

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

* chore: 포트포워딩 변경

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

* chore: pull-and-deploy 직렬처리 변경

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

* chore: 트리거 브랜치 원복

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

* chore: prod 서버 ddl 설정 validate로 복구

---------

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

* chore: prod DB를 RDS 클러스터로 변경 (#574)

* feat: RDS 레플리케이션 설정 추가

* refactor: ReplicationDataSourceConfig DependsOn 제거 프로필 prod 적용

* refactor: ReplicationDataSourceRouter 타입 결정 로직 수정

* chore: OSIV false ㅈ거용

* chore: local 프로필 설정 롤백

* refactor: default datasource 읽기 소스로 변경

* refactor: dataSource 메서드 인자에 @Qualifier 추가

* refactor: ReplicationType enum 클래스에 롬복 추가

---------

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

* refactor: 주소 검색 다이얼로그를 상호명으로 검색할 수 있는 api로 변경 (#580)

* chore: 주소 검색 예전 코드 삭제

* design: 주소 검색 ui 구현

* chore: 기존 카카오 주소 api 삭제

* feat: 주소 검색 화면 데이터 바인딩 구현

* chore: address, location 네이밍 통일

* feat: 카카오 주소 검색 api 연결

* feat: 입력창이 비어있으면 결과 화면도 비어있도록 구현

* fix: 이전 액티비티로 주소 결과 전달하는 기능 수정

* style: ktLint 적용

* style: ktLint 적용

* chore: 함수명 변경

* refactor: 페이지 디폴트 사이즈 위치 변경

* test: Fake Repository 함수 시그니처 수정

* feat: 약속 시간 30분전 ETA 조회 가능 알림 기능 추가 (#563)

* feat: ETA 공지 알림 타입 추가

* refactor: 메세지 클래스 record로 변경

* test: ETA 공지 알림 스케줄링 테스트 추가

* feat: ETA 공지 알림 전송 기능 추가

* refactor: 약속 30분전 시간을 meeting에서 반환하도록 수정

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

* test: ETA 공지 알림 예약 로직 메서드 호출 횟수 검증 추가

* refactor: eta 알림 시간 계산 로직 서비스로 이동

* refactor: Notification createDepartureReminder 알림 타입 PENDING으로 변경

* refactor: DirectMessage 정팩메 네이밍 수정

* refactor: GroupMessage 내에서 공지 메시지를 생성하도록 수정

* chore: flyway 스키마 변경 사항 sql 추가

* refactor: KST_OFFSET 상수 TimeUtil로 이동

* chore: 스키마 파일 제거

* chore: flyway V2 notification 체크 제약 조건 제거 구문 제거 (#585)

* feat: 주소 검색할 때 디폴트 현재 위치 제공 (#589)

* feat: 좌표를 통해 주소 가져오는 카카오 resonse 값 추가

* refactor: Address에 디폴트 값 추가

* feat: 디폴트로 현재 위치 가져오는 기능 구현

* style: ktlint

* refactor: FakeAddressRepository 오버라이드 함수 추가

* style: ktlint

* refactor: 메서드명 변경

* refactor: MeetingJoinViewModel에 인자 추가 전달

* refactor: 현재위치 가져오기 로딩 추가

* fix: 위치 가져오는 조건 변경

* design: 대중교통 멘트 추가 (#594)

* refactor: 백그라운드 스케줄링 리팩터링 (#586)

* refactor: WorkManager의 enqueue 개수 제한 default 값인 20에서 50으로 수정

* refactor: meeting마다 실행해야 하는 Job의 UUID를 DataStore에 저장하는 기능 구현

* refactor: result로 한 번만 결과값을 출력하는 대신 일정 주기로 setProgress로 데이터를 출력하도록 변경

* refactor: 의도한 시간보다 많이 work를 하게 되는 문제 수정

* refactor: 리뷰 반영

* refactor: ci 버그 수정

* refactor: 회원 탈퇴 시 예약된 스케줄링 모두 삭제 (#596)

* refactor: 회원 탈퇴 시 예약된 job 모두 삭제

* refactor: ci 수정

* fix: gps null일 때 조건 추가 (#600)

* design: RecyclerView overScrollMode 속성 변경 (#603)

* fix: eta 목록 화면 불안정한 문제 수정 (#619)

* refactor: 회원 탈퇴 시 예약된 job 모두 삭제

* refactor: setProgress 대신 db로 작업 결과를 저장 후 LiveData로 불러오는 방식으로 변경

* feat: 회원 탈퇴 시 db에 저장된 eta 정보 삭제

* refactor: ci수정

* style: 줄바꿈 추가

---------

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

* chore: 안드로이드 cd 배포 위치 테스트 트랙에서 프로덕션 트랙으로 변경 (#626)

* release: 안드로이드 1.0.0 출시 (#627)

* fix: 난독화 오류 수정

* feat: versionName 1.0.0 변경

* config: 버전 코드 변경

* hotfix: merge hotfix from main into develop (#642)

* 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: Notifica…
  • Loading branch information
13 people authored Jan 3, 2025
1 parent 7248e26 commit ca864cf
Show file tree
Hide file tree
Showing 84 changed files with 1,753 additions and 336 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/backend-cd-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ jobs:

- name: Clean Up Legacy Image
run: |
export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
export DOCKERHUB_REPOSITORY=$DOCKERHUB_REPOSITORY
export DEV_MYSQL_PASSWORD=${{ secrets.DEV_MYSQL_PASSWORD }}
export JASYPT_ENCRYPTOR_PASSWORD=${{ secrets.JASYPT_PASSWORD }}
export TAG=${{ github.sha }}-dev
docker compose down || true
docker rmi $(docker images -q) -f || true
Expand Down
20 changes: 14 additions & 6 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,22 @@ android {
applicationId = "com.mulberry.ody"
minSdk = 26
targetSdk = 34
versionCode = 32
versionName = "1.2.3"
versionCode = 14
versionName = "1.1.1"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "BASE_DEV_URL", properties["BASE_DEV_URL"].toString())
buildConfigField("String", "BASE_PROD_URL", properties["BASE_PROD_URL"].toString())
buildConfigField("String", "KAKAO_API_KEY", properties["KAKAO_API_KEY"].toString())
buildConfigField("String", "KAKAO_NATIVE_KEY", properties["KAKAO_NATIVE_KEY"].toString())
buildConfigField("String", "PRIVACY_POLICY_URI", properties["PRIVACY_POLICY_URI"].toString())
buildConfigField(
"String",
"PRIVACY_POLICY_URI",
properties["PRIVACY_POLICY_URI"].toString(),
)
buildConfigField("String", "TERM_URI", properties["TERM_URI"].toString())
manifestPlaceholders["KAKAO_NATIVE_KEY"] = properties["KAKAO_NATIVE_KEY"].toString().trim('"')
manifestPlaceholders["KAKAO_NATIVE_KEY"] =
properties["KAKAO_NATIVE_KEY"].toString().trim('"')
}
buildTypes {
debug {
Expand Down Expand Up @@ -130,8 +135,8 @@ dependencies {
// timber
implementation(libs.timber)

// dotsibdicator
implementation(libs.dotsibdicator)
// dotsindicator
implementation(libs.dotsindicator)

// play service
implementation(libs.play.services.location)
Expand All @@ -152,4 +157,7 @@ dependencies {
// hilt
implementation(libs.hilt.android)
kapt(libs.hilt.android.compiler)

// paging
implementation(libs.androidx.paging)
}
10 changes: 9 additions & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

<uses-configuration android:name="android:permission.POST_NOTIFICATIONS" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
Expand Down Expand Up @@ -128,7 +129,14 @@

<receiver android:name=".data.local.service.EtaDashboardOpenBroadcastReceiver" />
<receiver android:name=".data.local.service.EtaDashboardCloseBroadcastReceiver" />

<receiver
android:name=".data.local.service.ReinstallBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import android.content.Intent
import com.mulberry.ody.data.local.service.EtaDashboardService.Companion.MEETING_ID_DEFAULT_VALUE
import com.mulberry.ody.data.local.service.EtaDashboardService.Companion.MEETING_ID_KEY
import com.mulberry.ody.domain.repository.ody.MatesEtaRepository
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import javax.inject.Inject

@AndroidEntryPoint
class EtaDashboardCloseBroadcastReceiver : BroadcastReceiver() {
@Inject
lateinit var matesEtaRepository: MatesEtaRepository
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.mulberry.ody.data.local.service

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.mulberry.ody.domain.repository.ody.MatesEtaRepository
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import javax.inject.Inject

@AndroidEntryPoint
class ReinstallBroadcastReceiver : BroadcastReceiver() {
@Inject
lateinit var matesEtaRepository: MatesEtaRepository
private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO)

override fun onReceive(
context: Context,
intent: Intent,
) {
coroutineScope.launch {
matesEtaRepository.reserveAllEtaReservation()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mulberry.ody.data.remote.core.entity

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
data class ErrorResponse(
@Json(name = "type")
val type: String,
@Json(name = "title")
val title: String,
@Json(name = "status")
val status: Int,
@Json(name = "detail")
val detail: String,
@Json(name = "instance")
val instance: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.mulberry.ody.data.remote.thirdparty.address

import androidx.paging.PagingSource
import androidx.paging.PagingState
import com.mulberry.ody.domain.apiresult.getOrThrow
import com.mulberry.ody.domain.model.Address
import com.mulberry.ody.domain.repository.location.AddressRepository

class AddressPagingSource(
private val keyword: String,
private val addressRepository: AddressRepository,
) : PagingSource<Int, Address>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Address> {
val page = params.key ?: PAGE_START
return runCatching {
val addresses =
addressRepository.fetchAddresses(
keyword = keyword,
page = page,
pageSize = PAGE_SIZE,
).getOrThrow()

val prevKey = if (page == PAGE_START) null else page - PAGE_OFFSET
val nextKey = if (addresses.isEnd) null else page + PAGE_OFFSET

LoadResult.Page(
data = addresses.addresses,
prevKey = prevKey,
nextKey = nextKey,
)
}.getOrElse { throwable ->
LoadResult.Error(throwable)
}
}

override fun getRefreshKey(state: PagingState<Int, Address>): Int? {
val anchorPosition = state.anchorPosition ?: return null
val anchorPage = state.closestPageToPosition(anchorPosition) ?: return null
return anchorPage.prevKey?.plus(PAGE_OFFSET) ?: anchorPage.nextKey?.minus(PAGE_OFFSET)
}

companion object {
private const val PAGE_START = 1
private const val PAGE_OFFSET = 1
const val PAGE_SIZE = 10
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.mulberry.ody.data.remote.thirdparty.address
import com.mulberry.ody.data.remote.thirdparty.address.response.toAddresses
import com.mulberry.ody.domain.apiresult.ApiResult
import com.mulberry.ody.domain.apiresult.map
import com.mulberry.ody.domain.model.Address
import com.mulberry.ody.domain.model.Addresses
import com.mulberry.ody.domain.repository.location.AddressRepository
import javax.inject.Inject

Expand All @@ -12,9 +12,10 @@ class KakaoAddressRepository
constructor(private val service: KakaoAddressService) : AddressRepository {
override suspend fun fetchAddresses(
keyword: String,
page: Int,
pageSize: Int,
): ApiResult<List<Address>> {
return service.fetchAddresses(keyword, pageSize).map { it.toAddresses() }
): ApiResult<Addresses> {
return service.fetchAddresses(keyword, page, pageSize).map { it.toAddresses() }
}

override suspend fun fetchAddressesByCoordinate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ interface KakaoAddressService {
@GET("/v2/local/search/keyword.json")
suspend fun fetchAddresses(
@Query("query") keyword: String,
@Query("size") size: Int,
@Query("page") page: Int,
@Query("size") pageSize: Int,
): ApiResult<AddressResponse>

@GET("/v2/local/geo/coord2address.json")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.mulberry.ody.data.remote.thirdparty.address.response

import com.mulberry.ody.domain.model.Address
import com.mulberry.ody.domain.model.Addresses

fun AddressResponse.toAddresses(): List<Address> {
return documents.map { it.toAddress() }
fun AddressResponse.toAddresses(): Addresses {
val addresses = documents.map { it.toAddress() }
return Addresses(addresses, meta.isEnd)
}

private fun Document.toAddress(): Address {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.mulberry.ody.data.retrofit

import com.mulberry.ody.data.remote.core.entity.ErrorResponse
import com.mulberry.ody.domain.apiresult.ApiResult
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import okhttp3.Request
import okio.Timeout
import retrofit2.Call
Expand All @@ -22,16 +25,22 @@ class ApiResultCall<T>(private val call: Call<T>) : Call<ApiResult<T>> {
call: Call<T>,
response: Response<T>,
) {
val body: T = response.body() ?: Unit as T
if (response.isSuccessful) {
val body: T = response.body() ?: Unit as T

callback.onResponse(
this@ApiResultCall,
Response.success(ApiResult.Success(body)),
)
} else {
val errorBody = response.errorBody()?.string()
val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
val adapter = moshi.adapter(ErrorResponse::class.java)
val errorResponse = errorBody?.let { adapter.fromJson(it) }

callback.onResponse(
this@ApiResultCall,
Response.success(ApiResult.Failure(response.code(), response.message())),
Response.success(ApiResult.Failure(errorResponse?.status, errorResponse?.detail)),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import java.io.IOException
sealed interface ApiResult<out T> {
data class Success<T>(val data: T) : ApiResult<T>

data class Failure(val code: Int, val errorMessage: String?) : ApiResult<Nothing>
data class Failure(val code: Int?, val errorMessage: String?) : ApiResult<Nothing>

data class NetworkError(val exception: IOException) : ApiResult<Nothing>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.mulberry.ody.domain.apiresult

import java.lang.IllegalArgumentException

fun <T> ApiResult<T>.onSuccess(block: (T) -> Unit): ApiResult<T> {
if (this is ApiResult.Success) {
block(this.data)
}
return this
}

fun <T> ApiResult<T>.onFailure(block: (code: Int, errorMessage: String?) -> Unit): ApiResult<T> {
fun <T> ApiResult<T>.onFailure(block: (code: Int?, errorMessage: String?) -> Unit): ApiResult<T> {
if (this is ApiResult.Failure) {
block(this.code, this.errorMessage)
}
Expand Down Expand Up @@ -35,7 +37,7 @@ suspend fun <T> ApiResult<T>.suspendOnSuccess(block: suspend (T) -> Unit): ApiRe
return this
}

suspend fun <T> ApiResult<T>.suspendOnFailure(block: suspend (code: Int, errorMessage: String?) -> Unit): ApiResult<T> {
suspend fun <T> ApiResult<T>.suspendOnFailure(block: suspend (code: Int?, errorMessage: String?) -> Unit): ApiResult<T> {
if (this is ApiResult.Failure) {
block(this.code, this.errorMessage)
}
Expand Down Expand Up @@ -69,6 +71,15 @@ fun <T> ApiResult<T>.getOrNull(): T? {
return if (this is ApiResult.Success) data else null
}

fun <T> ApiResult<T>.getOrThrow(): T {
when (this) {
is ApiResult.Failure -> throw IllegalArgumentException(errorMessage)
is ApiResult.NetworkError -> throw exception
is ApiResult.Unexpected -> throw t
is ApiResult.Success -> return data
}
}

fun <T> Result<T>.toApiResult(): ApiResult<T> {
return fold(
onSuccess = { data -> ApiResult.Success(data) },
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.mulberry.ody.domain.model

class Addresses(
val addresses: List<Address>,
val isEnd: Boolean,
)
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.mulberry.ody.domain.repository.location

import com.mulberry.ody.domain.apiresult.ApiResult
import com.mulberry.ody.domain.model.Address
import com.mulberry.ody.domain.model.Addresses

interface AddressRepository {
suspend fun fetchAddresses(
keyword: String,
page: Int,
pageSize: Int,
): ApiResult<List<Address>>
): ApiResult<Addresses>

suspend fun fetchAddressesByCoordinate(
x: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ class AddressSearchFragment :
}
binding.rvAddress.addItemDecoration(dividerItemDecoration)
binding.rvAddress.adapter = adapter
adapter.addLoadStateListener {
viewModel.updateAddressItemCount(adapter.itemCount)
}
}

private fun initializeBinding() {
Expand All @@ -81,16 +84,20 @@ class AddressSearchFragment :
collectWhenStarted(viewModel.networkErrorEvent) {
showRetrySnackBar { viewModel.retryLastAction() }
}
collectWhenStarted(viewModel.addressUiModels) {
adapter.submitList(it)
}
collectWhenStarted(viewModel.addressSelectEvent) {
(parentFragment as? AddressSearchListener)?.onReceive(it)
(activity as? AddressSearchListener)?.onReceive(it)
onBack()
}
collectWhenStarted(viewModel.addressSearchKeyword) {
if (it.isEmpty()) viewModel.clearAddresses()
collectWhenStarted(viewModel.hasAddressSearchKeyword) { hasKeyword ->
if (hasKeyword) {
return@collectWhenStarted
}
viewModel.clearAddresses()
}

collectWhenStarted(viewModel.address) {
adapter.submitData(viewLifecycleOwner.lifecycle, it)
}
}

Expand Down
Loading

0 comments on commit ca864cf

Please sign in to comment.