Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release: 안드로이드 1.2.0 배포 #835

Merged
merged 348 commits into from
Oct 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
348 commits
Select commit Hold shift + click to select a range
917ce9a
docs: 서비스 소개글 작성 (#242)
kimhm0728 Aug 2, 2024
aee5dd4
docs: 약속 참여 API 문서화 (#246)
hyeon0208 Aug 3, 2024
56d9a91
docs: 약속 단건 조회 API 문서화 (#245)
eun-byeol Aug 3, 2024
c6fa948
docs: 약속 참여자 상태 목록 조회 API 문서화 (#243)
hyeon0208 Aug 3, 2024
5a906a7
docs: 약속 개설 API 문서화 (#249)
coli-geonwoo Aug 4, 2024
97dbc9f
refactor : 약속 개설 API 구현 (#250)
coli-geonwoo Aug 4, 2024
498c14d
design: 로그 화면 뷰 디자인 (#248)
haeum808 Aug 4, 2024
f159284
design: 유저 현황 화면 디자인 (#252)
kimhm0728 Aug 5, 2024
16cef03
refactor: 모임 개설, 참여 api 분리하기 (#255)
kimhm0728 Aug 5, 2024
f051cef
design: 홈 화면 리스트 디자인 (#260)
aprilgom Aug 5, 2024
4cd8a1d
feat: 유저 현황 화면 api v1 연결 (#261)
kimhm0728 Aug 5, 2024
fcbc044
feat: 약속 참여 V1 API 구현 (#247)
hyeon0208 Aug 5, 2024
c46dcd7
design: 홈 화면 리스트 없는 경우 디자인 (#262)
haeum808 Aug 6, 2024
5820684
design: 홈 화면 플로팅 버튼 디자인 (#263)
haeum808 Aug 6, 2024
586a79f
feat: 유저 현황 화면 리스트 어댑터 구현 (#265)
kimhm0728 Aug 6, 2024
217a4a3
feat: 내 약속 목록 조회 API 문서화 및 구현 (#251)
mzeong Aug 6, 2024
bd66fb4
fix: 시간 데이터 초 제거 후 반환하도록 수정 (#270)
hyeon0208 Aug 6, 2024
bdd664c
refactor: v1/mates 응답값 수정 (#268)
kimhm0728 Aug 6, 2024
9cc5615
feat: 플로팅 버튼 화면 이동 구현 (#271)
haeum808 Aug 6, 2024
dc7f17a
feat: 홈 화면 리스트 어댑터 구현 (#272)
aprilgom Aug 6, 2024
ff8349f
feat: 폴링 방식 스케줄링 구현 (#274)
kimhm0728 Aug 6, 2024
3391184
refactor: 약속 단건 조회 API 구현 (#256)
eun-byeol Aug 6, 2024
20a0613
feat: 위치 권한 받아오는 기능 구현 (#276)
haeum808 Aug 6, 2024
bef6530
feat: 약속 목록 조회 api 연결 (#279)
aprilgom Aug 6, 2024
de2d562
feat: 단일 약속 api 연결 (#281)
aprilgom Aug 7, 2024
bd56f5e
feat: gps 위경도 받아오는 기능 구현 (#282)
haeum808 Aug 7, 2024
becc66b
feat: 약속 참여자 상태 목록 조회 API 기능 구현 (#277)
hyeon0208 Aug 7, 2024
6be3dc8
refactor: 유저 위치 현황 조회 시 자신의 닉네임 response로 받도록 수정 (#284)
kimhm0728 Aug 7, 2024
876bad8
fix: update 미반영 오류 문제 해결 (#287)
hyeon0208 Aug 7, 2024
7ebba8e
refactor: HomeActivity -> MeetingsActivity로 이름 변경 (#291)
aprilgom Aug 7, 2024
dd5dd0d
fix: 유저 현황표 폴링 방식 수정 (#292)
kimhm0728 Aug 7, 2024
f5adaa7
refactor: 데모데이 이슈 문제 해결 (#293)
hyeon0208 Aug 7, 2024
3e7401e
feat: 현황 화면 툴바 리스너 등록 (#304)
kimhm0728 Aug 7, 2024
fdd1642
feat: 초대 코드 입력에서 다른 화면으로 이동할 때 초대 코드 입력 화면 finish() (#305)
kimhm0728 Aug 7, 2024
420a896
fix: 리스트 깜빡임 현상 해결 (#306)
kimhm0728 Aug 7, 2024
7016b0d
fix: 개설하기에서 뒤로가기 버튼 누르면 현 화면 없애기 및 오디 캐릭터 추가 (#301)
haeum808 Aug 7, 2024
08e5c2c
test: 2차 스프린트 구현 사항 테스트 (#308)
kimhm0728 Aug 7, 2024
45e43c0
feat: 로그에서 30분전이면 오디 버튼이 아예 안뜨게 구현 (#309)
haeum808 Aug 8, 2024
99f10ea
fix: 약속 로그 관련 수정 사항 (#314)
aprilgom Aug 8, 2024
5a6b3e1
feat: 내 약속 목록 조회 시 현재 이후 약속만 조회 (#302)
mzeong Aug 8, 2024
0d72721
fix: 약속 리스트 관련 수정 사항 (#315)
aprilgom Aug 8, 2024
fdaebcc
fix: 행방불명상태의 소요시간 응답 오류 해결 (#317)
hyeon0208 Aug 8, 2024
7631b0a
fix: 해방불명 오류 해결 (#320)
hyeon0208 Aug 8, 2024
b45d7d6
fix: 해결되지 않은 행방불명 오류 해결 (#323)
hyeon0208 Aug 8, 2024
f4f7f66
fix: compress 메서드 수정, gps 온오프 확인 (#321)
haeum808 Aug 8, 2024
b1fb7a9
fix: 도착한 상태인 사람의 소요시간이 -1로 반환되고 있는 문제 해결 (#325)
hyeon0208 Aug 8, 2024
b1d8e04
fix: 확장 버튼 패딩 20dp 주기 (#329)
haeum808 Aug 8, 2024
b2d6988
fix: 로그에서 오디? 버튼이 30분 전부터 계속 보이게 변경 (#327)
haeum808 Aug 8, 2024
e195de0
fix: 로그 화면에서 null이 잠깐 나타났다 사라지는 뷰 수정 (#332)
haeum808 Aug 8, 2024
2178a1d
design: 초대 코드 item과 모임 정보 칸과의 간격을 늘림 (#334)
aprilgom Aug 8, 2024
66fe88b
feat: 안드로이드 로깅 환경 구축 (#337)
aprilgom Aug 9, 2024
87f24f0
feat: EtaDashboardViewModelTest 구현 (#338)
haeum808 Aug 10, 2024
fbc5b1c
fix: 로그 화면 닉네임들 길어지면 안보이는 버그 수정 (#341)
haeum808 Aug 11, 2024
2c5dab8
refactor: response. requset api 순서에 맞게 맞추기, 패키지 위치 수정 (#340)
haeum808 Aug 11, 2024
0e83a93
docs: test coverage report 스크립트 추가 (#254)
coli-geonwoo Aug 11, 2024
dd8fdc4
refactor : 나노초 제거를 직렬화 도구로 수행 (#303)
coli-geonwoo Aug 11, 2024
87e1914
refactor: 시간 비교 로직에서 초/나노초 단위 trim (#346)
coli-geonwoo Aug 12, 2024
a2bda96
refactor: EtaStatus 매핑 로직 개선 및 테스트 코드 추가 (#351)
hyeon0208 Aug 13, 2024
3a99e95
config: 앱 출시를 위한 수정 (#350)
haeum808 Aug 13, 2024
efc3880
config: parcelize, kapt, crashlytics 버전 카탈로그에 맞게 변경 (#353)
haeum808 Aug 13, 2024
69e93ea
refactor: 권한 체크, 권한 요청 분리 (#347)
haeum808 Aug 13, 2024
a10f88f
feat: 서버 응답 400, 500번대 예외 처리 (#359)
aprilgom Aug 13, 2024
ecb9f2b
refactor: 로깅 관련 코드 리팩터링 (#361)
kimhm0728 Aug 13, 2024
90f537f
chore: 로깅 프레임워크 적용 및 모니터링 대시보드 구성 (#348)
mzeong Aug 14, 2024
5a1e06f
refactor: 현황 화면과 로그 화면을 하나의 activity로 관리 (#365)
kimhm0728 Aug 14, 2024
00e543a
design: 툴바 폰트 크기 줄이기 (#389)
aprilgom Aug 14, 2024
a44c71a
fix: 정확한 위치 가져오게 getCurrentLocation로 변경 (#390)
haeum808 Aug 14, 2024
ce4588d
feat: 약속 참여자 ETA 조회 시, 수도권 외 지역 예외처리 (#368)
eun-byeol Aug 14, 2024
6c3c359
design: 로그인 화면 디자인 (#388)
aprilgom Aug 15, 2024
23f836a
test: InviteCodeViewModel 테스트 (#392)
aprilgom Aug 15, 2024
ff01014
fix: 동일한 topic을 구독하여 참여하지 않은 메이트의 알림 받음 (#367)
mzeong Aug 16, 2024
4cdc21f
test: 3차 스프린트 구현 사항 테스트 (#396)
kimhm0728 Aug 16, 2024
9a9a6be
test: MeetingsViewModel 테스트 작성 (#398)
aprilgom Aug 16, 2024
b278673
chore: 뷰모델 테스트 패키지 변경 (#403)
kimhm0728 Aug 16, 2024
0194b63
design: 현황 화면 뱃지 애니메이션 추가 (#401)
haeum808 Aug 16, 2024
de71193
chore: 프로덕션 서버에 서비스 띄우기 (#393)
eun-byeol Aug 16, 2024
688692d
design: 로그 화면 디자인 수정 (#409)
kimhm0728 Aug 17, 2024
291ec23
refactor: splash 라이브러리 사용으로 변경 (#406)
haeum808 Aug 17, 2024
c765b65
feat: 재촉하기 API 구현 (#394)
coli-geonwoo Aug 17, 2024
37334c5
feat: 네트워크 오류, 서버 오류 시 스낵바/토스트 구현 (#411)
kimhm0728 Aug 18, 2024
22b2a3b
docs: 약속 참여자 도착 현황 조회 API 문서화 (#405)
mzeong Aug 19, 2024
9893683
config: 난독화 적용 (#415)
kimhm0728 Aug 19, 2024
f13a740
refactor: ETA 조회 API 응답 수정 (#418)
kimhm0728 Aug 19, 2024
7cf97c0
refactor: ETA 조회 API 응답 수정 (#417)
mzeong Aug 19, 2024
a9cdc3d
feat: 위치 현황 카카오톡 공유 기능 구현 (#426)
kimhm0728 Aug 20, 2024
af127b3
feat: 로딩 중 ProgressBar 다이얼로그 띄우는 기능 구현 (#430)
kimhm0728 Aug 20, 2024
f7f5d79
feat: 콕찌르기 기능 (#420)
haeum808 Aug 20, 2024
2c4369b
feat: 초대 코드 카카오톡 공유하기 기능 구현 (#431)
kimhm0728 Aug 20, 2024
8f5723d
refactor: Firebase Analytics 로깅을 비동기로 남기도록 수정 (#435)
kimhm0728 Aug 20, 2024
755368f
refactor: 재촉하기 API에 재촉한 사람 정보가 포함되도록 수정 (#437)
coli-geonwoo Aug 21, 2024
56f892b
fix: fragment 로깅 찍는 시점 수정 (#441)
kimhm0728 Aug 21, 2024
965ea8c
chore: MySQL DB를 실행할 EC2 생성 및 프로덕션 EC2 서버와 연결 (#419)
hyeon0208 Aug 21, 2024
90cfe11
chore: HTTPS 적용 (#436)
eun-byeol Aug 21, 2024
3646ef4
chore: 로그 관련 중복 코드 제거 및 로그 내 Request Body 개행 제거 (#422)
eun-byeol Aug 21, 2024
b46d355
chore: deprecated API 제거 (#438)
coli-geonwoo Aug 21, 2024
1cfdf1e
fix: manifest에서 MAIN, LAUNCHER 인텐트 필터와 data 인텐트 필터를 분리 (#445)
kimhm0728 Aug 21, 2024
f34b607
refactor: 약속 참여 API 응답 수정 (#439)
mzeong Aug 22, 2024
3a96bc6
chore: dev 서버 DB MySQL 교체 작업 (#446)
hyeon0208 Aug 22, 2024
818e01e
fix: develop 스키마 validation 오류 해결 BE BUG (#455)
hyeon0208 Aug 22, 2024
08e4a28
feat: 재촉하기 알림에 닉네임이 보이게 변경 (#457)
haeum808 Aug 22, 2024
d72f470
refactor: 위경도 좌표 검증 로직 제거 및 Coordinate 객체 생성 (#447)
mzeong Aug 22, 2024
5bd46eb
feat: 카카오 소셜 로그인 구현 및 엑세스 토큰 발급 (#448)
mzeong Aug 22, 2024
7e006c3
refactor: 로그 목록 조회, 약속 단건 조회 API에 imageUrl 필드 추가 (#461)
coli-geonwoo Aug 22, 2024
b075882
refactor: 약속 참여 api 수정 및 닉네임 입력 화면 삭제 (#452)
kimhm0728 Aug 22, 2024
02b10f9
feat: 로그 목록 조회, 약속 단건 조회 response에 imageUrl 필드 추가 (#462)
haeum808 Aug 22, 2024
9ab2b44
fix: 수정된 jar가 배포되지 않는 문제 해결 (#464)
hyeon0208 Aug 22, 2024
9a98f49
feat: 카카오 소셜 로그인 구현 (#442)
aprilgom Aug 22, 2024
d5e8303
chore: 안드로이드 CD 구축 (#463)
aprilgom Aug 22, 2024
0062aeb
refactor: 모임 참여 로직 리팩터링 (#465)
kimhm0728 Aug 22, 2024
bae9889
fix: 약속 목록이 제대로 ui에 반영되지 않는 버그 해결 (#467)
kimhm0728 Aug 22, 2024
362ab08
design: 초대코드 공유 이미지 링크 수정 (#470)
kimhm0728 Aug 22, 2024
90d84f4
feat: 약속 리스트에서 뒤로가기 2번 하면 나갈 수 있는 기능 구현 (#472)
haeum808 Aug 26, 2024
c6bd2be
docs: 회원 삭제 API (#477)
mzeong Sep 6, 2024
4f05694
chore: 앱 패키지명 변경 (#483)
kimhm0728 Sep 6, 2024
b007e91
fix: 카카오 웹 로그인 안되는 문제 수정 (#485)
aprilgom Sep 6, 2024
22d4168
refactor: 지난 약속에 참여하지 못하도록 예외처리 (#474)
coli-geonwoo Sep 6, 2024
0592a6f
design: 설정화면 디자인 (#492)
haeum808 Sep 9, 2024
a33d7e4
feat: 설정 화면에서 개인정보 처리 방침, 서비스 이용 약관 링크 연결 (#496)
haeum808 Sep 9, 2024
a432162
fix: 약속이 개설되지 않는 버그 수정 (#491)
kimhm0728 Sep 9, 2024
c18c32e
refactor: 스프링 프로필 분리 (#494)
hyeon0208 Sep 9, 2024
0b3c379
feat: 애플리케이션 재시작 시 PENDING 상태 알림 스케줄링 및 새벽 4시마다 지난 모임 삭제 기능 추가 (#410)
hyeon0208 Sep 9, 2024
aa49059
feat: 로그아웃 기능 구현 (#493)
coli-geonwoo Sep 10, 2024
96e9588
chore: Dev 서버 Down 오류 해결 (#501)
hyeon0208 Sep 10, 2024
44a7d2c
feat: 로그아웃 기능 구현 (#499)
aprilgom Sep 11, 2024
265fd96
refactor: debug, release 모드에 따른 BASE_URL 분기처리 (#460)
kimhm0728 Sep 11, 2024
6cd5cf8
fix: common.yml 미반영으로 url null 값으로 인식 (#519)
mzeong Sep 11, 2024
7752158
refactor: 기본적으로 보여주던 수도권 안내 멘트 삭제 (#516)
aprilgom Sep 11, 2024
a3ffd2a
refactor: 출발 알림이 아닌 type들의 초기 상태를 DONE으로 변경 (#509)
hyeon0208 Sep 12, 2024
89d76ad
refactor: 초대코대 코드 유일성 높이도록 개선 (#507)
hyeon0208 Sep 12, 2024
3348da9
feat: FCM에 전송하는 메세지에 meetingId 추가 (#520)
hyeon0208 Sep 12, 2024
36af790
refactor: 민감한 설정을 jasypt를 활용해 암호화 적용 (#511)
hyeon0208 Sep 12, 2024
1adb404
chore: logging 향상을 위한 MDC 도입 (#504)
mzeong Sep 12, 2024
bbe6099
feat: 회원 삭제 API (#512)
mzeong Sep 12, 2024
e4df144
fix: jasypt 비밀번호 못 읽는 문제 해결 (#527)
hyeon0208 Sep 12, 2024
8fe228a
fix: 도커에 전달된 환경변수를 애플케이션이 못 읽는 문제 해결 (#530)
hyeon0208 Sep 19, 2024
ea6fb2d
fix: 회원 삭제 구현 후 로그 목록 조회 API 오작동 (#534)
mzeong Sep 19, 2024
a5c8bf4
feat: 회원 탈퇴 기능 구현 (#518)
kimhm0728 Sep 19, 2024
eca84b4
feat: 카카오 연결끊기 (#539)
mzeong Sep 20, 2024
587cfb9
feat: DI 라이브러리 적용 (#546)
haeum808 Sep 22, 2024
61c9f8b
fix: Dev 서버 Swagger 접속 에러 해결 (#549)
hyeon0208 Sep 23, 2024
a9b5f39
refactor: Nickname 객체 로직 정리 (#540)
mzeong Sep 23, 2024
efe127b
fix: 디미터 법칙을 위한 메서드 제거에 따른 코드 깨짐 (#558)
mzeong Sep 23, 2024
d8e3003
fix: Odsay API 요청 정지 복구 (#559)
eun-byeol Sep 23, 2024
d27f9bf
refactor: @Disabled 처리된 테스트 통과가능한 테스트로 수정 (#551)
hyeon0208 Sep 23, 2024
be6c63a
design: 재촉하기 버튼 가이드 화면 구현 (#548)
kimhm0728 Sep 24, 2024
607565e
fix: fcm admin sdk 변경 (#566)
mzeong Sep 24, 2024
ca9b4ca
refactor: 회원 탈퇴 시 카카오 api 호출 제거 (#568)
kimhm0728 Sep 24, 2024
60ffa06
fix: 입장 알림 전송 에러 문제 해결 (#569)
hyeon0208 Sep 24, 2024
e6d26d7
fix: odsay 호출 문제 해결 (#573)
coli-geonwoo Sep 24, 2024
16d08b7
feat: 푸시 메세지를 클릭했을 때 앱 내로 접속 (#572)
haeum808 Sep 24, 2024
693dd62
refactor: 소요시간 계산 외부 api 의존성 낮추기 (#555)
hyeon0208 Sep 24, 2024
3d8781b
fix: hilt 적용된 뒤 초대하기, 리프래시 토큰 안되는 버그 (#578)
haeum808 Sep 25, 2024
120dc2d
chore: Flyway로 데이터베이스 마이그레이션 (#577)
mzeong Sep 25, 2024
f6e63e1
chore: AWS 로드밸런서 적용 (#564)
eun-byeol Sep 25, 2024
4f67c07
chore: prod DB를 RDS 클러스터로 변경 (#574)
hyeon0208 Sep 25, 2024
2fb8d44
refactor: 주소 검색 다이얼로그를 상호명으로 검색할 수 있는 api로 변경 (#580)
kimhm0728 Sep 25, 2024
f11d8f4
feat: 약속 시간 30분전 ETA 조회 가능 알림 기능 추가 (#563)
hyeon0208 Sep 25, 2024
71aa221
chore: flyway V2 notification 체크 제약 조건 제거 구문 제거 (#585)
hyeon0208 Sep 26, 2024
a6406a9
feat: 주소 검색할 때 디폴트 현재 위치 제공 (#589)
haeum808 Sep 26, 2024
d26eb01
design: 대중교통 멘트 추가 (#594)
aprilgom Sep 26, 2024
0ddfdca
refactor: 백그라운드 스케줄링 리팩터링 (#586)
aprilgom Sep 26, 2024
5dd1288
refactor: 회원 탈퇴 시 예약된 스케줄링 모두 삭제 (#596)
aprilgom Sep 26, 2024
af822e4
fix: gps null일 때 조건 추가 (#600)
haeum808 Sep 26, 2024
e587997
design: RecyclerView overScrollMode 속성 변경 (#603)
kimhm0728 Sep 26, 2024
27051ab
fix: eta 목록 화면 불안정한 문제 수정 (#619)
aprilgom Sep 28, 2024
e5a300f
chore: 안드로이드 cd 배포 위치 테스트 트랙에서 프로덕션 트랙으로 변경 (#626)
aprilgom Sep 30, 2024
816ee8c
release: 안드로이드 1.0.0 출시 (#627)
kimhm0728 Oct 2, 2024
4bd1762
hotfix: merge hotfix from main into develop (#642)
mzeong Oct 2, 2024
123fa86
refactor: 현재 위치 가져오는 객체 생성 및 분리 (#629)
haeum808 Oct 2, 2024
07bbf61
refactor: 초대코드 검증 시 참여여부 확인하도록 수정 (#644)
coli-geonwoo Oct 3, 2024
a1615ef
feat: 출발지 입력할 때 현재 위치 눌러서 가져오기로 변경 (#659)
haeum808 Oct 5, 2024
180c650
feat: 에러 메시지 구체화 (#661)
haeum808 Oct 5, 2024
72ccd77
refactor: 안 쓰는 코드 삭제 (#660)
haeum808 Oct 5, 2024
3ec084a
del: compress 함수 제거 (#664)
haeum808 Oct 7, 2024
8407bf2
chore: 로그 volume 설정 변경 (#674)
mzeong Oct 7, 2024
74a44a2
feat: Odsay, Google Maps 호출 시 DB 저장 (#669)
eun-byeol Oct 7, 2024
3ed9413
chore: Private 서브넷의 EC2가 오디세이 API 응답 받지 못하는 문제 해결 (#679)
hyeon0208 Oct 7, 2024
622a0d7
feat: NoResourceFoundException error handling (#687)
mzeong Oct 8, 2024
9da4f75
refactor: 상수 분리 및 코드 정리 (#684)
kimhm0728 Oct 8, 2024
350f7bb
design: 주소 입력 화면의 windowSoftInputMode 속성 추가 (#682)
kimhm0728 Oct 8, 2024
37748b7
design: 출발지 입력되어 있으면 현재 위치 아이콘 숨기기 (#688)
haeum808 Oct 8, 2024
6755133
refactor: 약속 개설 시 입력 순서 변경 및 개설 완료 화면 제거 (#683)
kimhm0728 Oct 8, 2024
721411d
refactor: 홈 화면, 로그 화면에서 주소가 아닌 상호명이 띄워지도록 수정 (#676)
kimhm0728 Oct 8, 2024
ef79ad8
refactor: refreshtoken 순환 참조 해결 (#675)
aprilgom Oct 8, 2024
8250d95
chore: android cd 트리거 브랜치 네임으로 변경 (#690)
aprilgom Oct 10, 2024
e266b30
test: test에 generator를 사용하도록 변경 (#685)
coli-geonwoo Oct 10, 2024
07d7fc1
fix: WorkManager 작업이 수행되지 않는 버그 해결 (#691)
kimhm0728 Oct 10, 2024
75475eb
fix: 약속방 로그 목록 조회 시 입장 로그가 출발 알림 로그보다 먼저 출력되도록 수정 (#680)
hyeon0208 Oct 11, 2024
21ffdab
feat: refresh token expiration 변경 (#694)
mzeong Oct 11, 2024
bdf9d18
chore: 무중단 배포 적용 (#698)
eun-byeol Oct 11, 2024
403833c
refactor: BindingFragment에서 analytics 가능하게 수정 (#697)
haeum808 Oct 12, 2024
0e5cfca
refactor: ViewModel의 LiveData를 Flow로 변경 (#695)
haeum808 Oct 12, 2024
8d40866
fix: 알림 권한 수정 (#723)
kimhm0728 Oct 15, 2024
28b0dda
release: 안드로이드 1.1.1 출시 (#725)
kimhm0728 Oct 15, 2024
507f3c9
chore: android ci 빌드 전 clean 추가 (#711)
aprilgom Oct 15, 2024
2c076c7
design: 9인치, 12인치 화면에서 DatePicker, TimePicker 크기 수정 (#705)
aprilgom Oct 15, 2024
ab21a47
refactor: 앱 메인 컬러들 primary, primaryVariant, secondary, secondaryVaria…
haeum808 Oct 15, 2024
e488594
feat: 어드민 API CORS 설정 (#709)
mzeong Oct 15, 2024
a051bde
Revert "fix: 약속방 로그 목록 조회 시 입장 로그가 출발 알림 로그보다 먼저 출력되도록 수정 (#680)" (#739)
mzeong Oct 16, 2024
2a496be
design: 재촉 문자열 수정 (#734)
kimhm0728 Oct 16, 2024
2a330b3
design: 로그인 화면 새로운 디자인으로 수정 (#715)
aprilgom Oct 17, 2024
d950dbc
design: splash 로고 벡터로 변경 (#735)
aprilgom Oct 17, 2024
bbe2371
refactor: ViewModel의 LiveData를 Flow로 변경 (#731)
kimhm0728 Oct 17, 2024
16c41ab
feat: 다크모드 적용 (#737)
haeum808 Oct 17, 2024
d5dbd53
Revert "Revert "fix: 약속방 로그 목록 조회 시 입장 로그가 출발 알림 로그보다 먼저 출력되도록 수정 (#6…
mzeong Oct 17, 2024
abbabf5
fix/feat: flyway V5 DML이 적용되지 않는 문제 해결 + 테스트 컨테이너 적용 (#729)
hyeon0208 Oct 17, 2024
8e7a38a
design: 주소 검색 item 디자인 수정 (#744)
kimhm0728 Oct 17, 2024
38f3987
fix: LoginActivity에서 startActivity 후 activity 종료 (#746)
aprilgom Oct 18, 2024
db1b40a
fix: 새벽 4시에 약속 삭제 로직 Lazy 에러 해결 (#701)
hyeon0208 Oct 18, 2024
5d82285
feat: 회원 탈퇴 시 fcmTopic 구독 취소 (#716)
eun-byeol Oct 20, 2024
57f7fd9
fix: 같은 약속에 있는 사람들이 탈퇴한 회원의 출발 알림 받는 문제 해결 (#733)
eun-byeol Oct 20, 2024
3579930
fix: 서비스가 종료될 때 모든 작업이 종료되는 버그 해결 (#761)
kimhm0728 Oct 21, 2024
8fcc11b
feat: 서드파티 제어 및 조회 API 구현 (#732)
mzeong Oct 21, 2024
60e14eb
feat: AlarmManager 작업들 Local DB에 저장 (#762)
kimhm0728 Oct 21, 2024
83f43d8
design: 약속 개설하기, 약속 참여하기 버튼 누르면 면적 넓히기 (#778)
haeum808 Oct 21, 2024
6a92f23
refactor: 빈칸으로 약속 생성 못하게 변경 (#780)
haeum808 Oct 21, 2024
9acc130
refactor: 사용 안하는 파일 제거 (#777)
haeum808 Oct 21, 2024
39a971f
fix: 현위치 가져올 때 무한 로딩되는 버그 해결 (#765)
kimhm0728 Oct 21, 2024
5fd36e9
design: 새로운 로그인 화면 다크모드 추가 (#788)
aprilgom Oct 22, 2024
4df2085
design: 약속 이름이 길 때 말줄임표 대신 약속 이름을 최대한 보여줄 수 있도록 수정 (#775)
aprilgom Oct 22, 2024
59a667a
fix: indicator 클릭으로 이동하지 못하도록 수정 (#768)
aprilgom Oct 22, 2024
4201779
fix: 로그인 여부에 refresh token 만료 여부 확인 추가 (#767)
aprilgom Oct 22, 2024
381f6ba
feat: 외부 API 어드민 페이지 구축 (#717)
mzeong Oct 22, 2024
777868e
chore: ci/cd 롤백 전략 구축 (#736)
mzeong Oct 22, 2024
099feaf
refactor: 햄버거바 왼쪽 하얀 부분 제거 (#796)
haeum808 Oct 22, 2024
5e30bc7
design: 약속 개설하기 -> 약속 만들기로 변경 (#776)
aprilgom Oct 22, 2024
e4490c8
fix: 약속 참여 후 로그 화면으로 navigate되지 않는 버그 해결 (#764)
kimhm0728 Oct 22, 2024
01c15fd
design: 오디 버튼 비활성화 토스트 메시지 변경 (#779)
haeum808 Oct 22, 2024
f5b13df
refactor: eta 서버 응답 mapping 로직 리팩터링 (#803)
kimhm0728 Oct 22, 2024
a82676a
refactor: 상태에 따라 소요시간을 mapping 해주는 로직 삭제 (#793)
coli-geonwoo Oct 23, 2024
0db68a5
refactor: RouteClient 생성 로직 통일 (#781)
eun-byeol Oct 23, 2024
0611770
refactor: 알림 누르고 뒤로가면 약속 목록으로 가게 변경 (#800)
haeum808 Oct 23, 2024
f5f0c00
design: DatePicker, TimePicker 9인치, 12인치 다크모드 수정 (#804)
aprilgom Oct 23, 2024
be41572
fix: 다크모드일 때 스플래시 화면 색상 제대로 보이지 않는 문제 수정 (#806)
aprilgom Oct 23, 2024
2164414
refactor: 약속 시간 이후 30분까지 nudge가 가능하도록 수정 (#798)
coli-geonwoo Oct 23, 2024
f5c40cc
feat: RouteClient 외부 API 요청 응답 로깅 (#782)
eun-byeol Oct 23, 2024
9b7194d
chore: jasypt 비밀번호 변경으로 인한 재 암호화 (#743)
hyeon0208 Oct 23, 2024
9566c91
chore: 비밀번호 최신화 (#818)
hyeon0208 Oct 23, 2024
9ee7eb0
feat: 약속방 나가기 기능 추가 (#792)
hyeon0208 Oct 23, 2024
cd6b62b
fix: 출발 도착지가 가까운 경우 0으로 반환되는 문제 해결 (#794)
coli-geonwoo Oct 23, 2024
5a790f6
fix: 탈퇴한 회원 알림 로그 제외 (#799)
hyeon0208 Oct 23, 2024
4c0b03c
fix: api-key 변경 (#820)
eun-byeol Oct 23, 2024
e1d9074
feat: 약속 나가기 기능 구현 (#807)
kimhm0728 Oct 23, 2024
dfd8dc3
design: 플로팅 버튼 메뉴 margin 수정 (#828)
kimhm0728 Oct 23, 2024
efd42f1
refactor: 재촉하기 연속으로 못 누르게 수정 (#809)
haeum808 Oct 23, 2024
8c90773
feat: 약속 시간 30분 지난 후 재촉하면 불가 토스트 메시지 (#826)
haeum808 Oct 23, 2024
48a3090
fix: Room Entity 마이그레이션 버그 수정 (#832)
kimhm0728 Oct 23, 2024
cfb2f96
Merge remote-tracking branch 'origin/main' into release-an/833
kimhm0728 Oct 23, 2024
b9ca6d4
style: ktLint 적용
kimhm0728 Oct 23, 2024
25812a7
config: 버전 코드 14 -> 15 변경
kimhm0728 Oct 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ android {
applicationId = "com.mulberry.ody"
minSdk = 26
targetSdk = 34
versionCode = 14
versionName = "1.1.1"
versionCode = 15
versionName = "1.2.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "BASE_DEV_URL", properties["BASE_DEV_URL"].toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@ import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.mulberry.ody.data.local.entity.eta.MateEtaInfoEntity
import com.mulberry.ody.data.local.entity.eta.MateEtaListTypeConverter
import com.mulberry.ody.data.local.entity.eta.OldMateEtaListTypeConverter
import com.mulberry.ody.data.local.entity.reserve.EtaReservationEntity
import com.mulberry.ody.domain.model.EtaStatus
import com.mulberry.ody.domain.model.EtaType2
import com.mulberry.ody.domain.model.MateEta
import com.mulberry.ody.domain.model.MateEta2

@Database(
entities = [MateEtaInfoEntity::class, EtaReservationEntity::class],
Expand All @@ -31,11 +36,57 @@ abstract class OdyDatabase : RoomDatabase() {
CREATE TABLE IF NOT EXISTS `eta_reservation` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`meetingId` INTEGER NOT NULL,
`reserveMillis` INTEGER NOT NULL,
`isOpen` INTEGER NOT NULL
`reserveMillis` INTEGER NOT NULL,
`isOpen` INTEGER NOT NULL
)
""".trimIndent(),
)
db.execSQL(
"""
CREATE TABLE IF NOT EXISTS `eta_info_temp` (
`meetingId` INTEGER PRIMARY KEY NOT NULL,
`mateId` INTEGER NOT NULL,
`mateEtas` TEXT NOT NULL
)
""".trimIndent(),
)

val cursor = db.query("SELECT * FROM eta_info")
if (cursor.moveToFirst()) {
do {
val meetingId = cursor.getLong(cursor.getColumnIndexOrThrow("meetingId"))
val mateId = cursor.getLong(cursor.getColumnIndexOrThrow("mateId"))
val mateEtasJson = cursor.getString(cursor.getColumnIndexOrThrow("mateEtas"))

val oldMateEtas: List<MateEta2> = OldMateEtaListTypeConverter().fromString(mateEtasJson) ?: emptyList()
val newMateEtas =
oldMateEtas.map { oldMateEta ->
MateEta(
mateId = oldMateEta.mateId,
nickname = oldMateEta.nickname,
etaStatus =
when (oldMateEta.etaType) {
EtaType2.ARRIVED -> EtaStatus.Arrived
EtaType2.ARRIVAL_SOON -> EtaStatus.ArrivalSoon(oldMateEta.durationMinute)
EtaType2.LATE_WARNING -> EtaStatus.LateWarning(oldMateEta.durationMinute)
EtaType2.LATE -> EtaStatus.Late(oldMateEta.durationMinute)
EtaType2.MISSING -> EtaStatus.Missing
},
)
}

val newMateEtasJson = MateEtaListTypeConverter().fromMateEta(newMateEtas)

db.execSQL(
"INSERT INTO eta_info_temp (meetingId, mateId, mateEtas) VALUES (?, ?, ?)",
arrayOf(meetingId, mateId, newMateEtasJson),
)
} while (cursor.moveToNext())
}

cursor.close()
db.execSQL("DROP TABLE eta_info")
db.execSQL("ALTER TABLE eta_info_temp RENAME TO eta_info")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.mulberry.ody.domain.model.MateEta
@ProvidedTypeConverter
class MateEtaListTypeConverter {
@TypeConverter
fun fromString(value: String): List<MateEta>? {
fun fromString(value: String): List<MateEta> {
return value.split(";").map { fromJson(it) }
}

Expand All @@ -17,7 +17,7 @@ class MateEtaListTypeConverter {
return type.joinToString(";") { toJson(it) }
}

private fun toJson(mateEta: MateEta): String {
fun toJson(mateEta: MateEta): String {
val etaStatusString =
when (mateEta.etaStatus) {
is EtaStatus.Arrived -> """{type:"Arrived"}"""
Expand All @@ -38,7 +38,7 @@ class MateEtaListTypeConverter {
val (key, value) =
it.split(":", limit = 2)
.map { it.trim().removeSurrounding("\"") }
key to value
(key to value)
}

val mateId = jsonObject["mateId"]!!.toLong()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.mulberry.ody.data.local.entity.eta

import androidx.room.ProvidedTypeConverter
import androidx.room.TypeConverter
import com.mulberry.ody.domain.model.MateEta2
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

@ProvidedTypeConverter
class OldMateEtaListTypeConverter(
private val moshi: Moshi = Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build(),
) {
@TypeConverter
fun fromString(value: String): List<MateEta2>? {
val listType = Types.newParameterizedType(List::class.java, MateEta2::class.java)
val adapter: JsonAdapter<List<MateEta2>> = moshi.adapter(listType)
return adapter.fromJson(value)
}

@TypeConverter
fun fromMateEta(type: List<MateEta2>): String {
val listType = Types.newParameterizedType(List::class.java, MateEta2::class.java)
val adapter: JsonAdapter<List<MateEta2>> = moshi.adapter(listType)
return adapter.toJson(type)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,9 @@ class DefaultMatesEtaRepository
matesEtaInfoDao.deleteAll()
}

override suspend fun deleteEtaReservation(reservationId: Long) {
etaReservationDao.delete(reservationId)
override suspend fun deleteEtaReservation(meetingId: Long) {
etaDashboardAlarm.cancelByMeetingId(meetingId)
etaReservationDao.delete(meetingId)
}

override suspend fun clearEtaReservation(isReservationPending: Boolean) {
Expand All @@ -82,7 +83,7 @@ class DefaultMatesEtaRepository
entities.forEach { entity ->
etaDashboardAlarm.reserve(
entity.meetingId,
max(entity.reserveMillis, System.currentTimeMillis()),
max(entity.reserveMillis, System.currentTimeMillis() + ETA_RESERVE_MILLIS_DELAY),
entity.isOpen,
entity.id,
)
Expand All @@ -92,6 +93,7 @@ class DefaultMatesEtaRepository
private fun MateEtaInfoEntity.toMateEtaInfo(): MateEtaInfo = MateEtaInfo(mateId, mateEtas)

companion object {
private const val ETA_RESERVE_MILLIS_DELAY = 3 * 1000
private const val ETA_OPEN_MINUTE = 30L
private const val ETA_CLOSE_MINUTE = 2L
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,17 @@ class EtaDashboardAlarm
private val context: Context,
private val alarmManager: AlarmManager,
) {
private val pendingIntents: MutableList<PendingIntent> = mutableListOf()
private val pendingIntents: MutableMap<AlarmId, PendingIntent> = mutableMapOf()

fun reserve(
meetingId: Long,
reserveMillis: Long,
isOpen: Boolean,
reservationId: Long,
) {
val alarmId = AlarmId(meetingId, reservationId)
val pendingIntent = createPendingIntent(meetingId, isOpen, reservationId)
reserveAlarm(reserveMillis, pendingIntent)
reserveAlarm(alarmId, pendingIntent, reserveMillis)
}

private fun createPendingIntent(
Expand All @@ -47,21 +48,30 @@ class EtaDashboardAlarm

@SuppressLint("ScheduleExactAlarm")
private fun reserveAlarm(
triggerAtMillis: Long,
alarmId: AlarmId,
pendingIntent: PendingIntent,
triggerAtMillis: Long,
) {
pendingIntents.add(pendingIntent)
pendingIntents[alarmId] = pendingIntent
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
triggerAtMillis,
pendingIntent,
)
}

fun cancelAll() {
pendingIntents.forEach {
alarmManager.cancel(it)
fun cancelByMeetingId(meetingId: Long) {
val removePendingIntent = pendingIntents.filter { it.key.meetingId == meetingId }
removePendingIntent.forEach {
pendingIntents.remove(it.key)
alarmManager.cancel(it.value)
}
}

fun cancelAll() {
pendingIntents.values.forEach { alarmManager.cancel(it) }
pendingIntents.clear()
}
}

private data class AlarmId(val meetingId: Long, val reservationId: Long)
Original file line number Diff line number Diff line change
@@ -1,21 +1,40 @@
package com.mulberry.ody.data.remote.core.entity.notification.mapper

import com.mulberry.ody.data.remote.core.entity.notification.response.NotificationLogsResponse
import com.mulberry.ody.domain.model.LogType
import com.mulberry.ody.domain.model.NotificationLog
import com.mulberry.ody.domain.model.NotificationLogType
import com.mulberry.ody.domain.model.NotificationLogType.DEFAULT
import com.mulberry.ody.domain.model.NotificationLogType.DEPARTURE
import com.mulberry.ody.domain.model.NotificationLogType.DEPARTURE_REMINDER
import com.mulberry.ody.domain.model.NotificationLogType.ENTRY
import com.mulberry.ody.domain.model.NotificationLogType.MEMBER_DELETION
import com.mulberry.ody.domain.model.NotificationLogType.MEMBER_EXIT
import com.mulberry.ody.domain.model.NotificationLogType.NUDGE
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

fun NotificationLogsResponse.toNotificationList(): List<NotificationLog> =
this.logList.map {
NotificationLog(
type = LogType.from(it.type),
type = it.type.toNotificationLogType(),
nickname = it.nickname,
createdAt = it.createdAt.parseToLocalDateTime(),
imageUrl = it.imageUrl,
)
}

private fun String.toNotificationLogType(): NotificationLogType {
return when (this) {
"ENTRY" -> ENTRY
"DEPARTURE_REMINDER" -> DEPARTURE_REMINDER
"DEPARTURE" -> DEPARTURE
"MEMBER_DELETION" -> MEMBER_DELETION
"MEMBER_EXIT" -> MEMBER_EXIT
"NUDGE" -> NUDGE
else -> DEFAULT
}
}

private fun String.parseToLocalDateTime(): LocalDateTime {
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")
return LocalDateTime.parse(this, formatter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,16 @@ class DefaultMeetingRepository
meetingId: Long,
mateEtaInfo: MateEtaInfo,
): ApiResult<Unit> {
val mateEtaInfoEntity = MateEtaInfoEntity(meetingId, mateEtaInfo.userId, mateEtaInfo.mateEtas)
val mateEtaInfoEntity =
MateEtaInfoEntity(meetingId, mateEtaInfo.userId, mateEtaInfo.mateEtas)
mateEtaInfoDao.upsert(mateEtaInfoEntity)
return ApiResult.Success(Unit)
}

override suspend fun fetchMeetingCatalogs(): ApiResult<List<MeetingCatalog>> =
service.fetchMeetingCatalogs().map { it.toMeetingCatalogs() }

override suspend fun exitMeeting(meetingId: Long): ApiResult<Unit> {
return service.exitMeeting(meetingId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.mulberry.ody.data.remote.core.entity.meeting.response.MeetingCreation
import com.mulberry.ody.data.remote.core.entity.meeting.response.MeetingResponse
import com.mulberry.ody.domain.apiresult.ApiResult
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.PATCH
import retrofit2.http.POST
Expand Down Expand Up @@ -43,4 +44,9 @@ interface MeetingService {
suspend fun postNudge(
@Body nudgeRequest: NudgeRequest,
): ApiResult<Unit>

@DELETE("/meetings/{meetingId}/mate")
suspend fun exitMeeting(
@Path(value = "meetingId") meetingId: Long,
): ApiResult<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.mulberry.ody.domain.model

enum class EtaType2 {
LATE_WARNING,
ARRIVAL_SOON,
ARRIVED,
LATE,
MISSING,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.mulberry.ody.domain.model

data class MateEta2(
val mateId: Long,
val nickname: String,
val etaType: EtaType2,
val durationMinute: Int,
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.mulberry.ody.domain.model
import java.time.LocalDateTime

data class NotificationLog(
val type: LogType,
val type: NotificationLogType,
val nickname: String,
val createdAt: LocalDateTime,
val imageUrl: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.mulberry.ody.domain.model

enum class NotificationLogType {
ENTRY,
DEPARTURE_REMINDER,
DEPARTURE,
NUDGE,
MEMBER_DELETION,
MEMBER_EXIT,
DEFAULT,
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface MatesEtaRepository {

suspend fun clearEtaFetchingJob()

suspend fun deleteEtaReservation(reservationId: Long)
suspend fun deleteEtaReservation(meetingId: Long)

suspend fun clearEtaReservation(isReservationPending: Boolean)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ interface MeetingRepository {
suspend fun fetchMeeting(meetingId: Long): ApiResult<Meeting>

suspend fun postNudge(nudge: Nudge): ApiResult<Unit>

suspend fun exitMeeting(meetingId: Long): ApiResult<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ class MeetingRoomActivity :
showSnackBar(R.string.error_guide)
}
}
lifecycleScope.launch {
viewModel.expiredNudgeTimeLimit.collect {
showSnackBar(R.string.nudge_time_limit_expired)
}
}
lifecycleScope.launch {
viewModel.isLoading.collect { isLoading ->
if (isLoading) {
Expand Down
Loading
Loading