Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
925 commits
Select commit Hold shift + click to select a range
628b639
[refactor] #56: ViewModel에서 SideEffect를 직접 호출하지 못하도록 수정
ikseong00 Jan 27, 2026
ff9856d
[refactor] #56: 미디어 업로드 API 응답 모델 변경
ikseong00 Jan 27, 2026
090cfec
[feat] #55: 중복 발행을 막는 `allowDuplicate` 옵션 ResultEventBus에 추가
ikseong00 Jan 27, 2026
6aef0c6
[refactor] #56: 아카이브 메인 화면 레이아웃 구조 개선
ikseong00 Jan 27, 2026
a4fd408
[fix] #56: 보관함 이미지 추가 시 로딩 상태가 계속 유지되는 버그 수정
ikseong00 Jan 27, 2026
87133c3
[feat] #55: 즐겨찾는사진 앨범 사진 삭제 로직 구현
ikseong00 Jan 27, 2026
0403697
[refactor] #55: 포토카드 즐겨찾기 상태 관리 로직 개선
ikseong00 Jan 27, 2026
f64157a
[refactor] #55: PhotoDetail의 favoriteRequests를 ViewModel로 이동
ikseong00 Jan 27, 2026
990e2b9
[refactor] #55: PhotoDetailViewModel의 favoriteRequests 가시성 변경 및 리팩토링
ikseong00 Jan 27, 2026
6e291f0
[refactor] #55: 포토카드 상세화면의 초기 좋아요 상태를 photo.isFavorite로 설정
ikseong00 Jan 27, 2026
a50c236
[feat] #52 불필요한 coroutineScope 제거
Ojongseok Jan 27, 2026
497d75e
[feat] #52 불필요한 상수 제거
Ojongseok Jan 27, 2026
48e42da
[feat] #52 트래킹 상태에 따른 카메라 전환 로직 개선
Ojongseok Jan 27, 2026
c644b4c
[feat] #52 불필요한 코드 제거 및 네이밍 변경
Ojongseok Jan 27, 2026
7d1556b
[feat] #52 브랜드 이미지 비트맵 변환 로직 분리
Ojongseok Jan 27, 2026
3a37a96
[build] #52 detekt 룰 적용
Ojongseok Jan 27, 2026
1fd3c33
[feat] #52 위치 권한 없을경우 초기 다각형 조회 로직 수정
Ojongseok Jan 27, 2026
c8228e2
[build] #52 detekt 룰 적용
Ojongseok Jan 27, 2026
141e926
[chore] #52 불필요한 코드블럭 제거
Ojongseok Jan 27, 2026
298d9ca
[design] #52 BottomNavigationBar 디자인 변경사항 반영
Ojongseok Jan 27, 2026
c7490cc
[design] #52 BottomNavigationBar 디자인 변경사항 다시 반영
Ojongseok Jan 27, 2026
d50eed1
[fix] #52 위치 권한 요청 Effect 네이밍 변경
Ojongseok Jan 27, 2026
4c8f5b1
[fix] #60 '카드 상세' PhotoBoothDetailContent, PhotoBoothDetailCard 네이밍 변경
Ojongseok Jan 28, 2026
dbca263
[fix] #60 getPlaceName() internal 키워드 추가
Ojongseok Jan 28, 2026
c65ae2d
[fix] #60 :feature:map:impl data-api 의존성 제거
Ojongseok Jan 28, 2026
d2a1637
[fix] #60 위치 권한 영구거부 체크에 사용되는 불필요한 변수 제거
Ojongseok Jan 28, 2026
5def27d
[feat] #60 MapViewModel @ApplicationContext 주입
Ojongseok Jan 28, 2026
c7a63ac
[feat] #66: SingleButtonWithTextButtonAlertDialog 구현
ikseong00 Jan 28, 2026
511d9fd
[feat] #66: QR 스캔 결과 미지원 브랜드 판별 시 대응 로직 구현
ikseong00 Jan 28, 2026
27d7720
[feat] #66: QR 스캔 시 브랜드 지원 여부 확인 로직 뷰모델로 이동
ikseong00 Jan 28, 2026
d531680
[chore] #66: 다이얼로그 너비가 작아지는 현상 수정
ikseong00 Jan 28, 2026
f98bbed
[style] #66: detekt `FunctionOnlyReturningConstant` 규칙 비활성화
ikseong00 Jan 28, 2026
d6f327a
[feat] #60 feature:map:impl services-location 의존성 추가
Ojongseok Jan 28, 2026
f5ad66f
[feat] #60 현위치 조회 및 카메라 이동 로직 수정
Ojongseok Jan 28, 2026
445a373
[feat] #60 onIntent 내에서 내부 함수로 전달하는 파라미터 수정
Ojongseok Jan 28, 2026
989516f
[fix] #60 위치 권한 상태에 따른 현위치 이동 로직 수정
Ojongseok Jan 28, 2026
daba28e
[fix] #60 네트워크 브랜드 이미지 캐싱 로직 변경
Ojongseok Jan 28, 2026
61ad8a0
[fix] #60 getFusedLocationProviderClient 위치 조회 함수 분리
Ojongseok Jan 28, 2026
a29e9e4
[fix] #60 이미지 비트맵 변환 코루틴 launch -> async로 병렬 수행되도록 변경
Ojongseok Jan 28, 2026
eba3da4
Merge branch 'develop' into feat/#55,#56-photo-api
ikseong00 Jan 28, 2026
42f6ab1
[fix] #60 cont -> coroutine 네이밍 수정
Ojongseok Jan 28, 2026
0bfdecb
[fix] #60 handleClickBrand() 변수명 수정
Ojongseok Jan 28, 2026
44941f7
[fix] #55: 앨범 상세화면 로딩 중 빈 화면이 표시되는 버그 수정
ikseong00 Jan 28, 2026
ec0ea59
[refactor] #55: ApplicationScope 대신 ViewModelScope 에서 좋아요 상태 구독
ikseong00 Jan 28, 2026
bf290fa
[refactor] #55: ViewModel이 onCleared 시점에 좋아요 상태를 업데이트하도록 변경
ikseong00 Jan 28, 2026
62b596e
[chore] 사용하지 않는 import 제거
ikseong00 Jan 28, 2026
f426c6f
[fix] #66: 테스트용 코드 제거
ikseong00 Jan 28, 2026
83f1312
[chore] #66: 디자인 시스템 터치 범위 반영
ikseong00 Jan 28, 2026
5b7a0fe
[fix] #66: QR 다운로드 팝업 버튼 클릭 시 다이얼로그 닫기 로직 추가
ikseong00 Jan 28, 2026
7d9ef96
[refactor] #66: `Uri.parse()`를 `String.toUri()` 확장 함수로 변경
ikseong00 Jan 28, 2026
6ce6dcd
Merge pull request #58 from YAPP-Github/feat/#55,#56-photo-api
ikseong00 Jan 29, 2026
ee15c53
Merge pull request #67 from YAPP-Github/feat/#66-unsupported-brand-qr
ikseong00 Jan 29, 2026
a2ed3f7
[fix] #60 '현 위치에서 탐색' 버튼 선택 시 안보이도록 수정
Ojongseok Jan 29, 2026
a02b8ba
[build] #60 detekt 룰 적용
Ojongseok Jan 29, 2026
7460bd7
Merge pull request #68 from YAPP-Github/refactor/#65-map-refactor
Ojongseok Jan 29, 2026
197d1e8
[chore] #64: `core:data-api` 모듈을 Android 라이브러리로 변경
ikseong00 Jan 29, 2026
367fd97
[feat] #64: 미디어 업로드 티켓 발급 API 분리 및 URI/URL 업로드 기능 추가
ikseong00 Jan 29, 2026
1bc5510
[feat] #64: 여러 장의 사진을 업로드하는 UseCase 추가
ikseong00 Jan 29, 2026
cb51a9a
[feat] #64: MediaUploadRepository 이미지 업로드 기능 구현
ikseong00 Jan 29, 2026
94b2c4d
[refactor] #64: 이미지 업로드 방식을 ByteArray에서 URL로 변경
ikseong00 Jan 29, 2026
33e0c3a
Merge pull request #60 from YAPP-Github/feat/#52-map-api
Ojongseok Jan 29, 2026
ba9933a
[feat] #64: 이미지 여러 장 업로드 기능 구현
ikseong00 Jan 29, 2026
e82e376
[feat] #69: 폴더 생성 및 목록 조회 API 구현
ikseong00 Jan 29, 2026
956d3c9
[feat] #69: 앨범 목록 조회 기능 추가
ikseong00 Jan 29, 2026
1b9f5b6
[feat] #69: 새 앨범 추가 기능 구현
ikseong00 Jan 29, 2026
5c00e14
[chore] #72 권한 항목 문구 변경
Ojongseok Jan 29, 2026
e566956
[feat] #69: 전체 앨범 화면 API 연동
ikseong00 Jan 29, 2026
41c8a06
[feat] #69: 업로드 시 앨범 목록 조회 기능 추가
ikseong00 Jan 29, 2026
9a3ea5e
[feat] #69: 앨범 상세화면 사진 목록 API 연동
ikseong00 Jan 29, 2026
08cc5de
[feat] #59: 사진 목록 페이징 기능 구현
ikseong00 Jan 29, 2026
953954d
[chore] #72 서비스 정보 관련 상수 정의
Ojongseok Jan 29, 2026
48c2eac
[feat] #72 서비스 정보 및 지원 섹션 선택 시 외부 브라우저로 URL 이동
Ojongseok Jan 29, 2026
42ef3b7
[chore] #72 기기 권한 내 저장소 권한 제거
Ojongseok Jan 29, 2026
7a7695e
[feat] #59: 앨범 상세 화면 Paging 적용
ikseong00 Jan 29, 2026
491f052
[feat] #70: 전체 사진 화면 Paging 적용
ikseong00 Jan 29, 2026
f2ca191
[refactor] #59: Paging 초기 로드 사이즈 조정
ikseong00 Jan 29, 2026
3e2d451
[refactor] #69: 앨범 상세 화면 이동 시 albumId 대신 AlbumPreview 객체 전달
ikseong00 Jan 29, 2026
1fd2acd
[feat] #69: 모든 앨범 앨범 추가 API 연동
ikseong00 Jan 29, 2026
33cf598
[chore] #72 pretendard 폰트 교체
Ojongseok Jan 29, 2026
5b2b0f1
[feat] #69: 앨범 추가 성공 시 fetch api 호출
ikseong00 Jan 29, 2026
82c8897
[refactor] #69: 폴더 생성 API 응답 타입 변경 및 불필요한 반환값 제거
ikseong00 Jan 29, 2026
7d9cea1
[feat] #69: 앨범 삭제 기능 구현
ikseong00 Jan 29, 2026
b3613cb
[refactor] #59: 사진 그리드 레이아웃 관련 상수명 변경 및 적용
ikseong00 Jan 29, 2026
84db147
[refactor] #69 일반 앨범에서 사진 삭제 로직 구현
ikseong00 Jan 29, 2026
447dbb8
[feat] #69: 전체 사진 화면 필터링 기능 적용
ikseong00 Jan 29, 2026
597c7f9
[refactor] #69: ScrollToTop Effect 수신 후, LoadState가 완료된 후에, scrollToI…
ikseong00 Jan 29, 2026
a3671f2
[fix] #64: 여러 개 업로드 타입 오류 수정
ikseong00 Jan 29, 2026
221d8b4
[refactor] #64: 사진 여러개 업로드 병렬 및 Dispatcher 적용
ikseong00 Jan 29, 2026
4bd7919
[refactor] #59: 프리페치 거리 조정
ikseong00 Jan 29, 2026
4a0e1e1
[fix] #69: 앨범 상세화면에서 사진 삭제 실패 시 다이얼로그/바텀시트가 닫히지 않는 버그 수정
ikseong00 Jan 29, 2026
e5fb897
[chore] #69: 린트 수정
ikseong00 Jan 29, 2026
44dc5ea
[refactor] #69: 포토카드 상세화면 결과 타입을 ArchiveResult로 변경
ikseong00 Jan 29, 2026
f1b12f3
[refactor] #69: 앨범 이름 중복 검사 로직 개선
ikseong00 Jan 29, 2026
d5f26e4
[refactor] #64: 업로드 타입 로직 변경
ikseong00 Jan 29, 2026
36095a6
[feat] #69: 사진 상세에서 삭제/즐겨찾기 변경 시 목록 화면 동기화
ikseong00 Jan 29, 2026
8c7521f
[fix] #69: entry 중첩 구조 오류 수정
ikseong00 Jan 29, 2026
ac6e255
[refactor] #64: 업로드 타입 로직 변경
ikseong00 Jan 29, 2026
fb2196a
Merge branch 'develop' into feat/#59,64,69-archive-api
ikseong00 Jan 29, 2026
1f52203
[build] #59,64,69: detekt 린트 수정
ikseong00 Jan 29, 2026
7bdf2b6
[refactor] 아카이브 EntryProvider 통합
ikseong00 Jan 29, 2026
474ade5
[feat] #70: Pose API 레이어 구현
ikseong00 Jan 29, 2026
d42572c
[feat] #70: 포즈 목록 화면 API 연동
ikseong00 Jan 29, 2026
92d595b
[feat] #70: 랜덤 포즈 화면 API 연동
ikseong00 Jan 29, 2026
f4f5ff3
[refactor] #70: BottomSheet이 중간에 걸치지 않도록 수정
ikseong00 Jan 29, 2026
12b564f
[feat] #70: 포즈 목록 Paging 적용
ikseong00 Jan 29, 2026
63f00d4
[build] #70: detekt UnusedPrivateProperty suppress 추가
ikseong00 Jan 29, 2026
3fe975d
[refactor] #70: PoseDetailResponse를 PoseItemResponse로 이름 변경
ikseong00 Jan 29, 2026
a956c89
[refactor] #70: PagingConfig 상수 위치 변경 및 설정 추가
ikseong00 Jan 29, 2026
3df5f84
[refactor] #70: 포즈 랜덤 화면 플로팅 바 패딩 수정
ikseong00 Jan 29, 2026
323d245
[refactor] #70: 포즈 상세 조회 API 응답 모델에서 'scrap' 필드 제거
ikseong00 Jan 29, 2026
3d32488
[refactor] #70: 포즈 상세화면 진입 시 Pose 객체 대신 ID를 전달하도록 변경
ikseong00 Jan 29, 2026
40a158a
[feat] #70: 랜덤 포즈 좌우 이동 및 프리패치 구현
ikseong00 Jan 29, 2026
523ebf2
[feat] #70: 포즈 상세/랜덤 응답에 scrap 필드 반영
ikseong00 Jan 29, 2026
6855722
[feat] #70: 포즈 상세화면 스크랩 API 연동
ikseong00 Jan 29, 2026
cd699b1
[feat] #70: 랜덤 포즈 스크랩 API 연동 및 UI 개선
ikseong00 Jan 29, 2026
75ed9d5
[feat] #70: 폴더 삭제 API deletePhotos 쿼리 추가 및 앨범 사진 삭제 옵션별 분기 구현
ikseong00 Jan 29, 2026
f8aa796
[fix] #70: detekt SpacingAroundCurly 린트 오류 수정
ikseong00 Jan 29, 2026
176e224
[refactor] #70: 사용하지 않는 `getPoses` 함수 제거
ikseong00 Jan 29, 2026
95deaa9
[fix] #70: updateScrap 반환값 수정 및 스크랩 조건 로직 개선
ikseong00 Jan 29, 2026
a35534d
[fix] #70: handleMoveNext 인덱스 이동 및 프리패치 로직 버그 수정
ikseong00 Jan 29, 2026
e94b2ea
[fix] #70: RandomPoseScreen ImageLoader remember 처리
ikseong00 Jan 29, 2026
bd11120
[chore] #72 알림 권한 사용 선언 추가
Ojongseok Jan 29, 2026
df9c52c
[feat] #72 CameraPermissionManager.kt 생성
Ojongseok Jan 29, 2026
7aa03fe
[feat] #72 권한 여부에 따른 권한 요청 로직 구성
Ojongseok Jan 29, 2026
b1076c7
[feat] #72 다이어로그 usePlatformDefaultWidth = false 디자인 시스템 내 공통 속성으로 변경
Ojongseok Jan 29, 2026
9afb135
[chore] #72 개인정보 처리방침 URL 변경
Ojongseok Jan 29, 2026
6dc6333
[build] #72 OssLicenses 라이브러리 의존성 설정
Ojongseok Jan 29, 2026
f3cb76e
[feat] #72 오픈소스 라이선스 Activity 이동 설정
Ojongseok Jan 29, 2026
6bda6fd
[feat] #72 appVersion 조회 로직 route로 이동
Ojongseok Jan 30, 2026
0a6fd4a
[fix] #72 권한 설정 로직 수정
Ojongseok Jan 30, 2026
7da4cf3
[fix] #72 권한 확인 로직 수정
Ojongseok Jan 30, 2026
e3b330d
[feat] #71 사용자 정보 조회 API 연동
Ojongseok Jan 30, 2026
03a1782
[design] #71 기본 프로필 이미지 리소스 추가
Ojongseok Jan 30, 2026
57976ef
[chore] #71 ApiService -> AuthService 클래스명 변경
Ojongseok Jan 30, 2026
4d60422
[feat] #71 마이페이지 메인화면 API 연결
Ojongseok Jan 30, 2026
f2665ce
[feat] #71 사용자 정보 갱신 API 로직 작성
Ojongseok Jan 30, 2026
a9a3a25
[chore] #71 불필요한 파일 제거
Ojongseok Jan 30, 2026
7645a92
[chore] #71 UseCase 내 generateFileName() 메소드 ContentTypeUtil로 분리
Ojongseok Jan 30, 2026
f377d0b
[feat] #71 RootNavKey 전환 이후 이전 백스택, topLevelStack 제거하는 로직 추가
Ojongseok Jan 30, 2026
6cacde5
[chore] #71 카카오 로그인 API URL 변경 /KAKAO
Ojongseok Jan 30, 2026
e4cd13b
[feat] #71 MainScreen 이동 시점 변경
Ojongseok Jan 30, 2026
ef698f2
[chore] #71 불필요한 로그 제거
Ojongseok Jan 30, 2026
24b08d6
[feat] #71 회원탈퇴 및 로그아웃 로직 구현
Ojongseok Jan 30, 2026
2f6adf8
[feat] #71 로그인 상태 확인 로직 수정
Ojongseok Jan 30, 2026
929fff8
[feat] #71 Ktor BearerToken 캐싱 제거 구문 추가
Ojongseok Jan 30, 2026
12feac7
[chore] #71 불필요한 DataStore 키 제거
Ojongseok Jan 30, 2026
b2e26e3
[feat] #71 기본 프로필 설정 로직 구성
Ojongseok Jan 30, 2026
d7a27e3
[feat] #70랜덤 포즈 조회 시 인원 수 필터링 기능 추가
ikseong00 Jan 31, 2026
2ed24bc
[chore] #63 Photo data class 내 불필요한 어노테이션 제거
Ojongseok Jan 31, 2026
660e487
[chore] #63 compose-stable-marker 의존성 추가
Ojongseok Jan 31, 2026
66c32bc
[chore] #63 :core:model 내 UI에 표현되는 data class @Immutable 어노테이션 추가
Ojongseok Jan 31, 2026
9271d37
[refactor] #70: 포즈 스크랩 실패 시 스크랩 상태 롤백 로직 수정
ikseong00 Jan 31, 2026
b952af4
[refactor] #62 Clickable 관련 확장함수 composed{} -> Modifier.Node() 마이그레이션
Ojongseok Jan 31, 2026
13b8afb
[refactor] #62 composed{}, Node()의 create(), update() 동작을 볼 수 있는 테스트용…
Ojongseok Jan 31, 2026
604e323
[fix] #62 ClickableSingleNode 내에서 MultipleEventsCutter 사용하도록 변경
Ojongseok Jan 31, 2026
2324373
[chore] #71 카카오 로그인 API URL 변경
Ojongseok Jan 31, 2026
602d477
[chore] #62 접근성을 고려해 onClickLabel, role 파라미터 추가
Ojongseok Jan 31, 2026
29d6b79
[chore] #71 RootNavigationState NavigationModule 내 @Provides 정의
Ojongseok Jan 31, 2026
3f942a1
[feat] #71 닉네임 변경 API 연결
Ojongseok Jan 31, 2026
d5e5081
[feat] #71 프로필 이미지 변경 API 인터페이스 작성
Ojongseok Jan 31, 2026
e8cad09
[feat] #72 ProfileScreen 일부 컴포넌트 분리
Ojongseok Jan 31, 2026
76ca6f3
[feat] #72 프로필 이미지 업로드 UseCase 정의
Ojongseok Jan 31, 2026
c449f8d
[fix] #71 RefreshToken 만료 후 캐싱된 AccessToken 조회하는 현상 수정
Ojongseok Jan 31, 2026
1cdab13
[chore] #71 logout(), signOut() 메소드 블럭 수정
Ojongseok Jan 31, 2026
531b1d0
[chore] #71 User -> UserInfo로 data class명 변경
Ojongseok Feb 1, 2026
b6f8923
Merge branch 'feat/#72-service-info-permission' of https://github.com…
Ojongseok Feb 1, 2026
7b3a87f
[chore] #71 Pull #72
Ojongseok Feb 1, 2026
f752830
[feat] #71 프로필 편집 상태에 따른 화면 전환 및 API 연결
Ojongseok Feb 1, 2026
58c712c
[feat] #71 계정 설정 / 프로필 편집 화면 분리
Ojongseok Feb 1, 2026
47b42ff
[feat] #71 프로필 이미지 설정 로직 수정
Ojongseok Feb 1, 2026
a5f7758
[feat] #71 AccessToken, RefreshToken 저장 여부 확인 로직 수정
Ojongseok Feb 1, 2026
19c25ac
[feat] #71 AccessToken, RefreshToken 저장 여부 확인 로직 수정
Ojongseok Feb 1, 2026
822e95e
[feat] #71 프로필 이미지 컴포넌트 분리
Ojongseok Feb 1, 2026
a577940
[chore] #71 SelectedProfileImage 경로 변경
Ojongseok Feb 1, 2026
a3a25ea
[build] #76 detekt 룰 적용
Ojongseok Feb 1, 2026
8103599
[feat] #71 HttpClient 내 토큰 캐시를 제거하기 위해 AuthCacheManager 생성
Ojongseok Feb 1, 2026
987d99f
[build] #71 OssLicenses 플러그인 버전 상향
Ojongseok Feb 2, 2026
7ccc115
[chore] #71 OssLicenses EdgeToEdge 커스텀 테마 적용
Ojongseok Feb 2, 2026
379a8be
Merge pull request #73 from YAPP-Github/feat/#59,64,69-archive-api
Ojongseok Feb 2, 2026
6126a61
Merge branch 'develop' into feat/#70-pose-api
Ojongseok Feb 2, 2026
8340ee9
Merge pull request #74 from YAPP-Github/feat/#70-pose-api
Ojongseok Feb 2, 2026
020482a
[fix] paging-compose 관련 중복 의존성 제거
Ojongseok Feb 2, 2026
2a7cf3f
Merge branch 'develop' of https://github.com/YAPP-Github/27th-App-Tea…
Ojongseok Feb 2, 2026
d09ac7d
[fix] #71 업로드 티켓 발급 요청 repository 메소드 변경
Ojongseok Feb 2, 2026
b96f6e3
[fix] #71 프로필 이미지 변경 시 Intent로 전달하는 부분 ByteArray -> Uri로 변경
Ojongseok Feb 2, 2026
5d81aab
[docs] #71 외부 라이브러리에 대한 난독화 예외 구문 추가
Ojongseok Feb 2, 2026
9e27eb4
[chore] #71 릴리즈 모드 빌드 시 signingConfig 및 키 설정
Ojongseok Feb 2, 2026
4726393
[refactor] PoseContract를 feature/pose 모듈로 이동 및 PeopleCount 분리
ikseong00 Feb 4, 2026
9e71de4
[refactor] 사용하지 않는 uploadImage 함수 제거
ikseong00 Feb 4, 2026
b19441d
[fix] 랜덤 포즈 이미지 modifier 수정 및 스크랩 롤백 조건 개선
ikseong00 Feb 4, 2026
98d4881
[chore] #75 applySemantics() 내 disabled() 구문 추가
Ojongseok Feb 4, 2026
be6d597
[fix] #75 버튼 선택 중 이탈 시 인터랙션 해제되지 않는 현상 수정
Ojongseok Feb 4, 2026
cb4f691
Merge pull request #76 from YAPP-Github/refactor/#63-compose-stable-m…
Ojongseok Feb 4, 2026
718e48f
[chore] #75 테스트용 코드 및 로그 제거
Ojongseok Feb 4, 2026
5281b97
[build] #75 detekt 룰 적용
Ojongseok Feb 4, 2026
c863271
[feat] #71 'Neki에 문의하기' 외부링크 연결 url 변경
Ojongseok Feb 4, 2026
22c31b7
Merge branch 'develop' of https://github.com/YAPP-Github/27th-App-Tea…
Ojongseok Feb 4, 2026
74b8418
[fix] #71 닉네임 변경 시 글자수 제한 12자로 변경
Ojongseok Feb 4, 2026
b84fa8c
[chore] #71 Mypage 모듈 내 컴포넌트 internal 키워드 추가
Ojongseok Feb 4, 2026
38112ba
[fix] #71 uri 형변환 null체크 추가
Ojongseok Feb 4, 2026
7929463
Merge pull request #75 from YAPP-Github/refactor/#62-migrate-composed
Ojongseok Feb 4, 2026
0ac2ac8
[feat] #77 스크랩 포즈 목록 조회 API 구현
ikseong00 Feb 4, 2026
621099e
[feat] #77 PoseDetail 스크랩 변경 ResultEventBus 전파 구현
ikseong00 Feb 4, 2026
c46d2f9
[feat] #77 PoseViewModel 스크랩 필터 및 상태 동기화 구현
ikseong00 Feb 4, 2026
66c3186
[fix] #77: 동일한 인원 수 선택 시 인원 수가 null 이 되도록 수정
ikseong00 Feb 4, 2026
cfe8e89
[refactor] #77: 최초 로딩 시에만 로딩 다이얼로그가 표시되도록 조건 수정
ikseong00 Feb 4, 2026
ccfee45
[fix] #77: 랜덤 포즈 인원 수 선택 바텀시트에서 선택 버튼 클릭 시 `selectedRandomPosePeopleC…
ikseong00 Feb 4, 2026
10b1a12
[fix] #71 프로필 이미지 변경 후 이미지 캐싱 로직 추가
Ojongseok Feb 4, 2026
6bf56e0
[build] #71 detekt 룰 적용
Ojongseok Feb 4, 2026
f9ec582
[refactor] #77: RandomPoseFloatingBar 컴포저블 분리 및 border 수정
ikseong00 Feb 4, 2026
d918fc7
[refactor] #77: 랜덤 포즈 초기 로드 개수 3→4, 여분 포즈 2→3으로 변경 및 매직넘버를 PoseConst …
ikseong00 Feb 4, 2026
93b9c3e
[feat] #77: 랜덤 포즈 추천 Horizontal Pager 를 사용하도록 변경
ikseong00 Feb 4, 2026
28c1562
[refactor] #77: 포즈 이미지 스와이프 애니메이션 속도 조절
ikseong00 Feb 4, 2026
e44604d
[feat] #77: 랜덤 포즈 이미지 페이저 흰색 배경 추가 및 Alignment.Center 추가
ikseong00 Feb 4, 2026
842f571
[refactor] #77: 랜덤 포즈 중복 호출 로직 분리 및 페이징 시 이미지 스와이프 효과 추가
ikseong00 Feb 4, 2026
2a94c29
[refactor] #77: Coil 이미지 캐싱 로직 제거
ikseong00 Feb 4, 2026
ab11309
[refactor] #77: 랜덤 포즈 API 호출 결과 세분화 및 예외 처리 강화
ikseong00 Feb 4, 2026
8a80e88
[refactor] #77: 랜덤 포즈 API 호출 결과값을 별도 변수로 관리하지 않도록 변경
ikseong00 Feb 4, 2026
8d05fb4
[feat] #77: 포즈 이미지 어두워지는 그라데이션 효과 추가
ikseong00 Feb 4, 2026
e7f7ac1
[chore] #77: 랜덤 포즈 추천 문구의 띄어쓰기를 수정합니다
ikseong00 Feb 5, 2026
1256dce
[chore] #77: 포즈 인원 수 5인 이상 제거
ikseong00 Feb 5, 2026
425fcd5
[fix] #79 알림 권한 확인 로직 버전별 분기 추가
Ojongseok Feb 5, 2026
63d97d2
[fix] #79 AuthService @Inject 어노테이션 추가 및 NetworkModule 선언부 제거
Ojongseok Feb 5, 2026
3c969f4
[fix] #79 UploadMultiplePhotoUseCase 내부 generateFileName() 메소드 제거
Ojongseok Feb 5, 2026
4defc55
[fix] #79 회원탈퇴 관련 네이밍 변경(signout -> withdraw)
Ojongseok Feb 5, 2026
e83a514
[fix] #79 앱버전 조회 시 Intent 통해 조회하도록 변경
Ojongseok Feb 5, 2026
1e664d8
[fix] #79 Contract의 init을 의미하는 Intent 및 함수명 통일
Ojongseok Feb 5, 2026
3101431
[build] #79 feature:mypage:impl 카카오 의존성 추가
Ojongseok Feb 6, 2026
da1f47f
[fix] #79 카카오 계정 관리 클래스 분리 및 인증 로직 수정
Ojongseok Feb 6, 2026
53e3f99
[chore] #79 MypageViewModel의 fetchInitialData() 실패 시 로그 추가
Ojongseok Feb 6, 2026
d0f2a1e
[fix] #79 프로필 이미지 변경 후 이미지 로드되기 전 깜빡이며 뒤로가는 현상 수정
Ojongseok Feb 6, 2026
d07c84d
[fix] #79 이미지 프리로딩 Effect 네이밍 수정
Ojongseok Feb 6, 2026
602bb8d
[fix] #79 프로필 이미지/닉네임 동시 변경 시 뒤로가기 로직 수정
Ojongseok Feb 6, 2026
b6062cb
캐싱된 JWT 토큰 제거 시점 수정
Ojongseok Feb 6, 2026
4d594ae
[chore] #79 HttpClient 순환참조 구조 수정
Ojongseok Feb 6, 2026
a03d7fd
Merge pull request #79 from YAPP-Github/feat/#71-mypage-api
Ojongseok Feb 6, 2026
749802d
[feat] #77: 포즈피드 스크랩 아이콘 추가 및 스크랩 아이콘 변경
ikseong00 Feb 6, 2026
7382415
[fix] #77: 스크랩 포즈 조회 리스폰스 매핑 시 isScrapped 필드 설정
ikseong00 Feb 6, 2026
7ac7a4b
[refactor] #77: 포즈피드 상세화면 상단 그라데이션 알파 값 변경
ikseong00 Feb 6, 2026
90f5538
[design] 마이페이지 내 텍스트 일부 폰트 변경
Ojongseok Feb 6, 2026
3a366a3
[refactor] #77: 불필요한 파라미터 제거
ikseong00 Feb 6, 2026
abe53c8
[refactor] #78: 포즈 아이콘 리소스를 core:designsystem 모듈로 이동
ikseong00 Feb 6, 2026
438bff0
[chore] #77: DesignR 대신 R 네이밍 수정
ikseong00 Feb 6, 2026
27fa863
[design] '가까운' 네컷 사진 브랜드 색상 강조
Ojongseok Feb 6, 2026
a259200
[feat] 네컷지도 마커의 지점 표기 추가
Ojongseok Feb 6, 2026
a24bbbf
[refactor] TopBar 폰트 사이즈 18 -> 20 증가
ikseong00 Feb 6, 2026
03dee6f
Merge pull request #82 from YAPP-Github/feat/#77-pose-api
ikseong00 Feb 6, 2026
5624ebc
[refactor] #85: 랜덤 포즈 API 호출 시 중복된 포즈를 제외하는 로직 추가
ikseong00 Feb 6, 2026
83b18fa
[refactor] #85: 랜덤 포즈 중복 호출 로직 Repository로 이전
ikseong00 Feb 6, 2026
0403489
[chore] #85: 불필요한 oneline 블록 제거
ikseong00 Feb 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 13 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
root = true

[*]
charset = utf-8
indent_size = 4
indent_style = space
max_line_length = 150
insert_final_newline = true
trim_trailing_whitespace = true

[*.{kt,kts}]
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
12 changes: 6 additions & 6 deletions .github/workflows/android-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: set up JDK 17
- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '17'
java-version: '21'
distribution: 'temurin'
cache: gradle

Expand All @@ -49,9 +49,9 @@ jobs:
# run: |
# echo '${{ secrets.GOOGLE_SERVICES }}' >> ./app/google-services.json

# - name: Code style checks
# run: |
# ./gradlew detekt --continue
- name: Code style checks
run: |
./gradlew detekt --continue

- name: Run build
run: ./gradlew buildDebug --stacktrace
run: ./gradlew buildDebug --stacktrace
81 changes: 81 additions & 0 deletions .github/workflows/discord_push_event_notify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Discord Push Notify

on:
push:
branches:
- main
- develop

jobs:
notify:
runs-on: ubuntu-latest

steps:
- name: Send push to Discord (Embed)
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: |
set -e

# ---- push info ----
REF=$(jq -r '.ref' "$GITHUB_EVENT_PATH")
BRANCH="${REF#refs/heads/}"

REPO_URL=$(jq -r '.repository.html_url' "$GITHUB_EVENT_PATH")
URL=$(jq -r '.compare // .repository.html_url' "$GITHUB_EVENT_PATH")
TIMESTAMP=$(jq -r '.head_commit.timestamp // empty' "$GITHUB_EVENT_PATH")

COUNT=$(jq -r '.commits | length' "$GITHUB_EVENT_PATH")

# "• [hash] — message" (hash는 링크)
COMMITS=$(jq -r --arg repo_url "$REPO_URL" '
(.commits // [])[:20]
| map(
"• [" + (.id[0:7]) + "](" + ($repo_url + "/commit/" + .id) + ") — " +
((.message | split("\n")[0]) | gsub("\r";""))
)
| join("\n")
' "$GITHUB_EVENT_PATH")

TITLE="🚀 New Push · [${BRANCH}] · ${COUNT} commits"

if [ -z "$COMMITS" ]; then
DESC=$(printf "총 %s개 커밋\n(커밋 정보 없음)" "$COUNT")
else
DESC=$(printf "총 %s개 커밋\n%s" "$COUNT" "$COMMITS")
fi

payload=$(jq -n \
--arg username "네키 디스코드 알림 봇" \
--arg avatar "https://i.ifh.cc/PbdkGM.jpg" \
--arg title "$TITLE" \
--arg url "$URL" \
--arg desc "$DESC" \
--arg ts "$TIMESTAMP" \
--argjson color 3066993 \
'{
username: $username,
avatar_url: $avatar,
embeds: [
{
title: $title,
url: $url,
description: $desc,
color: $color
}
]
}
| (if ($ts|length) > 0 then .embeds[0].timestamp = $ts else . end)
')

resp=$(curl -sS -X POST -H "Content-Type: application/json" -d "$payload" \
-w "\nHTTP_STATUS:%{http_code}\n" \
"$DISCORD_WEBHOOK_URL" || true)

echo "$resp"

status=$(echo "$resp" | sed -n 's/HTTP_STATUS://p')
if [ -z "$status" ] || [ "$status" -ge 400 ]; then
echo "Discord webhook failed"
exit 1
fi
182 changes: 182 additions & 0 deletions .github/workflows/discord_review_event_notify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
name: Discord PR Review

on:
pull_request_review:
types: [submitted]
issue_comment:
types: [created]

jobs:
notify:
if: |
github.actor != 'coderabbitai[bot]' &&
github.actor != 'coderabbitai' &&
(github.event_name != 'issue_comment' || github.event.issue.pull_request)
runs-on: ubuntu-latest

steps:
- name: Send PR activity to Discord (Embed)
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -e

EVENT="$GITHUB_EVENT_NAME"
REPO=$(jq -r '.repository.full_name' "$GITHUB_EVENT_PATH")

truncate_lines () {
local text="$1"
local max="$2"
echo "$text" | awk -v max="$max" 'NR<=max {print} NR==max {exit}'
}

truncate_chars () {
local s="$1"
local n="$2"
if [ "${#s}" -gt "$n" ]; then
echo "${s:0:$n}…"
else
echo "$s"
fi
}

quote_block () {
# 각 줄을 "> "로 감싸서 Discord 인용문 만들기
echo "$1" | sed 's/^/> /'
}

TITLE=""
DESC=""
URL=""
COLOR=7506394
TIMESTAMP=""

if [ "$EVENT" = "pull_request_review" ]; then
PR_NUMBER=$(jq -r '.pull_request.number' "$GITHUB_EVENT_PATH")
PR_TITLE=$(jq -r '.pull_request.title' "$GITHUB_EVENT_PATH")
PR_URL=$(jq -r '.pull_request.html_url' "$GITHUB_EVENT_PATH")

REVIEWER=$(jq -r '.review.user.login' "$GITHUB_EVENT_PATH")
STATE=$(jq -r '.review.state' "$GITHUB_EVENT_PATH")
REVIEW_BODY=$(jq -r '.review.body // ""' "$GITHUB_EVENT_PATH")

REVIEW_ID=$(jq -r '.review.id' "$GITHUB_EVENT_PATH")
TIMESTAMP=$(jq -r '.review.submitted_at // empty' "$GITHUB_EVENT_PATH")

# state별 컬러
case "$STATE" in
approved|APPROVED) COLOR=5763719 ;;
changes_requested|CHANGES_REQUESTED) COLOR=15548997 ;;
commented|COMMENTED) COLOR=3447003 ;;
dismissed|DISMISSED) COLOR=9807270 ;;
*) COLOR=7506394 ;;
esac

# ✅ 타이틀: 2줄
TITLE=$(printf "📝 PR Review · %s\n[#%s] — “%s”" "$STATE" "$PR_NUMBER" "$PR_TITLE")
URL="$PR_URL"

# ✅ 리뷰 본문: 있으면 2~4줄만, 없으면 아예 출력 안 함
REVIEW_SNIP=""
if [ -n "$REVIEW_BODY" ] && [ "$REVIEW_BODY" != "null" ]; then
REVIEW_SNIP=$(truncate_lines "$REVIEW_BODY" 4)
fi

# 인라인 코멘트 가져오기 (파일 경로 제거, 코멘트만)
COMMENTS_JSON=$(curl -sS -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/$REPO/pulls/$PR_NUMBER/reviews/$REVIEW_ID/comments?per_page=100")

INLINE_COMMENTS=$(echo "$COMMENTS_JSON" | jq -r '
if type=="array" and length>0 then
.[:10] | map(.body | gsub("\r";"")) | join("\n\n---\n\n")
else
""
end
')

QUOTED_INLINE=""
if [ -n "$INLINE_COMMENTS" ]; then
QUOTED_INLINE=$(quote_block "$INLINE_COMMENTS")
fi

# ✅ Description 조립
DESC=$(printf "Reviewer: %s" "$REVIEWER")

if [ -n "$REVIEW_SNIP" ]; then
DESC=$(printf "%s\n\n%s" "$DESC" "$REVIEW_SNIP")
fi

if [ -n "$QUOTED_INLINE" ]; then
DESC=$(printf "%s\n\n**💬 Comments**\n%s" "$DESC" "$QUOTED_INLINE")
fi

DESC=$(truncate_chars "$DESC" 3800)

elif [ "$EVENT" = "issue_comment" ]; then
PR_NUMBER=$(jq -r '.issue.number' "$GITHUB_EVENT_PATH")
PR_TITLE=$(jq -r '.issue.title' "$GITHUB_EVENT_PATH")
ISSUE_URL=$(jq -r '.issue.html_url' "$GITHUB_EVENT_PATH")

COMMENTER=$(jq -r '.comment.user.login' "$GITHUB_EVENT_PATH")
COMMENT_BODY=$(jq -r '.comment.body // ""' "$GITHUB_EVENT_PATH")
TIMESTAMP=$(jq -r '.comment.created_at // empty' "$GITHUB_EVENT_PATH")

COLOR=15105570

TITLE=$(printf "💬 PR Comment\n[#%s] — “%s”" "$PR_NUMBER" "$PR_TITLE")
URL="$ISSUE_URL"

if [ -z "$COMMENT_BODY" ] || [ "$COMMENT_BODY" = "null" ]; then
COMMENT_BODY=""
fi

DESC=$(printf "Commenter: %s" "$COMMENTER")

if [ -n "$COMMENT_BODY" ]; then
DESC=$(printf "%s\n\n%s" "$DESC" "$(quote_block "$COMMENT_BODY")")
fi

DESC=$(truncate_chars "$DESC" 3800)

else
exit 0
fi

payload=$(jq -n \
--arg username "네키 디스코드 알림 봇" \
--arg avatar "https://i.ifh.cc/PbdkGM.jpg" \
--arg title "$TITLE" \
--arg url "$URL" \
--arg desc "$DESC" \
--arg ts "$TIMESTAMP" \
--argjson color "$COLOR" \
'{
username: $username,
avatar_url: $avatar,
embeds: [
{
title: $title,
url: $url,
description: $desc,
color: $color
}
]
}
| (if ($ts|length) > 0 then .embeds[0].timestamp = $ts else . end)
')

resp=$(curl -sS -X POST -H "Content-Type: application/json" -d "$payload" \
-w "\nHTTP_STATUS:%{http_code}\n" \
"$DISCORD_WEBHOOK_URL" || true)

echo "$resp"

status=$(echo "$resp" | sed -n 's/HTTP_STATUS://p')
if [ -z "$status" ] || [ "$status" -ge 400 ]; then
echo "Discord webhook failed"
exit 1
fi
68 changes: 58 additions & 10 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
import java.util.Properties
import kotlin.apply

plugins {
alias(libs.plugins.neki.android.application)
alias(libs.plugins.neki.android.application.compose)
alias(libs.plugins.oss.licenses)
}

val localPropertiesFile = project.rootProject.file("local.properties")
val properties = Properties().apply {
if (localPropertiesFile.exists()) {
load(localPropertiesFile.inputStream())
}
}

android {
Expand All @@ -8,25 +20,61 @@ android {
buildFeatures {
buildConfig = true
}

defaultConfig {
buildConfigField("String", "NAVER_MAP_CLIENT_ID", properties["NAVER_MAP_CLIENT_ID"].toString())
manifestPlaceholders["KAKAO_NATIVE_APP_KEY"] = buildConfigField(
"String",
"KAKAO_NATIVE_APP_KEY",
properties["KAKAO_NATIVE_APP_KEY"].toString()
)
}

signingConfigs {
create("release") {
storeFile = rootProject.file("neki_key_store.jks")
storePassword = properties["STORE_PASSWORD"].toString()
keyAlias = properties["KEY_ALIAS"].toString()
keyPassword = properties["KEY_PASSWORD"].toString()
}
}
buildTypes {
getByName("release") {
isMinifyEnabled = true
signingConfig = signingConfigs.getByName("release")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
}
}

}

dependencies {
implementation(projects.core.common)
implementation(projects.core.dataApi)
implementation(projects.core.data)
implementation(projects.core.domain)
implementation(projects.core.model)
implementation(projects.core.designsystem)
implementation(projects.feature.sample.impl)
implementation(projects.feature.sample.api)

implementation(projects.core.common)
implementation(projects.core.data)
implementation(projects.core.dataApi)
implementation(projects.core.designsystem)
implementation(projects.core.domain)
implementation(projects.core.model)
implementation(projects.core.navigation)
implementation(projects.core.ui)
implementation(projects.feature.auth.api)
implementation(projects.feature.auth.impl)
implementation(projects.feature.pose.api)
implementation(projects.feature.pose.impl)
implementation(projects.feature.archive.api)
implementation(projects.feature.archive.impl)
implementation(projects.feature.map.api)
implementation(projects.feature.map.impl)
implementation(projects.feature.mypage.api)
implementation(projects.feature.mypage.impl)
implementation(projects.feature.photoUpload.api)
implementation(projects.feature.photoUpload.impl)

implementation(libs.timber)

}
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.navigation3.ui)
}
Loading