-
Notifications
You must be signed in to change notification settings - Fork 1
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
build: develop-an 브랜치의 CI 설정 #3
Comments
1 task
1 task
2 tasks
hxeyexn
pushed a commit
that referenced
this issue
Jul 19, 2024
This was
unlinked from
pull requests
Jul 19, 2024
hxeyexn
added a commit
that referenced
this issue
Aug 23, 2024
* build: 프로젝트 생성 및 의존성 추가 * chore: 사용자 기능 및 권한 추가 * chore: gitignore 재설정 * chore: gitigonre .idea/ 추가 * build: develop-an 브랜치의 CI 설정 #3 (#10) * build: android-ci.yml 파일 생성 * chore: 오타 및 개행 수정 * chore: working-directory 수정 * build: ktLint 적용 및 format * ui: 디자인 시스템 구현 #11 (#44) * ui: color 정의 * ui: shape, selector 추가 * ui: icon 추가 * ui: font family 추가 - pretendard regular, medium, semibold, bold 추가 * ui: typography 정의 * ui: strings 정의 * ui: bottom sheet drag handle drawable 추가 * ui: styles 정의 * ui: detail toolbar 구현 - 상세 화면에서 사용 * ui: dialog, bottom sheet 구현 - 여행 및 방문 기록 삭제 dialog - 사진 등록 bottom sheet * ui: 사진 첨부 layout 구현 * feat: 삭제 다이얼로그, 사진 첨부 바텀 시트 fragment 추가 * ui: 세로모드로 고정 * build: data binding 의존성 추가 * style: strings resource 순서 정렬 * style: formatting * ui: plus icon 추가 * feat: jetpack navigation 및 바텀시트 프래그먼트 추가 #12 (#15) * build: androidx.navigation 및 dataBinding 의존성 추가 * feat: Binding 화면 클래스 및 bottomSheetNavigation 추가 * feat: TimelineFragment 임시 화면 추가 * feat: TravelFragment 임시 화면 추가 * feat: TravelCreationFragment 임시 화면 추가 * feat: VisitFragment 임시 화면 추가 * feat: VisitCreationFragment 임시 화면 추가 * feat: (여행, 방문 기록) 수정 화면 추가 * feat: (여행, 방문 기록) 생성 화면 이동 구현 * feat: BottomSheetController 설정 및 Navigation 이동 구현 * feat: 뒤로가기 버튼 클릭 시 BottomSheet, Toast 작동 구현 * feat: 여행, 방문 기록 생성을 위한 액티비티 추가 및 이동 구현 * feat: 여행, 방문 기록 수정을 위한 액티비티 추가 및 이동 구현 * build: 중복된 dataBinding 제거 * feat: 공통 이미지 로딩 BindingAdapter 설정 #33 (#41) * build: dataBinding 사용 설정 * feat: 이미지 로딩 바인딩 어댑터 설정 - Glide, Coil 바인딩 어댑터를 각각 작성 - placeholder 설정 * style: ktlint check - import 순서 조정 * fix: attribute 개수에 맞추어 BindingAdapter의 value 재설정 * style: 마지막 줄 개행 추가 * feat: placeHolder를 필수 속성으로 변경 및 coil 이미지 로딩 코드 수정 - placeHolder를 ImageView의 필수 속성으로 지정 - Coil BindingAdapter에서 url이 null인 경우에도 이미지를 로드하는 동작이 수행되도록 수정 * ui: 상단바 색상 변경 * build: develop-an의 CI 설정 수정 #38 (#39) - Git Action에 Secret으로 저장된 LOCAL_PROPERTIES_API_KEY를 변수로 가져온다. - 가져온 변수를 echo를 활용하여 local.properties에 설정한다. * build: develop-an 브랜치의 CI 파일 문법 오류 수정 #45 (#46) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * �fix: android-ci.yml 파일의 명령어 수정 #47 (#48) LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 * fix: develop-an 브랜치의 CI 파일 명령어 재수정 #47 (#49) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 --------- Co-authored-by: Somin Lee <[email protected]> * fix: 문자열 임을 명시하고 환경변수 설정 위치 조정 * fix: local.properties 생성 시점 수정 * feat: 데이터 패키지 설정 #13 (#35) * build: 서버 base url의 local.properties 사용 설정 및 BuildConfig 설정 * feat: Retrofit Client 작성 * fix: Merge Conflict 해결 - build.gradle.kts(project, app)의 ktlint 의존성 충돌 해결 - 버전 카탈로그 플러그인 충돌 해결 * feat: DTO 클래스 작성 * style: ktlint check - 불필요한 import 제거 - 개행 조정 - 콤마 추가 * feat: SerialName 어노테이션의 값을 camelCase로 수정 * refactor: DTO 클래스의 이름 수정 - API 요청으로 직접 보내거나 들어오는 JSON의 경우 DTO 클래스명 뒤에 Request/Response 를 붙이도록 설정 - JSON 안에 속성 값으로 들어가는 JSON은 DTO 클래스명 뒤에 Dto를 붙이도록 설정 * feat: 누락된 Dto 클래스 추가 TimelineResponse.kt - 타임라인 조회 시 여행 상세 목록을 불러올 때 사용되는 DTO 클래스 - TimelineTravelDto 리스트를 갖는다 * style: ktlint check * fix: const 키워드 제거 --------- Co-authored-by: hxeyexn <[email protected]> * feat: 둥근 모서리의 이미지를 로드하는 BindingAdapters 추가 #58 (#59) * feat: 둥근 모서리로 이미지를 로딩하는 Glide 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - glideRoundedCornerImageUrl: 출력하고자 하는 이미지 url - glidePlaceHolder: placeHolder의 url - glideRoundingRadius: 모서리의 둥근 정도를 Int로 설정 * feat: 둥근 모서리로 이미지를 로딩하는 Coil 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - coilRoundedCornerImageUrl: 출력하고자 하는 이미지 url - coilPlaceHolder: placeHolder의 url - coilRoundingRadius: 모서리의 둥근 정도를 Float으로 설정 * fix: centerCrop 설정을 BindingAdapter 에 위임 - xml 속성으로 centerCrop을 주게 되면 Round Corner가 제대로 적용되지 않는 현상 발생 - Glide의 api로 제공되는 centerCrop() 메서드를 활용 * ui: 타임라인 프래그먼트(BottomSheet) 구현 #55 (#71) * ui: 타임라인 View xml 파일 작성 - 타임라인에 나타날 여행 상세 아이템 xml 작성 - 썸네일 사진 유무에 따라 뷰를 구분 - 타임라인이 나타날 fragment xml 작성 * feat: 타임라인 여행 상세 아이템 UI 모델 생성 * ui: 썸네일이 없는 여행상세 아이템의 margin 조정 * ui: Timeline RecyclerView의 layoutManager 설정 * ui: xml에서의 UiModel 데이터 바인딩 설정 * feat: ViewHolder 작성 - 썸네일 사진 유무에 따라 다른 ViewHolder로 구분 - 공통된 속성을 정의한 TimelineViewHolder 추상클래스 생성 * feat: TimelineRepository Interface 생성 * feat: 임시 TimelineRepository 구현체 생성 * feat: TimelineViewModel 및 Factory 생성 * feat: TimelineViewType 작성 * feat: TimelineAdapter 작성 * feat: TimelineFragment에 ViewModel과 Adapter 구현 * feat: 이미지 로딩 PlaceHolder drawable 추가 및 적용 * feat: 임시 데이터 연결 * ui: Timeline fragment 의 세부 설정 조정 * ui: Timeline의 Item xml 변경 - 뷰 타입을 3개로 분할: 첫 번째 아이템, 중간 아이템, 마지막 아이템 - 이에 따라 xml 파일 추가 및 view 수정 * feat: ViewType 변경에 따른 Adapter 및 ViewHolder 수정 * refactor: 불필요한 View 및 ViewHolder 제거 * feat: 여행 click 에 대한 event handler 생성 및 설정 * refactor: drawable 이름을 네이밍 컨벤션에 맞게 수정 * ui: RecyclerView의 마진 속성을 패딩 속성으로 변경 * feat: 바텀 시트 디자인 변경 및 툴바와의 상호작용 구현 * ui: 타임라인 글귀 추가 * style: ktlint check * ui: 둥근 모서리의 이미지로 변경 * ui: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 구현 #52 (#74) * ui: typography.body textSize 1sp 씩 증가 * feat: DeleteDialogFragment에 Handler 추가 * feat: 툴바의 수정, 삭제 버튼 제어를 위한 ToolbarHandler 추가 * feat: 방문 상세 화면을 위한 VisitDetailUiModel 추가 * ui: PlaceHolder를 위한 xml 파일 추가 * feat: 방문 기록 상세 화면을 위한 VisitAdapter 및 VisitViewHolder 구현 * feat: 임시 VisitViewModel와 VisitViewModelFactory 추가 * feat: VisitFragment 화면 구현 * feat: 방문 기록에 해당하는 여행 선택을 위한 TravelSelectionFragment 구현 * feat: 방문 기록에 해당하는 날짜 선택을 위한 VisitedAtSelectionFragment 구현 * feat: 방문 기록 생성을 위한 VisitCreationActivity 구현 * feat: 방문 기록 수정을 위한 VisitUpdateActivity 구현 * refactor: DialogHandler를 DeleteDialogFragment의 생성자에서 받도록 수정 * refactor: initVisitUpdateDoneButton 중복 로직 제거 * refactor: VisitViewHolderType 메서드 명 변경 of -> from * refactor: tv_place_name_title을 xml id convention에 맞게 수정 * ui: 여행 화면 구현 #51 (#75) * ui: 함께 간 사람들 item 구현 * ui: 방문 기록 item 구현 * ui: 여행 상세 화면 구현 * ui: 여행 생성 화면 구현 * ui: 여행 수정 화면 구현 * ui: placeholder에 사용할 drawable 추가 * ui: 여행 삭제 완료 string 추가 * feat: 둥근 모서리 이미지 BindingAdapter 구현 * feat: 함께 간 사람들 adapter 구현 * ui: 여행 상세 화면 NestedScrollView로 변경 - 이전: ScrollView - 이후: NestedScrollView * feat: 방문 기록 adapter 구현 * feat: 여행 상세 view 연결 * feat: 함께 간 사람들, 방문 기록 adapter 연결 * feat: 삭제 다이얼로그 handler 구현 * feat: 여행 상세 화면 toolbar handler 구현 - 뒤로가기 - 여행 수정 화면으로 이동 - 삭제 다이얼로그 show * feat: 여행 -> 방문 기록 화면 이동 구현 * ui: DatePickerStyle 추가 - DatePickerStyle, CustomMaterialCalendarStyle 추가 - staccato_blue 투명도 30 추가 * feat: 여행 저장 버튼, 여행 기간 BindingAdapter 추가 * feat: 여행 생성 view 연결 * feat: 여행 수정 view 연결 * style: formatting - Exceeded max line length 해결 - 임시 이미지 URL 변경 * refactor: 기간 선택 로직 메서드 분리 * feat: 타임라인의 API 적용 및 MainActivity의 Toolbar 제거 #81 (#93) * refactor: UI Model의 패키지 경로 변경 * refactor: API 명세 변경에 따른 TimelineTravelDto 수정 * refactor: repository 메서드 수정 - 서버 요청을 비동기적으로 처리하기 위해 suspend 키워드 삽입 - 기존의 임시 데이터 요청 코드를 위해 load 메서드 분리 * feat: Timeline의 API Service 작성 * feat: DataSource 인터페이스 작성 * feat: TimelineDataSource 구현체 생성 * refactor: 년도에 대한 default parameter 설정 * refactor: DataSource의 요청 메서드 네이밍 수정 * feat: http 통신이 가능하도록 Cleartext Traffic 허용 설정 * feat: Authorization Header를 삽입하기 위한 Interceptor 생성 * feat: Client에 HeaderInterceptor 추가 * refactor: errorBody의 message 속성 이름 변경 * feat: 도메인 모델 작성 * feat: Response(dto)에서 도메인 모델로 변환하는 확장함수 구현 * feat: 도메인 모델에서 UI 모델로 변환하는 확장함수 구현 * feat: Repository 수정 및 ViewModel 데이터 연결 * ui: MainActivity의 상단 툴바 제거 * refactor: ViewType에 viewType 속성 추가 및 when에서의 enum 활용 * refactor: Timeline의 공통 ViewHolder를 sealed class로 변경 * style: ktlint check 수행 * fix: Response 데이터의 nullable 속성에 맞추어 DTO 수정 및 누락된 DTO 추가 * fix: 데이터가 비어있는 경우(초기)에만 새로운 여행상세 목록을 받도록 수정 * refactor: lazy 로 지연 초기화 및 timelineService가 하나의 인스턴스로 관리되도록 수정 * fix: Travel의 description에 nullable 속성 추가 API 명세서 잘 좀 보자 제발 * refactor: create 메서드를 private으로 변경 Client 클래스에서 Service를 create 하여 제공 및 캐싱하기 때문에, 불필요한 인스턴스를 생성하지 않도록 create를 public으로 두지 않는 것이 좋다. * refactor: LocalDateConverters의 패키지 경로 수정 * refactor: 파일의 이름 수정 * style: ktlint check * refactor: 에러 메시지 상수화 * feat: 특정 여행 상세 조회 api 연결 #82 (#97) * feat: 특정 여행 상세 조회 api service 구현 * feat: 썸네일, 소개 타입 변경 및 기본 인자 설정 - 변경 data class : TravelResponse, TravelUiModel - 이전: String - 이후: String? * refactor: MatesUiModel 네이밍 변경 MatesUiModel이 공통적으로 사용될 예정이므로 MemberUiModel로 변경 - 이전: MatesUiModel - 이후: MemberUiModel * refactor: VisitUiModel 네이밍 변경 - 여행 상세 방문 기록에 사용되는 UiModel 이름을 명시적으로 변경 - 이전: VisitUiModel - 이후: TravelVisitUiModel * feat: 특정 여행 상세 조회에 사용할 domain model 추가 * feat: Api 응답 핸들링 로직 구현 * feat: 특정 여행 상세 조회 data source 구현 * feat: 특정 여행 상세 조회 repository 구현 * feat: 특정 여행 상세 조회 api 연결 * feat: 특정 여행 상세 조회 로직 매개변수 추가 - 타임라인에서 선택된 여행 id를 매개변수로 받도록 변경 * refactor: ApiResponseHandler 이름 오타 수정 * refactor: 에러 메세지 상수화 * feat: 특정 여행 상세 조회 시그니처 변경 - HeaderInterceptor 적용으로 authorization 매개변수 제거 * style: formatting * feat: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 API 연결 #79 (#99) * feat: VisitApiService 인터페이스 및 관련 data class 추가 * feat: VisitRepository, RemoteVisitDataSource 및 관련 class 추가 * feat: 각 Visit 화면들의 ViewModelFactory 구현 * feat: 각 Visit 화면들의 UiModel 클래스 및 Mapper 추가 * feat: 여행 선택 및 방문 날짜 선택을 위한 BottomSheetDialogFragment 수정 * feat: VisitFragment API 연결 * feat: VisitCreationActivity API 연결 * feat: VisitUpdateActivity API 연결 준비 * refactor: visitApiService를 StaccatoClient object로 이동 * refactor: TravelVisit 클래스의 visitImage 변수 nullable하게 수정 * refactor: VisitApiService의 중복된 @Header 제거 * refactor: 방문 생성 성공 시 created id를 가져오도록 리팩터링 * chore: 변수명 visitImage로 수정 및 ktLint 적용 * refactor: 여행 수정 완료 동작 구현 및 VisitUpdateActivity 함수 분리 * feat: 여행 생성 api 연결 #98 (#104) * feat: 여행 생성 api service 구현 * feat: 여행 생성 data source 구현 * feat: 방문 기록 썸네일 타입 변경 및 기본 인자 설정 - 변경 data class : TravelVisitDto, TravelVisit, TravelVisitUiModel - 이전: String - 이후: String? * build: converter scalars 의존성 추가 * feat: 여행 생성 ApiService 반환값 및 DataSource 시그니처 변경 - 여행 생성 ApiService 반환값 변경 - DataSource 시그니처 변경 - TravelCreation DomainModel 구현 - TravelCreation Dto 변환 Mapper 구현 * feat: Client에 ScalarsConvert 추가 - Header 값을 읽어오기 위해 ScalarsConvert 추가 * feat: 여행 생성 repository 구현 * feat: 여행 생성 api 연결 * feat: TravelViewModel 생성자 변경 - 이전: travelId를 TravelViewModel 생성자로 넣어줌 - 이후: travelId를 loadTravel()의 매개변수로 넣어줌 * ui: map 화면 변경 * refactor: 컨벤션 통일 및 패키지 정리 #112 (#118) * refactor: bind 네임스페이스 적용 * refactor: BindingAdapters 메서드명 변경 * refactor: 컨벤션 맞게 xml 파일 이름 변경 * refactor: data 패키지 구조 정리 * refactor: RemoteVisitDataSource 컨벤션 따라 네이밍 변경 * refactor: 네트워킹 관련 메서드 이름 변경 - api service, data source, repository * refactor: presentation 패키지 구조 정리 * refactor: message utils 생성 및 적용 Co-authored-by: s6m1n <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * build: develop-an의 CI 테스트 자동화 추가 및 데모 APK 추출 #78 (#92) * build: test 자동화 Job 추가 * build: local.properties 생성 시점 변경 * build: 디버그 APK를 빌드하여 업로드하는 workflow 작성 * fix: test Job과 APK build Job에 local.properties 생성 동작 추가 * build: read 전용 권한 제거 * build: Firebase Analytics, Crashlytics 설정 #136 (#143) * build: Firebase Analytics, Crashlytics 의존성 추가 * chore: google-service.json ignore * feat: 특정 여행 상세 수정 api 연결 #109 (#146) * feat: 여행 수정 api service 구현 * feat: 여행 수정 data source 구현 * feat: 여행 수정 repository 구현 * feat: 여행 수정 화면 현재 데이터 로딩 기능 구현 * refactor: 컨벤션 따라 여행 api service의 수정 메서드명 변경 - 이전: updateTravel - 이후: putTravel * feat: 특정 여행 상세 수정 api 연결 * refactor: memberImage 타입 변경 및 기본 인자 설정 * refactor: MembersDto 삭제 * refactor: TravelCreationUiModel.kt 삭제 * refactor: TravelCreation 이름 변경 - 이전: TravelCreation - 이후: NewTravel * refactor: api 명세서 변경에 따른 도메인 모델 수정 및 여행 코드 리팩터링 #151 (#152) * refactor: nickName 변수명 변경 - 이전: nickName - 이후: nickname * ui: 여행 수정 화면 이미지 속성 수정 - glide -> coil 이용 - scaleType : fitXY -> centerCrop * style: import 정렬 * feat: 여행 상세 -> 방문 상세로 이동 시 여행 id 전달 * feat: 방문기록 조회 dto 수정 - 방문기록 조회 도메인 변경으로 인해 방문 기록이 조회되지 않음 - 따라서 api 명세서와 일치하도록 dto 수정하여 오류 해결 * refactor: 여행 생성을 위한 viewModel 메서드 분리 * refactor: 여행 조회를 위한 viewModel 메서드 분리 * feat: 여행 수정 handler 구현 * refactor: 여행 default id 변경 - 이전: -1L - 이후: 0L * refactor: TravelHandler 구현 위치 변경 - 이전: TravelViewModel - 이후: TravelFragment * style: 컨벤션에 맞게 TravelFragment의 메서드 순서 수정 * refactor: TravelFragment의 travelId 초기화 방식 변경 * feat: 여행 생성 및 수정 error toast 구현 * feat: 방문 생성 화면, 방문 수정 화면에서 갤러리 사진 불러오기 구현 #150 (#155) * feat: PhotoAttachFragment에 PhotoAttachHandler 연결 * feat: PhotoAttachFragment 앨범 접근 권한 관련 로직 구현 - API level 33 이상 : READ_MEDIA_IMAGES - API level 33 이하 : READ_EXTERNAL_STORAGE - ActivityResultLauncher를 이용한 권한 요청 - 권한 거부 시, 설정으로 이동하는 스낵바 띄우기 * feat: PhotoAttachFragment 앨범에서 불러온 이미지의 URI 추출하기 * feat: 불러온 이미지의 URI를 호스트 Activity로 전달 - OnUrisSelectedListener 인터페이스 추가 * feat: Uri를 File로 변환하는 메서드 파일 추가 * refactor: pr 리뷰 반영 * refactor: pr 리뷰 반영2 * build: develop-an의 android-ci 수정 #115 (#160) - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: android-ci 환경변수 생성 위치 조정 (#164) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * build: bash 쉘에 맞는 명령어 활용 #115 (#165) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * fix: bash 쉘에 적합한 명령어 형식으로 변경 * feat: 특정 여행 상세 삭제 api 연결 #153 (#167) * feat: 특정 여행 삭제 api service 구현 * feat: 특정 여행 삭제 data source 구현 * feat: 특정 여행 삭제 repository 구현 * feat: 특정 여행 삭제 기능 api 연결 * feat: error handling 방식 수정 - 서버에서 들어오는 error body의 status와 message를 활용하는 방식으로 변경 * refactor: DialogHandler를 독립적으로 관리 * refactor: api path 상수 활용 * refactor: BuildConfig에 token 정의 * refactor: DEFAULT_VALUE 상수 제거 * feat: 여행 생성 기능 api 수정 #169 (#178) * feat: onUrisSelected 매개변수 가변인자로 변경 * feat: 여행 생성 화면 갤러리 이미지 로딩 기능 구현 * refactor: 이미지 선택 리스너 초기화 메서드명 오타 수정 * refactor: 스낵바 액션 설정 코드 간소화 * feat: TravelRequest 의 여행 썸네일 필드 제거 * refactor: 여행 썸네일 이미지 변수명 수정 * feat: 이미지 전송 기능 구현 * refactor: image url 변수명 변경 - 변수 끝에 url이 오도록 * feat: 여행 생성 progressBar 구현 * ui: 사진 첨부 아이콘 가시성 설정 * feat: 여행 상세 수정 기능 api 변경 및 여행 리팩터링 #180 (#181) * feat: 여행 수정 화면 갤러리 이미지 로딩 기능 구현 * feat: URL 및 URI 기반 이미지 로딩 BindingAdapter 구현 * feat: 이미지 전송 기능 구현 * feat: 여행 수정 progressBar 구현 * fix: 삭제 불가능한 여행 삭제 시도 관련 에러 토스트 문제 해결 삭제 불가능한 여행을 삭제하려고 시도 -> 방문 조회 -> 뒤로 가기 버튼 클릭 -> 삭제 불가능 에러 토스트가 다시 뜨는 문제가 발생해 이를 해결 * refactor: TravelCreationViewModel의 imageUrl 변수 제거 * ui: 여행 상세 내 방문 기록 이미지 scaleType 속성 설정 * ui: 여행 생성 썸네일 이미지 scaleType 속성 설정 * fix: 여행 소개 미입력 시 여행이 생성 되지 않는 오류 해결 * refactor: 타임라인 화면 리팩터링 #162 (#179) * ui: 타임라인 RecyclerView의 크기 조정 및 여백 수정 * feat: Activity와 Fragment 간 데이터를 공유하는 공유 ViewModel 생성 * feat: 공유 ViewModel을 이용하여 타임라인 업데이트 여부를 공유 * refactor: RecyclerView.Adapter에서 ListAdapter로 변환 * refactor: 처음 타임라인을 불러오는 동작을 ViewModel 초기화 시에 수행 * fix: ListAdapter 수정 - 불필요한 travels 프로퍼티와 getItemCounts 메서드 제거 - currentList를 사용하는 것으로 변경 * refactor: 에러 핸들링 방식 수정 및 ViewModel 수정 - TimelineDefaultRepository로 네이밍 변경 - ApiResponseHandler와 ResponseResult를 이용하여 에러 핸들링 처리 - TimelineViewModel 에러 메시지 LiveData 사용 - 그 외 repository, dataSource 프로퍼티 이름 수정하여 통일 * refactor: MutableLiveData의 값 업데이트를 setValue로 변경 및 메서드 분리 * style: ktlint 적용 * feat: 3차 스프린트에서 수정된 방문 기록 상세 API 연결 #163 (#183) * feat: 방문 상세 생성 API 연결 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 방문 기록 생성 및 수정 시 로딩과 토스트 추가 * feat: 닉네임을 활용한 로그인 기능 구현 #124 (#172) * ui: 로그인 화면 구성 - 로그인 화면에서 사용되는 텍스트를 strings에 추가 - 로그인 버튼 스타일에 대한 style 생성 - xml 임시로 작성 * ui: 앱 로고 삽입 및 margin 조정 - 임시 로고 이미지 저장 - 로고 크기 및 마진 조정 * feat: 로그인 API Service 작성 및 Retrofit 객체 생성 * feat: 로그인 DataSource 작성 * feat: 로그인 Repository 생성 * feat: 사용자 정보를 저장하는 SharedPreferences Manager 생성 - 토큰 값 불러오기 및 저장 - 추후 사용자 닉네임, 사용자 프로필 이미지 등의 정보 저장 가능 * feat: Application 생성 및 사용자 정보 Preferences Manager 캐싱 * ui: Splash Screen 화면 구성을 위한 테마 생성 * feat: Preferences 로부터 사용자 토큰 값을 가져와 헤더에 추가하도록 변경 * refactor: Repository 네이밍 통일 * refactor: DataSource 기본 인자 추가 * feat: LoginViewModel 및 Handler 작성 * feat: LoginViewModel 을 생성하는 ViewModel Factory 작성 * feat: LoginActivity 작성 및 양방향 데이터 바인딩 적용 * feat: StaccatoApplication과 LoginActivity 설정 및 LoginActivity를 시작 화면으로 변경 * style: 불필요한 namespace 제거 및 lint 확인 * refactor: LoginViewModel과 Factory를 viewmodel 패키지로 분리 * refactor: TimelineViewModel과 Factory를 viewmodel 패키지로 분리 * style: ktlint 적용 * fix: 불필요한 ConverterFactory 제거 - 더 이상 사용하지 않는 text/plain 변환용 ScalarsConverterFactory 제거 * feat: 닉네임 로그인 요청 및 응답에 대한 DTO 작성 * refactor: 로그인 요청, 응답 시 DTO 활용 * fix: 토큰 값을 불러오고 및 저장하는 동작의 비동기 처리 및 화면 전환 개선 * refactor: 토큰 값을 캐싱하여 저장하는 TokenManager 생성 및 적용 - 매번 runBlocking을 통해 Preference에 저장된 토큰 값을 불러오는 것은 네트워크 성능을 저하시킨다. - 따라서, token 값을 캐싱하여 저장하는 TokenManager를 활용한다. - 첫 네트워크 요청 시에만 토큰을 불러오는 작업을 동기적으로 처리하기 위해 Main Thread가 Blocking 된다. - TokenManager가 Preference로부터 가져온 토큰을 캐싱하여 저장한다. - 이후 요청부터는 캐시된 토큰을 가져오므로 Main Thread가 Blocking 되지 않는다. * style: ktlint 적용 * feat: Night 모드 비활성화 * refactor: 여행 기간 날짜 형식 변환을 BindingAdapter에서 수행 - TimelineTravelUiModel 프로퍼티 수정 - UiModel의 여행기간 날짜를 LocalDate로 갖도록 통일 - 추후 날짜 관련 UI가 변경되었을 때 확장성 고려 - BindingAdapters에 날짜 형식 변환해주는 메서드 작성 * chore: 주석 처리된 Log 코드 삭제 * style: xml View의 ID 네이밍 컨벤션 적용 * ui: 앱 심볼 로고 추가 및 스플래시 스크린에 적용 * feat: 방문 상세 생성 API 연결 * ui: 배경 색을 흰 색으로 지정 * feat: 키보드 활성화 상태에서 화면 터치 시 키보드를 내리는 기능 추가 * style: ktlint 적용 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * fix: merge 과정에서 발생한 id값 네이밍 충돌 해결 * build: 앱 version code와 version name 수정 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 스플래시 스크린 시간 조정 및 데모 시연용 토큰 활성화 * fix: 동일한 사진이 여러 장 업로드되는 버그 수정 * feat: 기존 로그인 기능으로 롤백 --------- Co-authored-by: somin <[email protected]> * fix: 테스트 배포를 위한 버그 수정 #198 (#219) * style: formatting * fix: 무한 로딩 오류 수정 * fix: 여행 생성 오류 수정 * add: 앱 아이콘 변경 * ui: timeline empty view 추가 * feat: timeline empty view 가시성 설정 * ui: 여행 내 방문 기록 empty view 추가 및 가시성 설정 * ui: 방문 기록 내 로그 미지원 기능 view 추가 * feat: 사진 첨부 카메라 미지원 기능 알림 추가 * ui: 필수값 표기 style 정의 * ui: 여행 생성 및 수정 필수값 표기 추가 * ui: 방문 기록 생성 및 수정 필수값 표기 추가 * feat: 생성, 수정, 로그인 시 다중 요청 전송을 막기 위한 화면 터치 제한 * feat: 장소 생성의 사진 첨부 리사이클러뷰 구현 - 사진 추가 & 삭제 구현 - GridLayout으로 변경 - 사진 중복 없이 최대 5장으로 제한 - 새로 추가된 사진이 기존 사진 뒤에 더해지도록 구현 * chore: 방문 생성 화면 rv_photo_attach로 xml id 수정 * ui: app icon 및 splash icon 변경 * refactor: xml ID 네이밍 컨벤션 적용 --------- Co-authored-by: somin <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * �refactor: 도메인명 변경에 따라 travel을 memory로 수정 #217 (#231) * refactor: 패키지명 travel -> memory로 수정 * refactor: dto의 TravelMapper 를 MemoryMapper 로 네이밍 변경 * refactor: 여행(현 추억) 생성 response dto 네이밍 변경 - TravelCreationResponse -> MemoryCreationResponse * refactor: 여행(현 추억) request dto 네이밍 변경 - TravelRequest -> MemoryRequest * refactor: 여행(현 추억) 조회 response dto 네이밍 변경 - TravelResponse -> MemoryResponse * refactor: 여행(현 추억) 수정 request dto 네이밍 변경 - TravelUpdateRequest -> MemoryUpdateRequest * refactor: 여행(현 추억) 내 방문 dto 네이밍 변경 - TravelVisitDto -> MemoryVisitDto * refactor: 타임라인 여행(현 추억) item의 dto 네이밍 변경 - TimelineTravelDto -> TimelineMemoryDto * refactor: 여행(현 추억) ApiService 네이밍 변경 - TravelApiService -> MemoryApiService * refactor: 여행(현 추억) DataSource 네이밍 변경 - TravelDataSource -> MemoryDataSource - TravelRemoteDataSource -> MemoryRemoteDataSource * refactor: 여행(현 추억) Repository 네이밍 변경 - TravelRepository -> MemoryRepository - TravelDefaultRepository -> MemoryDefaultRepository * style: TimelineMapper import 재정렬 * refactor: NewTravel 도메인명을 NewMemory로 변경 * refactor: Travel 도메인명을 Memory로 변경 * refactor: TravelVisit 도메인명을 MemoryVisit으로 변경 * refactor: presentation의 TravelMapper 명 변경 - TravelMapper -> MemoryMapper * refactor: 여행(현 추억) ui 모델명 변경 - TravelUiModel -> MemoryUiModel - TravelVisitUiModel -> MemoryVisitUiModel * refactor: 여행(현 추억) view model 명 변경 - TravelViewModel -> MemoryViewModel - TravelViewModelFactory -> MemoryViewModelFactory * refactor: MemoryApiService의 Path 변경 - travel을 memory로 변경 - travels을 memories로 변경 * refactor: Memory 관련 dto 변수명 변경 - travel을 memory로 변경 * refactor: Timeline Dto의 Memory 관련 변수명 변경 - travel을 memory로 변경 - travels를 memories로 변경 * refactor: Memory 관련 도메인 모델의 변수명 변경 - travel을 memory로 변경 * refactor: Memory 관련 ui 모델의 변수명 변경 - travel을 memory로 변경 * refactor: data layer의 Memory 관련 함수 및 변수명 변경 - travel을 memory로 변경 * refactor: 방문 생성 request dto의 travelId 변수명 변경 - travelId -> memoryId * refactor: 여행(현 추억) 조회 view model 및 fragment의 네이밍 변경 - travel -> memory * refactor: fragment_travel 의 리소스 네이밍 변경 - travel -> memory - strings.xml의 리소스명 변경 * refactor: TravelCreationActivity 네이밍 변경 - TravelCreationActivity -> MemoryCreationActivity * refactor: 여행(현 추억) 생성의 ViewModel 관련 네이밍 변경 - TravelCreationViewModel -> MemoryCreationViewModel - TravelCreationViewModelFactory -> MemoryCreationViewModelFactory - 관련 함수 및 변수명 변경 - travel -> memory * refactor: 여행(현 추억) 생성, 수정에 관한 xml 리소스 명 변경 - travel -> memory - strings.xml 의 관련 리소스 수정 * refactor: 여행(현 추억) 수정 Activity, Handler 의 네이밍 변경 - travel -> memory * refactor: 여행(현 추억) 수정 ViewModel 의 네이밍 변경 - 관련 함수 및 변수 명 변경 - travel -> memory - Factory 클래스명 변경 * refactor: 여행(현 추억) 생성, 수정에서의 파일 변환 메서드명 변경 - travel -> memory - 자식 파일 명 상수화 * refactor: Timeline 의 UI 모델 및 Travel ID Key 의 리네이밍 - travel -> memory 로 일괄 변경 * refactor: presentation/timeline 내 travel 도메인명 변경 - travel -> memory - TimelineMapper 내 domain model -> ui model 변환 메서드명 변경 * refactor: dto/MemoryMapper 내 domain 변환 메서드명 변경 - dto/MemoryMapper 내 domain model을 dto로 변환하는 메서드명 변경 - travel -> memory * refactor: dummyTravel 을 dummyMemory 로 변경 * refactor: MainActivity 내 travel을 memory로 변경 * refactor: activity_main 내 travel을 memory로 변경 * refactor: TimeLineApiService 내 GET 메서드 path 수정 - travels -> memories * refactor: MemoryFragment 내 travel 을 memory 로 변경 - MemoryFragment, fragment_memory 내 travel 을 memory 로 변경 * refactor: MemoryViewModel 내 error message 변수명 변경 - TRAVEL_ERROR_MESSAGE -> MEMORY_ERROR_MESSAGE * refactor: navigation graph 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 extra 키 값 수정 - TRAVEL_ID_KEY -> MEMORY_ID_KEY - TRAVEL_TITLE_KEY -> MEMORY_TITLE_KEY * refactor: VisitFragment 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 travel을 memory로 변경 * refactor: VisitUpdateViewModel 내 travel을 memory로 변경 * refactor: VisitTravelUiModel을 VisitMemoryUiModel로 변경 * refactor: 방문 수정 xml의 travel을 memory로 변경 * refactor: 여행(현 추억) 선택 xml 내 travel을 memory로 변경 * refactor: 여행 선택 바텀 시트 내 travel을 memory로 변경 - TravelSelectionFragment -> MemorySelectionFragment 로 수정 - TravelSelectionHandler -> MemorySelectionHandler 로 수정 - TravelSelectionFragment 내 메서드명 수정 - TravelSelectionHandler 내 매개변수명 수정 * refactor: VisitRepository와 구현체의 메서드 내 매개변수명 통일 * refactor: VisitsViewHolder 내 travel을 memory로 변경 * refactor: VisitCreationActivity 내 travel을 memory로 변경 * refactor: VisitCreationViewModel 내 travel을 memory로 변경 * refactor: 방문 생성 xml 내 travel을 memory로 변경 * refactor: BindingAdapters 내 travel을 memory로 변경 * refactor: strings 내 travel을 memory로 변경 - strings 내 '여행'을 '추억'으로 수정 Co-authored-by: Junyoung-WON <[email protected]> Co-authored-by: s6m1n <[email protected]> * refactor: visit, visit log 도메인명 수정 #218 (#237) * refactor: VisitApiService 내 visit을 moment 로 변경 - 파일명 수정 - path 수정 - 메서드명 수정 - 매개변수명 수정 * refactor: data/visit 패키지명을 moment로 변경 * refactor: data/dto/visit 패키지명을 moment로 변경 * refactor: VisitCreationRequest 네이밍 변경 - 이전: VisitCreationRequest - 이후: MomentCreationRequest * style: StaccatoClient import 재정렬 * refactor: VisitCreationResponse 네이밍 변경 - 이전: VisitCreationResponse - 이후: MomentCreationResponse - 필드명 변경 : visitId -> momentId * refactor: VisitResponse 네이밍 변경 - 이전: VisitResponse - 이후: MomentResponse - VisitResponse 필드 내 visit을 moment로 변경 - VisitResponse 필드 내 visitLogs SerialName을 comments로 변경 * refactor: VisitUpdateRequest 네이밍 변경 - 이전: VisitUpdateRequest - 이후: MomentUpdateRequest - VisitUpdateRequest 필드 내 visit을 moment로 변경 * refactor: VisitLogDto 내 SerialName 변경 - visitLogId를 commentId로 변경 * refactor: MemoryResponse 내 visits SerialName 변경 - visits를 moments로 변경 * refactor: VisitCreationViewModel 내 FORM_DATA_NAME 변경 - 이전: visitImageFiles - 이후: momentImageFiles * refactor: MemoryVisitDto 내 visit를 moment로 변경 - MemoryVisitDto -> MemoryMomentDto로 변경 - visitId -> momentId로 변경 - visitImageUrl -> momentImageUrl로 변경 * refactor: VisitRemoteDataSource 내 visit을 moment로 변경 - VisitRemoteDataSource -> MomentRemoteDataSource로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: MomentRepository 및 구현체 내 visit을 moment로 변경 - VisitRepository -> MomentRepository로 변경 - VisitDefaultRepository -> MomentDefaultRepository로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: Visit 도메인 모델명 및 변수명 변경 - Visit -> Moment로 변경 - visitLogs -> comments로 변경 * refactor: Memory 도에인 모델의 visits을 moments로 변경 * refactor: MemoryVisit 도메인 모델 내 visit을 moment로 변경 * refactor: MemoryResponse의 visits 필드명을 moments로 변경 * refactor: dto/mapper/VisitMapper를 MomentMapper로 변경 * refactor: presentation/visit 패키지명을 moment로 변경 * refactor: VisitViewHolderType 네이밍 변경 - VisitViewHolderType -> MomentViewHolderType - enum 상수명 변경 - VISIT_DEFAULT -> MOMENT_DEFAULT - MY_VISIT_LOG -> MY_COMMENTS * refactor: VisitViewHolder 네이밍 변경 - VisitViewHolder -> MomentViewHolder - VisitDefaultViewHolder -> MomentDefaultViewHolder - MyVisitLogViewHolder -> MyCommentViewHolder * refactor: VisitAdapter 내 visit을 moment로 변경 - VisitAdapter -> MomentAdapter 로 변경 - visit -> moment 로 변경 * refactor: MomentAdapter 내 visit log를 comments로 변경 * refactor: VisitDetailUiModel 내 visit을 moment로 변경 - VisitDetailUiModel -> MomentDetailUiModel - VisitDefaultUiModel -> MomentDefaultUiModel - visitImageUrls -> momentImageUrls * refactor: VisitLogUiModel을 CommentsUiModel로 변경 * refactor: VISIT_ID_KEY extra key id 네이밍 변경 - VISIT_ID_KEY -> MOMENT_ID_KEY * refactor: VisitFragment 내 visit을 moment로 변경 * refactor: VisitViewModel 내 visit을 moment로 변경 - VisitViewModel -> MomentViewModel로 변경 - VisitViewModelFactory -> MomentViewModelFactory로 변경 * refactor: VisitMemoryUiModel 네이밍 변경 - VisitMemoryUiModel -> MomentMemoryUiModel로 변경 * refactor: presentation/visitcreation 패키지명 momentcreation으로 변경 * refactor: VisitCreationActivity 내 visit을 moment로 변경 - VisitCreationActivity -> MomentCreationActivity로 변경 * refactor: VisitCreationHandler 네이밍 변경 - VisitCreationHandler -> MomentCreationHandler로 변경 * refactor: VisitCreationViewModel 내 visit을 moment로 변경 - VisitCreationViewModel -> MomentCreationViewModel로 변경 - 메서드 및 변수명 변경 * refactor: 여행 -> 추억, 방문 기록 -> 스타카토로 도메인명 변경 * feat: s3 api 연결 #239 (#241) * feat: ImageResponse, ImageApiService 구현 * feat: ImageRepository 및 구현체 구현 Co-authored-by: s6m1n <[email protected]> * fix: 추억 기능 버그 수정 #246 (#252) * fix: 일부 EditText 개행 불가 처리 및 키보드 숨김 처리 #247 (#249) * ui: 닉네임과 추억 생성, 수정 제목 입력 시 줄바꿈 제한 * fix: 키보드 활성화 상태에서 빈 화면 터치로 키보드 숨김 처리 - 메서드 명 변경: setHideKeyboardAction -> setHidingKeyboardAction * style: 클래스 내 override 메서드의 순서 변경 - 팀 코드 컨벤션에 맞게 순서 재정렬 - override 메서드를 상단에 둔다. * style: ktlint 적용 * fix: root뷰 터치 시 클릭 이벤트가 발생하지 않는 오류 수정 - 원인 분석: ConstraintLayout 내부 Toolbar 및 ScrollView, 그리고 그 자식 View들이 클릭 이벤트를 가로채기 때문에, 바인딩 된 최상단 root 뷰인 ConstraintLayout의 클릭 이벤트가 동작하지 않는다. - 해결 방법: 여러 클릭 이벤트를 가로채는 dispatchTouchEvent 메서드를 오버라이드하여, 터치된 부분이 현재 포커스가 되지 않은 View(키보드 바깥 화면) 범위라면, 키보드를 숨기는 동작을 추가하였다. * refactor: 키보드 숨김 동작을 handler 바인딩으로 적용 - LoginHandler 에 화면 터치에 대한 동작을 추가, 화면 터치 시 키보드를 숨김 처리하는 동작을 바인딩으로 설정 - InputMethodManager 인스턴스를 지연초기화하여 저장 * refactor: InputMethodManager 인스턴스를 lazy로 지연 초기화 * fix: 닉네임, 제목 입력 칸의 키보드 액션 버튼 변경 - 키보드의 액션 타입을 Search에서 Done으로 변경 * style: ktlint 적용 * refactor: 타임라인 리팩터링 #232 (#263) * refactor: TimelineViewModelFactory의 생성자 파라미터 추가 - 내부 프로퍼티에 속해있던 TimelineRepository를 생성자 프로퍼티로 변경 * fix: 추억 목록 아이템이 하나일 때의 View 수정 - 아이템 개수가 하나일 때는 타임라인의 선이 나타나지 않도록 변경 * chore: 코루틴 예외 처리 로그에context 출력 * refactor: 메서드 분리 및 순서 재정렬 - 코드 컨벤션: override 메서드는 상단에 위치한다 * refactor: TimelineViewModel 생성 팩토리 메서드 활용 * style: ktlint 적용 * ui: 화면 전환에 사용될 twin animation 효과 생성 * ui: animation 효과 활용하여 화면 전환 애니메이션 적용 * ui: Main 화면의 배경 색을 하얀색(#FFFFFF)으로 지정 * style: ktlint 적용 * feat: 기분 선택 기능 구현 및 스타카토 조회 화면 구조 변경 #191 (#289) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * style: ktlint 적용 * feat: 추억 API 변경사항 반영 및 리팩터링 #259 (#265) * ui: 추억 생성 화면 사진 로드 시 coil 라이브러리 사용 * ui: 삭제 버튼 아이콘 추가 * ui: 추억 생성 화면 사진 삭제 버튼 추가 * feat: 추억 생성 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 생성 화면 사진 삭제 구현 * feat: 추억 수정 화면 사진 첨부 icon 가시성 설정 * ui: 추억 수정 화면 사진 삭제 버튼 추가 * feat: 추억 수정 화면 사진 삭제 버튼 가시성 설정 * feat: 추억 수정 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 수정 화면 사진 삭제 구현 * fix: 추억 생성 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * fix: 추억 수정 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * feat: MemoryRequest dto에 썸네일 사진 url 필드 추가 * feat: 추억 생성 메서드의 시그니처 변경 - MemoryApiService 내 추억 생성 메서드의 시그니처 변경 - 위 변경에 따른 DataSource, Repository, ViewModel의 추억 생성 관련 메서드 시그니처 변경 * feat: 추억 생성 view model 주 생성자로 ImageRepository 주입 * feat: 추억 생성 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 생성 화면) - 추억 생성 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 생성 시 썸네일 사진 url 추가 * refactor: MemoryRequest의 추억 썸네일 사진 기본 인자 값 null로 설정 * feat: 추억 수정 메서드의 시그니처 변경 * feat: 추억 수정 view model 주 생성자로 ImageRepository 주입 * feat: 추억 수정 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 수정 화면) - 추억 수정 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 수정 시 썸네일 사진 url 추가 * refactor: 불필요한 MemoryUpdateRequest 제거 * ui: empty view 캐릭터 이미지 추가 * ui: 추억 설명글 유무에 따른 가시성 설정 * ui: 함께 한 사람들 가시성 gone 으로 설정 - 4차 스프린트 범위에서 제외됨 * feat: 이미지 선택 옵션 추가 (단일 선택 및 다중 선택 지원) * ui: TextInputLayout, TextInputEditText Style 정의 * ui: 추억 생성 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 수정 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 조회 화면 썸네일 사진 유무에 따른 가시성 설정 * ui: empty view 캐릭터 이미지 크기 변경 * ui: 앱 이름 Staccato_AN -> Staccato 로 수정 * refactor: 추억 생성 및 수정 화면 메서드 순서 정리 * ui: 제목용 TextInputEditTextStyle 정의 및 적용 * ui: 추억 생성 및 수정 화면 썸네일 coilPlaceHolder 변경 - 이전: shape_place_holder_rectangle - 이후: shape_all_gray1_8dp * refactor: 삭제 다이얼로그 show 메서드 호출 방식 변경 - apply를 사용하지 않는 방식으로 변경 * ui: 코멘트 미지원 안내 view 추가 * feat: 스타카토 생성, 수정 화면 사진 및 완료 버튼 개선 #242 (#291) * feat: (스타카토 생성 화면) 사진 드래그로 순서 변경 기능 구현 * refactor: data 패키지에 S3 이미지 API 분리 적용 * refactor: AttachedPhotoUiModel 및 프로그래스바 추가 * feat: recyclerView에서 지워진 사진의 job cancel 처리 * refactor: editText를 TextInputLayout로 수정 * feat: (스타카토 수정 화면) 사진 드래그로 순서 변경 / 로딩 구현 * refactor: 프로퍼티 네임 변경 및 visitedAt LocalDateTime으로 수정 * style: ktlint 적용 * build: 구글 맵 API 사용에 따른 CI 수정 #296 (#297) * build: 구글 맵 api key를 저장하는 파일을 설정하는 명령어 작성 * refactor: defaults 에 설정된 shell 설정에 따라 추가적인 shell 설정 삭제 * feat: Google Map 연결, 스타카토 목록 조회 API 연결 #54 (#295) * build: google map 의존성 추가 * build: 구글맵 관련 properties ignore 추가 * build: 구글맵 api key 설정 * feat: Google Map 연결 * feat: MainActivity Handler 구현 * ui: 추억 및 스타카토 생성 메뉴 추가 * ui: popup menu style 정의 * feat: 추억 생성 및 수정 menu 연결 - handler 연결 - 메서드 분리 * feat: 위치 권한 요청 구현 - ACCESS_FINE_LOCATION 권한 요청 - ACCESS_COARSE_LOCATION 권한 요청 * feat: 현 위치 표시 * style: MainActivity formatting * feat: locationPermissions 타입 변경 - 이전: List<String> - 이후: Array<String> * feat: MomentLocationDto, MomentLocationResponse 추가 * feat: 스타카토 목록 조회 api service 구현 * feat: 스타카토 목록 조회 data source 구현 * feat: MomentLocation 도메인 모델 구현 * feat: MomentLocationDto를 도메인 모델로 변환하는 mapper 구현 * feat: 스타카토 목록 조회 repository 구현 * feat: 스타카토 목록 조회 view model 구현 * feat: 스타카토 목록을 marker로 표시 * refactor: home 패키지명을 maps로 변경 * feat: 마커 클릭 시 스타카토 상세로 이동 기능 구현 * feat: 스타카토 조회 추억 id, 제목 필드 추가 * feat: 마지막 위치 위경도 찾기 * refactor: 안드로이드 1차 QA 반영 #299 (#301) * refactor: 안드로이드 1차 QA 반영 * refactor: 안드로이드 1차 QA 반영2 * refactor: 안드로이드 1차 QA 반영3 * refactor: 삭제 메시지 변경 * fix: 스타카토 조회 화면 스택 관리 및 ui 수정 #304 (#306) * feat: 지도 화면에서 스타카토 조회 화면으로 이동 시 스택 관리 * feat: 타임라인 화면에서 추억이 존재하지 않을 때 추억 생성 버튼 추가 * ui: 스타카토 조회 화면 툴바 위치 고정 * build: Android CD 적용 #300 (#308) * build: CD 워크플로우 yml 파일 작성 * build: keystore 접근을 위한 build.gradle.kts 파일 설정 * build: 기존 apk 추출 ci 파일 수정 - demo 버전의 apk를 추출 및 배포하는 목적에 맞게 파일 명 수정 - apk 빌드 후 테스트를 수행하는 job 추가 - firebase 앱 배포에 아티팩트 업로드하는 job 추가 * fix: ci 파일에도 keystore 생성 job 추가 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: ci 파일에 키스토어 관련 설정 적용 * fix: 키스토어 관련 명령어 일부 수정 * fix: build.gradle.kts 불필요한 괄호 제거 * fix: keystore.properties 로 부터 프로퍼티를 가져오는 형식 변경 * fix: upload-artifact step에서 빌드 파일의 upload 경로 수정 (#316) upload-artifact 는 defaults 설정의 working-directory 경로가 적용되지 않음 * fix: android cd 재수정 (2차) #317 (#319) * fix: upload-artifact 빌드 파일의 upload 경로 3차 수정 * fix: 배포 시 빌드 파일의 경로 수정 * fix: 빌드 파일의 upload 경로 수정 및 파일이 없는 경우 에러 처리 * fix: 빌드 파일의 upload 경로 4차 수정 * fix: 빌드 파일의 upload 경로 5차 수정 * fix: 빌드 파일의 upload 경로 6차 수정 - 디렉터리 경로 생성 후 upload 실행 * fix: 빌드 파일의 upload 경로 7차 수정 github의 workspace 환경변수(절대경로) 활용 * fix: clean test 제거 및 디버그용 파일 경로 탐색 명령어 추가 * fix: 디버그용 파일 경로 검색 명령어 수정 * fix: 디버그용 파일 경로 검색 명령어 삭제 * fix: 디버그용 파일 검색 명령어 삭제 및 업로드 파일 경로명 수정 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 기능 구현 #314 (#324) * feat: MainActivity에서 주소를 가져오는 로직 삭제 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 로직 구현 * refactor: 메서드 순서 정렬 * refactor: 스타카토 조회 화면 ViewPager2 적용 및 UI 아이콘 개선 #318 (#320) * refactor: 아이콘 추가 및 UI 개선 * feat: 스타카토 상세 사진 Viewpager 적용 * feat: 스타카토 상세 사진 Viewpager에 dot indicator 추가 * style: ktLint Format * feat: 메인 지도 화면에서 스타카토 생성하는 플로우 구현 #321 (#327) * feat: 날짜로 추억 목록 불러오는 getMemories API 추가 * feat: 메인에서 스타카토 생성 시 추억 목록 선택 가능 * feat: 스타카토 생성 시 역지오코딩과 추억 선택 연동 * build: debug와 release로 buildTypes 분리 (#329) - appName, appId, baseUrl 분리 - release에 난독화 적용 * build: debug 와 release 배포 분기에 따른 CD 수정 - CD에 대한 트리거 재설정 : main 브랜치에 대한 push 및 pr * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 #326 (#330) * refactor: 지도 화면 onResume에서 스타카토 목록 load * refactor: 스타카토 목록 로드 메서드명 변경 - 이전: loadMoments - 이후: loadStaccatos * feat: 공유 view model에 스타카토 목록 업데이트 상태 추가 * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 * feat: 지도 로드 시 현위치로 이동하도록 구현 * build: ci 및 cd 파일 수정 ci - 불필요한 gradle 빌드 및 테스트 제거 cd - 타겟 브랜치 develop 제거 * feat: 댓글 조회, 생성, 삭제 기능 구현 #290 (#331) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * ui: xml 컨벤션에 맞추어진 타 사용자의 댓글 ui 구성 * feat: 댓글 API의 DTO 작성 * feat: 댓글 API Service 작성 * feat: 댓글 CRUD DataSource 작성 * refactor: CommentApiService 각 메서드의 반환 값을 Response로 변경 * feat: CommentApiService 를 create * feat: CommentDataSource 구현체 생성 * refactor: 댓글 Dto 클래스 네이밍 변경 - VisitLogDto -> CommentDto * refactor: CommentDto 의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * refactor: VisitLog 도메인 모델 클래스의 네이밍 변경 - VisitLog -> Comment * refactor: Comment 도메인 모델의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * feat: 새로운 댓글 도메인 모델 생성 * feat: CommentRepository 작성 * feat: Domain 모델과 DTO 모델을 변환해주는 Mapper 작성 - CommentDto를 Comment로 변환하는 메서드를 CommentMapper.kt로 이동 * feat: CommentRepository의 기본 구현체 작성 * feat: 댓글 ViewModel, Factory 작성 및 Comment 불러오기 구현 * ui: ViewModel 데이터바인딩 및 빈 댓글 문구에 대한 strings 설정 * feat: CommentsViewModel 활용 및 옵저빙 * feat: 댓글 조회, 생성, 삭제 기능 구현 * chore: ktlint 적용 * feat: 추억 생성 및 수정 이미지 로딩 중 표시 및 저장 버튼 비활성화 #332 (#334) * feat: 추억 생성 이미지 로딩 중 표시 * feat: 추억 수정 이미지 로딩 중 표시 * feat: 추억 생성 및 수정 이미지 로딩 중 저장 버튼 비활성화 * style: formatting --------- Co-authored-by: Somin Lee <[email protected]> Co-authored-by: hodu <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> Co-authored-by: s6m1n <[email protected]>
linirini
pushed a commit
that referenced
this issue
Aug 23, 2024
* build: 프로젝트 생성 및 의존성 추가 * chore: 사용자 기능 및 권한 추가 * chore: gitignore 재설정 * chore: gitigonre .idea/ 추가 * build: develop-an 브랜치의 CI 설정 #3 (#10) * build: android-ci.yml 파일 생성 * chore: 오타 및 개행 수정 * chore: working-directory 수정 * build: ktLint 적용 및 format * ui: 디자인 시스템 구현 #11 (#44) * ui: color 정의 * ui: shape, selector 추가 * ui: icon 추가 * ui: font family 추가 - pretendard regular, medium, semibold, bold 추가 * ui: typography 정의 * ui: strings 정의 * ui: bottom sheet drag handle drawable 추가 * ui: styles 정의 * ui: detail toolbar 구현 - 상세 화면에서 사용 * ui: dialog, bottom sheet 구현 - 여행 및 방문 기록 삭제 dialog - 사진 등록 bottom sheet * ui: 사진 첨부 layout 구현 * feat: 삭제 다이얼로그, 사진 첨부 바텀 시트 fragment 추가 * ui: 세로모드로 고정 * build: data binding 의존성 추가 * style: strings resource 순서 정렬 * style: formatting * ui: plus icon 추가 * feat: jetpack navigation 및 바텀시트 프래그먼트 추가 #12 (#15) * build: androidx.navigation 및 dataBinding 의존성 추가 * feat: Binding 화면 클래스 및 bottomSheetNavigation 추가 * feat: TimelineFragment 임시 화면 추가 * feat: TravelFragment 임시 화면 추가 * feat: TravelCreationFragment 임시 화면 추가 * feat: VisitFragment 임시 화면 추가 * feat: VisitCreationFragment 임시 화면 추가 * feat: (여행, 방문 기록) 수정 화면 추가 * feat: (여행, 방문 기록) 생성 화면 이동 구현 * feat: BottomSheetController 설정 및 Navigation 이동 구현 * feat: 뒤로가기 버튼 클릭 시 BottomSheet, Toast 작동 구현 * feat: 여행, 방문 기록 생성을 위한 액티비티 추가 및 이동 구현 * feat: 여행, 방문 기록 수정을 위한 액티비티 추가 및 이동 구현 * build: 중복된 dataBinding 제거 * feat: 공통 이미지 로딩 BindingAdapter 설정 #33 (#41) * build: dataBinding 사용 설정 * feat: 이미지 로딩 바인딩 어댑터 설정 - Glide, Coil 바인딩 어댑터를 각각 작성 - placeholder 설정 * style: ktlint check - import 순서 조정 * fix: attribute 개수에 맞추어 BindingAdapter의 value 재설정 * style: 마지막 줄 개행 추가 * feat: placeHolder를 필수 속성으로 변경 및 coil 이미지 로딩 코드 수정 - placeHolder를 ImageView의 필수 속성으로 지정 - Coil BindingAdapter에서 url이 null인 경우에도 이미지를 로드하는 동작이 수행되도록 수정 * ui: 상단바 색상 변경 * build: develop-an의 CI 설정 수정 #38 (#39) - Git Action에 Secret으로 저장된 LOCAL_PROPERTIES_API_KEY를 변수로 가져온다. - 가져온 변수를 echo를 활용하여 local.properties에 설정한다. * build: develop-an 브랜치의 CI 파일 문법 오류 수정 #45 (#46) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * �fix: android-ci.yml 파일의 명령어 수정 #47 (#48) LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 * fix: develop-an 브랜치의 CI 파일 명령어 재수정 #47 (#49) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 --------- Co-authored-by: Somin Lee <[email protected]> * fix: 문자열 임을 명시하고 환경변수 설정 위치 조정 * fix: local.properties 생성 시점 수정 * feat: 데이터 패키지 설정 #13 (#35) * build: 서버 base url의 local.properties 사용 설정 및 BuildConfig 설정 * feat: Retrofit Client 작성 * fix: Merge Conflict 해결 - build.gradle.kts(project, app)의 ktlint 의존성 충돌 해결 - 버전 카탈로그 플러그인 충돌 해결 * feat: DTO 클래스 작성 * style: ktlint check - 불필요한 import 제거 - 개행 조정 - 콤마 추가 * feat: SerialName 어노테이션의 값을 camelCase로 수정 * refactor: DTO 클래스의 이름 수정 - API 요청으로 직접 보내거나 들어오는 JSON의 경우 DTO 클래스명 뒤에 Request/Response 를 붙이도록 설정 - JSON 안에 속성 값으로 들어가는 JSON은 DTO 클래스명 뒤에 Dto를 붙이도록 설정 * feat: 누락된 Dto 클래스 추가 TimelineResponse.kt - 타임라인 조회 시 여행 상세 목록을 불러올 때 사용되는 DTO 클래스 - TimelineTravelDto 리스트를 갖는다 * style: ktlint check * fix: const 키워드 제거 --------- Co-authored-by: hxeyexn <[email protected]> * feat: 둥근 모서리의 이미지를 로드하는 BindingAdapters 추가 #58 (#59) * feat: 둥근 모서리로 이미지를 로딩하는 Glide 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - glideRoundedCornerImageUrl: 출력하고자 하는 이미지 url - glidePlaceHolder: placeHolder의 url - glideRoundingRadius: 모서리의 둥근 정도를 Int로 설정 * feat: 둥근 모서리로 이미지를 로딩하는 Coil 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - coilRoundedCornerImageUrl: 출력하고자 하는 이미지 url - coilPlaceHolder: placeHolder의 url - coilRoundingRadius: 모서리의 둥근 정도를 Float으로 설정 * fix: centerCrop 설정을 BindingAdapter 에 위임 - xml 속성으로 centerCrop을 주게 되면 Round Corner가 제대로 적용되지 않는 현상 발생 - Glide의 api로 제공되는 centerCrop() 메서드를 활용 * ui: 타임라인 프래그먼트(BottomSheet) 구현 #55 (#71) * ui: 타임라인 View xml 파일 작성 - 타임라인에 나타날 여행 상세 아이템 xml 작성 - 썸네일 사진 유무에 따라 뷰를 구분 - 타임라인이 나타날 fragment xml 작성 * feat: 타임라인 여행 상세 아이템 UI 모델 생성 * ui: 썸네일이 없는 여행상세 아이템의 margin 조정 * ui: Timeline RecyclerView의 layoutManager 설정 * ui: xml에서의 UiModel 데이터 바인딩 설정 * feat: ViewHolder 작성 - 썸네일 사진 유무에 따라 다른 ViewHolder로 구분 - 공통된 속성을 정의한 TimelineViewHolder 추상클래스 생성 * feat: TimelineRepository Interface 생성 * feat: 임시 TimelineRepository 구현체 생성 * feat: TimelineViewModel 및 Factory 생성 * feat: TimelineViewType 작성 * feat: TimelineAdapter 작성 * feat: TimelineFragment에 ViewModel과 Adapter 구현 * feat: 이미지 로딩 PlaceHolder drawable 추가 및 적용 * feat: 임시 데이터 연결 * ui: Timeline fragment 의 세부 설정 조정 * ui: Timeline의 Item xml 변경 - 뷰 타입을 3개로 분할: 첫 번째 아이템, 중간 아이템, 마지막 아이템 - 이에 따라 xml 파일 추가 및 view 수정 * feat: ViewType 변경에 따른 Adapter 및 ViewHolder 수정 * refactor: 불필요한 View 및 ViewHolder 제거 * feat: 여행 click 에 대한 event handler 생성 및 설정 * refactor: drawable 이름을 네이밍 컨벤션에 맞게 수정 * ui: RecyclerView의 마진 속성을 패딩 속성으로 변경 * feat: 바텀 시트 디자인 변경 및 툴바와의 상호작용 구현 * ui: 타임라인 글귀 추가 * style: ktlint check * ui: 둥근 모서리의 이미지로 변경 * ui: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 구현 #52 (#74) * ui: typography.body textSize 1sp 씩 증가 * feat: DeleteDialogFragment에 Handler 추가 * feat: 툴바의 수정, 삭제 버튼 제어를 위한 ToolbarHandler 추가 * feat: 방문 상세 화면을 위한 VisitDetailUiModel 추가 * ui: PlaceHolder를 위한 xml 파일 추가 * feat: 방문 기록 상세 화면을 위한 VisitAdapter 및 VisitViewHolder 구현 * feat: 임시 VisitViewModel와 VisitViewModelFactory 추가 * feat: VisitFragment 화면 구현 * feat: 방문 기록에 해당하는 여행 선택을 위한 TravelSelectionFragment 구현 * feat: 방문 기록에 해당하는 날짜 선택을 위한 VisitedAtSelectionFragment 구현 * feat: 방문 기록 생성을 위한 VisitCreationActivity 구현 * feat: 방문 기록 수정을 위한 VisitUpdateActivity 구현 * refactor: DialogHandler를 DeleteDialogFragment의 생성자에서 받도록 수정 * refactor: initVisitUpdateDoneButton 중복 로직 제거 * refactor: VisitViewHolderType 메서드 명 변경 of -> from * refactor: tv_place_name_title을 xml id convention에 맞게 수정 * ui: 여행 화면 구현 #51 (#75) * ui: 함께 간 사람들 item 구현 * ui: 방문 기록 item 구현 * ui: 여행 상세 화면 구현 * ui: 여행 생성 화면 구현 * ui: 여행 수정 화면 구현 * ui: placeholder에 사용할 drawable 추가 * ui: 여행 삭제 완료 string 추가 * feat: 둥근 모서리 이미지 BindingAdapter 구현 * feat: 함께 간 사람들 adapter 구현 * ui: 여행 상세 화면 NestedScrollView로 변경 - 이전: ScrollView - 이후: NestedScrollView * feat: 방문 기록 adapter 구현 * feat: 여행 상세 view 연결 * feat: 함께 간 사람들, 방문 기록 adapter 연결 * feat: 삭제 다이얼로그 handler 구현 * feat: 여행 상세 화면 toolbar handler 구현 - 뒤로가기 - 여행 수정 화면으로 이동 - 삭제 다이얼로그 show * feat: 여행 -> 방문 기록 화면 이동 구현 * ui: DatePickerStyle 추가 - DatePickerStyle, CustomMaterialCalendarStyle 추가 - staccato_blue 투명도 30 추가 * feat: 여행 저장 버튼, 여행 기간 BindingAdapter 추가 * feat: 여행 생성 view 연결 * feat: 여행 수정 view 연결 * style: formatting - Exceeded max line length 해결 - 임시 이미지 URL 변경 * refactor: 기간 선택 로직 메서드 분리 * feat: 타임라인의 API 적용 및 MainActivity의 Toolbar 제거 #81 (#93) * refactor: UI Model의 패키지 경로 변경 * refactor: API 명세 변경에 따른 TimelineTravelDto 수정 * refactor: repository 메서드 수정 - 서버 요청을 비동기적으로 처리하기 위해 suspend 키워드 삽입 - 기존의 임시 데이터 요청 코드를 위해 load 메서드 분리 * feat: Timeline의 API Service 작성 * feat: DataSource 인터페이스 작성 * feat: TimelineDataSource 구현체 생성 * refactor: 년도에 대한 default parameter 설정 * refactor: DataSource의 요청 메서드 네이밍 수정 * feat: http 통신이 가능하도록 Cleartext Traffic 허용 설정 * feat: Authorization Header를 삽입하기 위한 Interceptor 생성 * feat: Client에 HeaderInterceptor 추가 * refactor: errorBody의 message 속성 이름 변경 * feat: 도메인 모델 작성 * feat: Response(dto)에서 도메인 모델로 변환하는 확장함수 구현 * feat: 도메인 모델에서 UI 모델로 변환하는 확장함수 구현 * feat: Repository 수정 및 ViewModel 데이터 연결 * ui: MainActivity의 상단 툴바 제거 * refactor: ViewType에 viewType 속성 추가 및 when에서의 enum 활용 * refactor: Timeline의 공통 ViewHolder를 sealed class로 변경 * style: ktlint check 수행 * fix: Response 데이터의 nullable 속성에 맞추어 DTO 수정 및 누락된 DTO 추가 * fix: 데이터가 비어있는 경우(초기)에만 새로운 여행상세 목록을 받도록 수정 * refactor: lazy 로 지연 초기화 및 timelineService가 하나의 인스턴스로 관리되도록 수정 * fix: Travel의 description에 nullable 속성 추가 API 명세서 잘 좀 보자 제발 * refactor: create 메서드를 private으로 변경 Client 클래스에서 Service를 create 하여 제공 및 캐싱하기 때문에, 불필요한 인스턴스를 생성하지 않도록 create를 public으로 두지 않는 것이 좋다. * refactor: LocalDateConverters의 패키지 경로 수정 * refactor: 파일의 이름 수정 * style: ktlint check * refactor: 에러 메시지 상수화 * feat: 특정 여행 상세 조회 api 연결 #82 (#97) * feat: 특정 여행 상세 조회 api service 구현 * feat: 썸네일, 소개 타입 변경 및 기본 인자 설정 - 변경 data class : TravelResponse, TravelUiModel - 이전: String - 이후: String? * refactor: MatesUiModel 네이밍 변경 MatesUiModel이 공통적으로 사용될 예정이므로 MemberUiModel로 변경 - 이전: MatesUiModel - 이후: MemberUiModel * refactor: VisitUiModel 네이밍 변경 - 여행 상세 방문 기록에 사용되는 UiModel 이름을 명시적으로 변경 - 이전: VisitUiModel - 이후: TravelVisitUiModel * feat: 특정 여행 상세 조회에 사용할 domain model 추가 * feat: Api 응답 핸들링 로직 구현 * feat: 특정 여행 상세 조회 data source 구현 * feat: 특정 여행 상세 조회 repository 구현 * feat: 특정 여행 상세 조회 api 연결 * feat: 특정 여행 상세 조회 로직 매개변수 추가 - 타임라인에서 선택된 여행 id를 매개변수로 받도록 변경 * refactor: ApiResponseHandler 이름 오타 수정 * refactor: 에러 메세지 상수화 * feat: 특정 여행 상세 조회 시그니처 변경 - HeaderInterceptor 적용으로 authorization 매개변수 제거 * style: formatting * feat: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 API 연결 #79 (#99) * feat: VisitApiService 인터페이스 및 관련 data class 추가 * feat: VisitRepository, RemoteVisitDataSource 및 관련 class 추가 * feat: 각 Visit 화면들의 ViewModelFactory 구현 * feat: 각 Visit 화면들의 UiModel 클래스 및 Mapper 추가 * feat: 여행 선택 및 방문 날짜 선택을 위한 BottomSheetDialogFragment 수정 * feat: VisitFragment API 연결 * feat: VisitCreationActivity API 연결 * feat: VisitUpdateActivity API 연결 준비 * refactor: visitApiService를 StaccatoClient object로 이동 * refactor: TravelVisit 클래스의 visitImage 변수 nullable하게 수정 * refactor: VisitApiService의 중복된 @Header 제거 * refactor: 방문 생성 성공 시 created id를 가져오도록 리팩터링 * chore: 변수명 visitImage로 수정 및 ktLint 적용 * refactor: 여행 수정 완료 동작 구현 및 VisitUpdateActivity 함수 분리 * feat: 여행 생성 api 연결 #98 (#104) * feat: 여행 생성 api service 구현 * feat: 여행 생성 data source 구현 * feat: 방문 기록 썸네일 타입 변경 및 기본 인자 설정 - 변경 data class : TravelVisitDto, TravelVisit, TravelVisitUiModel - 이전: String - 이후: String? * build: converter scalars 의존성 추가 * feat: 여행 생성 ApiService 반환값 및 DataSource 시그니처 변경 - 여행 생성 ApiService 반환값 변경 - DataSource 시그니처 변경 - TravelCreation DomainModel 구현 - TravelCreation Dto 변환 Mapper 구현 * feat: Client에 ScalarsConvert 추가 - Header 값을 읽어오기 위해 ScalarsConvert 추가 * feat: 여행 생성 repository 구현 * feat: 여행 생성 api 연결 * feat: TravelViewModel 생성자 변경 - 이전: travelId를 TravelViewModel 생성자로 넣어줌 - 이후: travelId를 loadTravel()의 매개변수로 넣어줌 * ui: map 화면 변경 * refactor: 컨벤션 통일 및 패키지 정리 #112 (#118) * refactor: bind 네임스페이스 적용 * refactor: BindingAdapters 메서드명 변경 * refactor: 컨벤션 맞게 xml 파일 이름 변경 * refactor: data 패키지 구조 정리 * refactor: RemoteVisitDataSource 컨벤션 따라 네이밍 변경 * refactor: 네트워킹 관련 메서드 이름 변경 - api service, data source, repository * refactor: presentation 패키지 구조 정리 * refactor: message utils 생성 및 적용 Co-authored-by: s6m1n <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * build: develop-an의 CI 테스트 자동화 추가 및 데모 APK 추출 #78 (#92) * build: test 자동화 Job 추가 * build: local.properties 생성 시점 변경 * build: 디버그 APK를 빌드하여 업로드하는 workflow 작성 * fix: test Job과 APK build Job에 local.properties 생성 동작 추가 * build: read 전용 권한 제거 * build: Firebase Analytics, Crashlytics 설정 #136 (#143) * build: Firebase Analytics, Crashlytics 의존성 추가 * chore: google-service.json ignore * feat: 특정 여행 상세 수정 api 연결 #109 (#146) * feat: 여행 수정 api service 구현 * feat: 여행 수정 data source 구현 * feat: 여행 수정 repository 구현 * feat: 여행 수정 화면 현재 데이터 로딩 기능 구현 * refactor: 컨벤션 따라 여행 api service의 수정 메서드명 변경 - 이전: updateTravel - 이후: putTravel * feat: 특정 여행 상세 수정 api 연결 * refactor: memberImage 타입 변경 및 기본 인자 설정 * refactor: MembersDto 삭제 * refactor: TravelCreationUiModel.kt 삭제 * refactor: TravelCreation 이름 변경 - 이전: TravelCreation - 이후: NewTravel * refactor: api 명세서 변경에 따른 도메인 모델 수정 및 여행 코드 리팩터링 #151 (#152) * refactor: nickName 변수명 변경 - 이전: nickName - 이후: nickname * ui: 여행 수정 화면 이미지 속성 수정 - glide -> coil 이용 - scaleType : fitXY -> centerCrop * style: import 정렬 * feat: 여행 상세 -> 방문 상세로 이동 시 여행 id 전달 * feat: 방문기록 조회 dto 수정 - 방문기록 조회 도메인 변경으로 인해 방문 기록이 조회되지 않음 - 따라서 api 명세서와 일치하도록 dto 수정하여 오류 해결 * refactor: 여행 생성을 위한 viewModel 메서드 분리 * refactor: 여행 조회를 위한 viewModel 메서드 분리 * feat: 여행 수정 handler 구현 * refactor: 여행 default id 변경 - 이전: -1L - 이후: 0L * refactor: TravelHandler 구현 위치 변경 - 이전: TravelViewModel - 이후: TravelFragment * style: 컨벤션에 맞게 TravelFragment의 메서드 순서 수정 * refactor: TravelFragment의 travelId 초기화 방식 변경 * feat: 여행 생성 및 수정 error toast 구현 * feat: 방문 생성 화면, 방문 수정 화면에서 갤러리 사진 불러오기 구현 #150 (#155) * feat: PhotoAttachFragment에 PhotoAttachHandler 연결 * feat: PhotoAttachFragment 앨범 접근 권한 관련 로직 구현 - API level 33 이상 : READ_MEDIA_IMAGES - API level 33 이하 : READ_EXTERNAL_STORAGE - ActivityResultLauncher를 이용한 권한 요청 - 권한 거부 시, 설정으로 이동하는 스낵바 띄우기 * feat: PhotoAttachFragment 앨범에서 불러온 이미지의 URI 추출하기 * feat: 불러온 이미지의 URI를 호스트 Activity로 전달 - OnUrisSelectedListener 인터페이스 추가 * feat: Uri를 File로 변환하는 메서드 파일 추가 * refactor: pr 리뷰 반영 * refactor: pr 리뷰 반영2 * build: develop-an의 android-ci 수정 #115 (#160) - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: android-ci 환경변수 생성 위치 조정 (#164) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * build: bash 쉘에 맞는 명령어 활용 #115 (#165) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * fix: bash 쉘에 적합한 명령어 형식으로 변경 * feat: 특정 여행 상세 삭제 api 연결 #153 (#167) * feat: 특정 여행 삭제 api service 구현 * feat: 특정 여행 삭제 data source 구현 * feat: 특정 여행 삭제 repository 구현 * feat: 특정 여행 삭제 기능 api 연결 * feat: error handling 방식 수정 - 서버에서 들어오는 error body의 status와 message를 활용하는 방식으로 변경 * refactor: DialogHandler를 독립적으로 관리 * refactor: api path 상수 활용 * refactor: BuildConfig에 token 정의 * refactor: DEFAULT_VALUE 상수 제거 * feat: 여행 생성 기능 api 수정 #169 (#178) * feat: onUrisSelected 매개변수 가변인자로 변경 * feat: 여행 생성 화면 갤러리 이미지 로딩 기능 구현 * refactor: 이미지 선택 리스너 초기화 메서드명 오타 수정 * refactor: 스낵바 액션 설정 코드 간소화 * feat: TravelRequest 의 여행 썸네일 필드 제거 * refactor: 여행 썸네일 이미지 변수명 수정 * feat: 이미지 전송 기능 구현 * refactor: image url 변수명 변경 - 변수 끝에 url이 오도록 * feat: 여행 생성 progressBar 구현 * ui: 사진 첨부 아이콘 가시성 설정 * feat: 여행 상세 수정 기능 api 변경 및 여행 리팩터링 #180 (#181) * feat: 여행 수정 화면 갤러리 이미지 로딩 기능 구현 * feat: URL 및 URI 기반 이미지 로딩 BindingAdapter 구현 * feat: 이미지 전송 기능 구현 * feat: 여행 수정 progressBar 구현 * fix: 삭제 불가능한 여행 삭제 시도 관련 에러 토스트 문제 해결 삭제 불가능한 여행을 삭제하려고 시도 -> 방문 조회 -> 뒤로 가기 버튼 클릭 -> 삭제 불가능 에러 토스트가 다시 뜨는 문제가 발생해 이를 해결 * refactor: TravelCreationViewModel의 imageUrl 변수 제거 * ui: 여행 상세 내 방문 기록 이미지 scaleType 속성 설정 * ui: 여행 생성 썸네일 이미지 scaleType 속성 설정 * fix: 여행 소개 미입력 시 여행이 생성 되지 않는 오류 해결 * refactor: 타임라인 화면 리팩터링 #162 (#179) * ui: 타임라인 RecyclerView의 크기 조정 및 여백 수정 * feat: Activity와 Fragment 간 데이터를 공유하는 공유 ViewModel 생성 * feat: 공유 ViewModel을 이용하여 타임라인 업데이트 여부를 공유 * refactor: RecyclerView.Adapter에서 ListAdapter로 변환 * refactor: 처음 타임라인을 불러오는 동작을 ViewModel 초기화 시에 수행 * fix: ListAdapter 수정 - 불필요한 travels 프로퍼티와 getItemCounts 메서드 제거 - currentList를 사용하는 것으로 변경 * refactor: 에러 핸들링 방식 수정 및 ViewModel 수정 - TimelineDefaultRepository로 네이밍 변경 - ApiResponseHandler와 ResponseResult를 이용하여 에러 핸들링 처리 - TimelineViewModel 에러 메시지 LiveData 사용 - 그 외 repository, dataSource 프로퍼티 이름 수정하여 통일 * refactor: MutableLiveData의 값 업데이트를 setValue로 변경 및 메서드 분리 * style: ktlint 적용 * feat: 3차 스프린트에서 수정된 방문 기록 상세 API 연결 #163 (#183) * feat: 방문 상세 생성 API 연결 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 방문 기록 생성 및 수정 시 로딩과 토스트 추가 * feat: 닉네임을 활용한 로그인 기능 구현 #124 (#172) * ui: 로그인 화면 구성 - 로그인 화면에서 사용되는 텍스트를 strings에 추가 - 로그인 버튼 스타일에 대한 style 생성 - xml 임시로 작성 * ui: 앱 로고 삽입 및 margin 조정 - 임시 로고 이미지 저장 - 로고 크기 및 마진 조정 * feat: 로그인 API Service 작성 및 Retrofit 객체 생성 * feat: 로그인 DataSource 작성 * feat: 로그인 Repository 생성 * feat: 사용자 정보를 저장하는 SharedPreferences Manager 생성 - 토큰 값 불러오기 및 저장 - 추후 사용자 닉네임, 사용자 프로필 이미지 등의 정보 저장 가능 * feat: Application 생성 및 사용자 정보 Preferences Manager 캐싱 * ui: Splash Screen 화면 구성을 위한 테마 생성 * feat: Preferences 로부터 사용자 토큰 값을 가져와 헤더에 추가하도록 변경 * refactor: Repository 네이밍 통일 * refactor: DataSource 기본 인자 추가 * feat: LoginViewModel 및 Handler 작성 * feat: LoginViewModel 을 생성하는 ViewModel Factory 작성 * feat: LoginActivity 작성 및 양방향 데이터 바인딩 적용 * feat: StaccatoApplication과 LoginActivity 설정 및 LoginActivity를 시작 화면으로 변경 * style: 불필요한 namespace 제거 및 lint 확인 * refactor: LoginViewModel과 Factory를 viewmodel 패키지로 분리 * refactor: TimelineViewModel과 Factory를 viewmodel 패키지로 분리 * style: ktlint 적용 * fix: 불필요한 ConverterFactory 제거 - 더 이상 사용하지 않는 text/plain 변환용 ScalarsConverterFactory 제거 * feat: 닉네임 로그인 요청 및 응답에 대한 DTO 작성 * refactor: 로그인 요청, 응답 시 DTO 활용 * fix: 토큰 값을 불러오고 및 저장하는 동작의 비동기 처리 및 화면 전환 개선 * refactor: 토큰 값을 캐싱하여 저장하는 TokenManager 생성 및 적용 - 매번 runBlocking을 통해 Preference에 저장된 토큰 값을 불러오는 것은 네트워크 성능을 저하시킨다. - 따라서, token 값을 캐싱하여 저장하는 TokenManager를 활용한다. - 첫 네트워크 요청 시에만 토큰을 불러오는 작업을 동기적으로 처리하기 위해 Main Thread가 Blocking 된다. - TokenManager가 Preference로부터 가져온 토큰을 캐싱하여 저장한다. - 이후 요청부터는 캐시된 토큰을 가져오므로 Main Thread가 Blocking 되지 않는다. * style: ktlint 적용 * feat: Night 모드 비활성화 * refactor: 여행 기간 날짜 형식 변환을 BindingAdapter에서 수행 - TimelineTravelUiModel 프로퍼티 수정 - UiModel의 여행기간 날짜를 LocalDate로 갖도록 통일 - 추후 날짜 관련 UI가 변경되었을 때 확장성 고려 - BindingAdapters에 날짜 형식 변환해주는 메서드 작성 * chore: 주석 처리된 Log 코드 삭제 * style: xml View의 ID 네이밍 컨벤션 적용 * ui: 앱 심볼 로고 추가 및 스플래시 스크린에 적용 * feat: 방문 상세 생성 API 연결 * ui: 배경 색을 흰 색으로 지정 * feat: 키보드 활성화 상태에서 화면 터치 시 키보드를 내리는 기능 추가 * style: ktlint 적용 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * fix: merge 과정에서 발생한 id값 네이밍 충돌 해결 * build: 앱 version code와 version name 수정 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 스플래시 스크린 시간 조정 및 데모 시연용 토큰 활성화 * fix: 동일한 사진이 여러 장 업로드되는 버그 수정 * feat: 기존 로그인 기능으로 롤백 --------- Co-authored-by: somin <[email protected]> * fix: 테스트 배포를 위한 버그 수정 #198 (#219) * style: formatting * fix: 무한 로딩 오류 수정 * fix: 여행 생성 오류 수정 * add: 앱 아이콘 변경 * ui: timeline empty view 추가 * feat: timeline empty view 가시성 설정 * ui: 여행 내 방문 기록 empty view 추가 및 가시성 설정 * ui: 방문 기록 내 로그 미지원 기능 view 추가 * feat: 사진 첨부 카메라 미지원 기능 알림 추가 * ui: 필수값 표기 style 정의 * ui: 여행 생성 및 수정 필수값 표기 추가 * ui: 방문 기록 생성 및 수정 필수값 표기 추가 * feat: 생성, 수정, 로그인 시 다중 요청 전송을 막기 위한 화면 터치 제한 * feat: 장소 생성의 사진 첨부 리사이클러뷰 구현 - 사진 추가 & 삭제 구현 - GridLayout으로 변경 - 사진 중복 없이 최대 5장으로 제한 - 새로 추가된 사진이 기존 사진 뒤에 더해지도록 구현 * chore: 방문 생성 화면 rv_photo_attach로 xml id 수정 * ui: app icon 및 splash icon 변경 * refactor: xml ID 네이밍 컨벤션 적용 --------- Co-authored-by: somin <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * �refactor: 도메인명 변경에 따라 travel을 memory로 수정 #217 (#231) * refactor: 패키지명 travel -> memory로 수정 * refactor: dto의 TravelMapper 를 MemoryMapper 로 네이밍 변경 * refactor: 여행(현 추억) 생성 response dto 네이밍 변경 - TravelCreationResponse -> MemoryCreationResponse * refactor: 여행(현 추억) request dto 네이밍 변경 - TravelRequest -> MemoryRequest * refactor: 여행(현 추억) 조회 response dto 네이밍 변경 - TravelResponse -> MemoryResponse * refactor: 여행(현 추억) 수정 request dto 네이밍 변경 - TravelUpdateRequest -> MemoryUpdateRequest * refactor: 여행(현 추억) 내 방문 dto 네이밍 변경 - TravelVisitDto -> MemoryVisitDto * refactor: 타임라인 여행(현 추억) item의 dto 네이밍 변경 - TimelineTravelDto -> TimelineMemoryDto * refactor: 여행(현 추억) ApiService 네이밍 변경 - TravelApiService -> MemoryApiService * refactor: 여행(현 추억) DataSource 네이밍 변경 - TravelDataSource -> MemoryDataSource - TravelRemoteDataSource -> MemoryRemoteDataSource * refactor: 여행(현 추억) Repository 네이밍 변경 - TravelRepository -> MemoryRepository - TravelDefaultRepository -> MemoryDefaultRepository * style: TimelineMapper import 재정렬 * refactor: NewTravel 도메인명을 NewMemory로 변경 * refactor: Travel 도메인명을 Memory로 변경 * refactor: TravelVisit 도메인명을 MemoryVisit으로 변경 * refactor: presentation의 TravelMapper 명 변경 - TravelMapper -> MemoryMapper * refactor: 여행(현 추억) ui 모델명 변경 - TravelUiModel -> MemoryUiModel - TravelVisitUiModel -> MemoryVisitUiModel * refactor: 여행(현 추억) view model 명 변경 - TravelViewModel -> MemoryViewModel - TravelViewModelFactory -> MemoryViewModelFactory * refactor: MemoryApiService의 Path 변경 - travel을 memory로 변경 - travels을 memories로 변경 * refactor: Memory 관련 dto 변수명 변경 - travel을 memory로 변경 * refactor: Timeline Dto의 Memory 관련 변수명 변경 - travel을 memory로 변경 - travels를 memories로 변경 * refactor: Memory 관련 도메인 모델의 변수명 변경 - travel을 memory로 변경 * refactor: Memory 관련 ui 모델의 변수명 변경 - travel을 memory로 변경 * refactor: data layer의 Memory 관련 함수 및 변수명 변경 - travel을 memory로 변경 * refactor: 방문 생성 request dto의 travelId 변수명 변경 - travelId -> memoryId * refactor: 여행(현 추억) 조회 view model 및 fragment의 네이밍 변경 - travel -> memory * refactor: fragment_travel 의 리소스 네이밍 변경 - travel -> memory - strings.xml의 리소스명 변경 * refactor: TravelCreationActivity 네이밍 변경 - TravelCreationActivity -> MemoryCreationActivity * refactor: 여행(현 추억) 생성의 ViewModel 관련 네이밍 변경 - TravelCreationViewModel -> MemoryCreationViewModel - TravelCreationViewModelFactory -> MemoryCreationViewModelFactory - 관련 함수 및 변수명 변경 - travel -> memory * refactor: 여행(현 추억) 생성, 수정에 관한 xml 리소스 명 변경 - travel -> memory - strings.xml 의 관련 리소스 수정 * refactor: 여행(현 추억) 수정 Activity, Handler 의 네이밍 변경 - travel -> memory * refactor: 여행(현 추억) 수정 ViewModel 의 네이밍 변경 - 관련 함수 및 변수 명 변경 - travel -> memory - Factory 클래스명 변경 * refactor: 여행(현 추억) 생성, 수정에서의 파일 변환 메서드명 변경 - travel -> memory - 자식 파일 명 상수화 * refactor: Timeline 의 UI 모델 및 Travel ID Key 의 리네이밍 - travel -> memory 로 일괄 변경 * refactor: presentation/timeline 내 travel 도메인명 변경 - travel -> memory - TimelineMapper 내 domain model -> ui model 변환 메서드명 변경 * refactor: dto/MemoryMapper 내 domain 변환 메서드명 변경 - dto/MemoryMapper 내 domain model을 dto로 변환하는 메서드명 변경 - travel -> memory * refactor: dummyTravel 을 dummyMemory 로 변경 * refactor: MainActivity 내 travel을 memory로 변경 * refactor: activity_main 내 travel을 memory로 변경 * refactor: TimeLineApiService 내 GET 메서드 path 수정 - travels -> memories * refactor: MemoryFragment 내 travel 을 memory 로 변경 - MemoryFragment, fragment_memory 내 travel 을 memory 로 변경 * refactor: MemoryViewModel 내 error message 변수명 변경 - TRAVEL_ERROR_MESSAGE -> MEMORY_ERROR_MESSAGE * refactor: navigation graph 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 extra 키 값 수정 - TRAVEL_ID_KEY -> MEMORY_ID_KEY - TRAVEL_TITLE_KEY -> MEMORY_TITLE_KEY * refactor: VisitFragment 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 travel을 memory로 변경 * refactor: VisitUpdateViewModel 내 travel을 memory로 변경 * refactor: VisitTravelUiModel을 VisitMemoryUiModel로 변경 * refactor: 방문 수정 xml의 travel을 memory로 변경 * refactor: 여행(현 추억) 선택 xml 내 travel을 memory로 변경 * refactor: 여행 선택 바텀 시트 내 travel을 memory로 변경 - TravelSelectionFragment -> MemorySelectionFragment 로 수정 - TravelSelectionHandler -> MemorySelectionHandler 로 수정 - TravelSelectionFragment 내 메서드명 수정 - TravelSelectionHandler 내 매개변수명 수정 * refactor: VisitRepository와 구현체의 메서드 내 매개변수명 통일 * refactor: VisitsViewHolder 내 travel을 memory로 변경 * refactor: VisitCreationActivity 내 travel을 memory로 변경 * refactor: VisitCreationViewModel 내 travel을 memory로 변경 * refactor: 방문 생성 xml 내 travel을 memory로 변경 * refactor: BindingAdapters 내 travel을 memory로 변경 * refactor: strings 내 travel을 memory로 변경 - strings 내 '여행'을 '추억'으로 수정 Co-authored-by: Junyoung-WON <[email protected]> Co-authored-by: s6m1n <[email protected]> * refactor: visit, visit log 도메인명 수정 #218 (#237) * refactor: VisitApiService 내 visit을 moment 로 변경 - 파일명 수정 - path 수정 - 메서드명 수정 - 매개변수명 수정 * refactor: data/visit 패키지명을 moment로 변경 * refactor: data/dto/visit 패키지명을 moment로 변경 * refactor: VisitCreationRequest 네이밍 변경 - 이전: VisitCreationRequest - 이후: MomentCreationRequest * style: StaccatoClient import 재정렬 * refactor: VisitCreationResponse 네이밍 변경 - 이전: VisitCreationResponse - 이후: MomentCreationResponse - 필드명 변경 : visitId -> momentId * refactor: VisitResponse 네이밍 변경 - 이전: VisitResponse - 이후: MomentResponse - VisitResponse 필드 내 visit을 moment로 변경 - VisitResponse 필드 내 visitLogs SerialName을 comments로 변경 * refactor: VisitUpdateRequest 네이밍 변경 - 이전: VisitUpdateRequest - 이후: MomentUpdateRequest - VisitUpdateRequest 필드 내 visit을 moment로 변경 * refactor: VisitLogDto 내 SerialName 변경 - visitLogId를 commentId로 변경 * refactor: MemoryResponse 내 visits SerialName 변경 - visits를 moments로 변경 * refactor: VisitCreationViewModel 내 FORM_DATA_NAME 변경 - 이전: visitImageFiles - 이후: momentImageFiles * refactor: MemoryVisitDto 내 visit를 moment로 변경 - MemoryVisitDto -> MemoryMomentDto로 변경 - visitId -> momentId로 변경 - visitImageUrl -> momentImageUrl로 변경 * refactor: VisitRemoteDataSource 내 visit을 moment로 변경 - VisitRemoteDataSource -> MomentRemoteDataSource로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: MomentRepository 및 구현체 내 visit을 moment로 변경 - VisitRepository -> MomentRepository로 변경 - VisitDefaultRepository -> MomentDefaultRepository로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: Visit 도메인 모델명 및 변수명 변경 - Visit -> Moment로 변경 - visitLogs -> comments로 변경 * refactor: Memory 도에인 모델의 visits을 moments로 변경 * refactor: MemoryVisit 도메인 모델 내 visit을 moment로 변경 * refactor: MemoryResponse의 visits 필드명을 moments로 변경 * refactor: dto/mapper/VisitMapper를 MomentMapper로 변경 * refactor: presentation/visit 패키지명을 moment로 변경 * refactor: VisitViewHolderType 네이밍 변경 - VisitViewHolderType -> MomentViewHolderType - enum 상수명 변경 - VISIT_DEFAULT -> MOMENT_DEFAULT - MY_VISIT_LOG -> MY_COMMENTS * refactor: VisitViewHolder 네이밍 변경 - VisitViewHolder -> MomentViewHolder - VisitDefaultViewHolder -> MomentDefaultViewHolder - MyVisitLogViewHolder -> MyCommentViewHolder * refactor: VisitAdapter 내 visit을 moment로 변경 - VisitAdapter -> MomentAdapter 로 변경 - visit -> moment 로 변경 * refactor: MomentAdapter 내 visit log를 comments로 변경 * refactor: VisitDetailUiModel 내 visit을 moment로 변경 - VisitDetailUiModel -> MomentDetailUiModel - VisitDefaultUiModel -> MomentDefaultUiModel - visitImageUrls -> momentImageUrls * refactor: VisitLogUiModel을 CommentsUiModel로 변경 * refactor: VISIT_ID_KEY extra key id 네이밍 변경 - VISIT_ID_KEY -> MOMENT_ID_KEY * refactor: VisitFragment 내 visit을 moment로 변경 * refactor: VisitViewModel 내 visit을 moment로 변경 - VisitViewModel -> MomentViewModel로 변경 - VisitViewModelFactory -> MomentViewModelFactory로 변경 * refactor: VisitMemoryUiModel 네이밍 변경 - VisitMemoryUiModel -> MomentMemoryUiModel로 변경 * refactor: presentation/visitcreation 패키지명 momentcreation으로 변경 * refactor: VisitCreationActivity 내 visit을 moment로 변경 - VisitCreationActivity -> MomentCreationActivity로 변경 * refactor: VisitCreationHandler 네이밍 변경 - VisitCreationHandler -> MomentCreationHandler로 변경 * refactor: VisitCreationViewModel 내 visit을 moment로 변경 - VisitCreationViewModel -> MomentCreationViewModel로 변경 - 메서드 및 변수명 변경 * refactor: 여행 -> 추억, 방문 기록 -> 스타카토로 도메인명 변경 * feat: s3 api 연결 #239 (#241) * feat: ImageResponse, ImageApiService 구현 * feat: ImageRepository 및 구현체 구현 Co-authored-by: s6m1n <[email protected]> * fix: 추억 기능 버그 수정 #246 (#252) * fix: 일부 EditText 개행 불가 처리 및 키보드 숨김 처리 #247 (#249) * ui: 닉네임과 추억 생성, 수정 제목 입력 시 줄바꿈 제한 * fix: 키보드 활성화 상태에서 빈 화면 터치로 키보드 숨김 처리 - 메서드 명 변경: setHideKeyboardAction -> setHidingKeyboardAction * style: 클래스 내 override 메서드의 순서 변경 - 팀 코드 컨벤션에 맞게 순서 재정렬 - override 메서드를 상단에 둔다. * style: ktlint 적용 * fix: root뷰 터치 시 클릭 이벤트가 발생하지 않는 오류 수정 - 원인 분석: ConstraintLayout 내부 Toolbar 및 ScrollView, 그리고 그 자식 View들이 클릭 이벤트를 가로채기 때문에, 바인딩 된 최상단 root 뷰인 ConstraintLayout의 클릭 이벤트가 동작하지 않는다. - 해결 방법: 여러 클릭 이벤트를 가로채는 dispatchTouchEvent 메서드를 오버라이드하여, 터치된 부분이 현재 포커스가 되지 않은 View(키보드 바깥 화면) 범위라면, 키보드를 숨기는 동작을 추가하였다. * refactor: 키보드 숨김 동작을 handler 바인딩으로 적용 - LoginHandler 에 화면 터치에 대한 동작을 추가, 화면 터치 시 키보드를 숨김 처리하는 동작을 바인딩으로 설정 - InputMethodManager 인스턴스를 지연초기화하여 저장 * refactor: InputMethodManager 인스턴스를 lazy로 지연 초기화 * fix: 닉네임, 제목 입력 칸의 키보드 액션 버튼 변경 - 키보드의 액션 타입을 Search에서 Done으로 변경 * style: ktlint 적용 * refactor: 타임라인 리팩터링 #232 (#263) * refactor: TimelineViewModelFactory의 생성자 파라미터 추가 - 내부 프로퍼티에 속해있던 TimelineRepository를 생성자 프로퍼티로 변경 * fix: 추억 목록 아이템이 하나일 때의 View 수정 - 아이템 개수가 하나일 때는 타임라인의 선이 나타나지 않도록 변경 * chore: 코루틴 예외 처리 로그에context 출력 * refactor: 메서드 분리 및 순서 재정렬 - 코드 컨벤션: override 메서드는 상단에 위치한다 * refactor: TimelineViewModel 생성 팩토리 메서드 활용 * style: ktlint 적용 * ui: 화면 전환에 사용될 twin animation 효과 생성 * ui: animation 효과 활용하여 화면 전환 애니메이션 적용 * ui: Main 화면의 배경 색을 하얀색(#FFFFFF)으로 지정 * style: ktlint 적용 * feat: 기분 선택 기능 구현 및 스타카토 조회 화면 구조 변경 #191 (#289) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * style: ktlint 적용 * feat: 추억 API 변경사항 반영 및 리팩터링 #259 (#265) * ui: 추억 생성 화면 사진 로드 시 coil 라이브러리 사용 * ui: 삭제 버튼 아이콘 추가 * ui: 추억 생성 화면 사진 삭제 버튼 추가 * feat: 추억 생성 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 생성 화면 사진 삭제 구현 * feat: 추억 수정 화면 사진 첨부 icon 가시성 설정 * ui: 추억 수정 화면 사진 삭제 버튼 추가 * feat: 추억 수정 화면 사진 삭제 버튼 가시성 설정 * feat: 추억 수정 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 수정 화면 사진 삭제 구현 * fix: 추억 생성 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * fix: 추억 수정 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * feat: MemoryRequest dto에 썸네일 사진 url 필드 추가 * feat: 추억 생성 메서드의 시그니처 변경 - MemoryApiService 내 추억 생성 메서드의 시그니처 변경 - 위 변경에 따른 DataSource, Repository, ViewModel의 추억 생성 관련 메서드 시그니처 변경 * feat: 추억 생성 view model 주 생성자로 ImageRepository 주입 * feat: 추억 생성 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 생성 화면) - 추억 생성 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 생성 시 썸네일 사진 url 추가 * refactor: MemoryRequest의 추억 썸네일 사진 기본 인자 값 null로 설정 * feat: 추억 수정 메서드의 시그니처 변경 * feat: 추억 수정 view model 주 생성자로 ImageRepository 주입 * feat: 추억 수정 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 수정 화면) - 추억 수정 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 수정 시 썸네일 사진 url 추가 * refactor: 불필요한 MemoryUpdateRequest 제거 * ui: empty view 캐릭터 이미지 추가 * ui: 추억 설명글 유무에 따른 가시성 설정 * ui: 함께 한 사람들 가시성 gone 으로 설정 - 4차 스프린트 범위에서 제외됨 * feat: 이미지 선택 옵션 추가 (단일 선택 및 다중 선택 지원) * ui: TextInputLayout, TextInputEditText Style 정의 * ui: 추억 생성 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 수정 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 조회 화면 썸네일 사진 유무에 따른 가시성 설정 * ui: empty view 캐릭터 이미지 크기 변경 * ui: 앱 이름 Staccato_AN -> Staccato 로 수정 * refactor: 추억 생성 및 수정 화면 메서드 순서 정리 * ui: 제목용 TextInputEditTextStyle 정의 및 적용 * ui: 추억 생성 및 수정 화면 썸네일 coilPlaceHolder 변경 - 이전: shape_place_holder_rectangle - 이후: shape_all_gray1_8dp * refactor: 삭제 다이얼로그 show 메서드 호출 방식 변경 - apply를 사용하지 않는 방식으로 변경 * ui: 코멘트 미지원 안내 view 추가 * feat: 스타카토 생성, 수정 화면 사진 및 완료 버튼 개선 #242 (#291) * feat: (스타카토 생성 화면) 사진 드래그로 순서 변경 기능 구현 * refactor: data 패키지에 S3 이미지 API 분리 적용 * refactor: AttachedPhotoUiModel 및 프로그래스바 추가 * feat: recyclerView에서 지워진 사진의 job cancel 처리 * refactor: editText를 TextInputLayout로 수정 * feat: (스타카토 수정 화면) 사진 드래그로 순서 변경 / 로딩 구현 * refactor: 프로퍼티 네임 변경 및 visitedAt LocalDateTime으로 수정 * style: ktlint 적용 * build: 구글 맵 API 사용에 따른 CI 수정 #296 (#297) * build: 구글 맵 api key를 저장하는 파일을 설정하는 명령어 작성 * refactor: defaults 에 설정된 shell 설정에 따라 추가적인 shell 설정 삭제 * feat: Google Map 연결, 스타카토 목록 조회 API 연결 #54 (#295) * build: google map 의존성 추가 * build: 구글맵 관련 properties ignore 추가 * build: 구글맵 api key 설정 * feat: Google Map 연결 * feat: MainActivity Handler 구현 * ui: 추억 및 스타카토 생성 메뉴 추가 * ui: popup menu style 정의 * feat: 추억 생성 및 수정 menu 연결 - handler 연결 - 메서드 분리 * feat: 위치 권한 요청 구현 - ACCESS_FINE_LOCATION 권한 요청 - ACCESS_COARSE_LOCATION 권한 요청 * feat: 현 위치 표시 * style: MainActivity formatting * feat: locationPermissions 타입 변경 - 이전: List<String> - 이후: Array<String> * feat: MomentLocationDto, MomentLocationResponse 추가 * feat: 스타카토 목록 조회 api service 구현 * feat: 스타카토 목록 조회 data source 구현 * feat: MomentLocation 도메인 모델 구현 * feat: MomentLocationDto를 도메인 모델로 변환하는 mapper 구현 * feat: 스타카토 목록 조회 repository 구현 * feat: 스타카토 목록 조회 view model 구현 * feat: 스타카토 목록을 marker로 표시 * refactor: home 패키지명을 maps로 변경 * feat: 마커 클릭 시 스타카토 상세로 이동 기능 구현 * feat: 스타카토 조회 추억 id, 제목 필드 추가 * feat: 마지막 위치 위경도 찾기 * refactor: 안드로이드 1차 QA 반영 #299 (#301) * refactor: 안드로이드 1차 QA 반영 * refactor: 안드로이드 1차 QA 반영2 * refactor: 안드로이드 1차 QA 반영3 * refactor: 삭제 메시지 변경 * fix: 스타카토 조회 화면 스택 관리 및 ui 수정 #304 (#306) * feat: 지도 화면에서 스타카토 조회 화면으로 이동 시 스택 관리 * feat: 타임라인 화면에서 추억이 존재하지 않을 때 추억 생성 버튼 추가 * ui: 스타카토 조회 화면 툴바 위치 고정 * build: Android CD 적용 #300 (#308) * build: CD 워크플로우 yml 파일 작성 * build: keystore 접근을 위한 build.gradle.kts 파일 설정 * build: 기존 apk 추출 ci 파일 수정 - demo 버전의 apk를 추출 및 배포하는 목적에 맞게 파일 명 수정 - apk 빌드 후 테스트를 수행하는 job 추가 - firebase 앱 배포에 아티팩트 업로드하는 job 추가 * fix: ci 파일에도 keystore 생성 job 추가 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: ci 파일에 키스토어 관련 설정 적용 * fix: 키스토어 관련 명령어 일부 수정 * fix: build.gradle.kts 불필요한 괄호 제거 * fix: keystore.properties 로 부터 프로퍼티를 가져오는 형식 변경 * fix: upload-artifact step에서 빌드 파일의 upload 경로 수정 (#316) upload-artifact 는 defaults 설정의 working-directory 경로가 적용되지 않음 * fix: android cd 재수정 (2차) #317 (#319) * fix: upload-artifact 빌드 파일의 upload 경로 3차 수정 * fix: 배포 시 빌드 파일의 경로 수정 * fix: 빌드 파일의 upload 경로 수정 및 파일이 없는 경우 에러 처리 * fix: 빌드 파일의 upload 경로 4차 수정 * fix: 빌드 파일의 upload 경로 5차 수정 * fix: 빌드 파일의 upload 경로 6차 수정 - 디렉터리 경로 생성 후 upload 실행 * fix: 빌드 파일의 upload 경로 7차 수정 github의 workspace 환경변수(절대경로) 활용 * fix: clean test 제거 및 디버그용 파일 경로 탐색 명령어 추가 * fix: 디버그용 파일 경로 검색 명령어 수정 * fix: 디버그용 파일 경로 검색 명령어 삭제 * fix: 디버그용 파일 검색 명령어 삭제 및 업로드 파일 경로명 수정 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 기능 구현 #314 (#324) * feat: MainActivity에서 주소를 가져오는 로직 삭제 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 로직 구현 * refactor: 메서드 순서 정렬 * refactor: 스타카토 조회 화면 ViewPager2 적용 및 UI 아이콘 개선 #318 (#320) * refactor: 아이콘 추가 및 UI 개선 * feat: 스타카토 상세 사진 Viewpager 적용 * feat: 스타카토 상세 사진 Viewpager에 dot indicator 추가 * style: ktLint Format * feat: 메인 지도 화면에서 스타카토 생성하는 플로우 구현 #321 (#327) * feat: 날짜로 추억 목록 불러오는 getMemories API 추가 * feat: 메인에서 스타카토 생성 시 추억 목록 선택 가능 * feat: 스타카토 생성 시 역지오코딩과 추억 선택 연동 * build: debug와 release로 buildTypes 분리 (#329) - appName, appId, baseUrl 분리 - release에 난독화 적용 * build: debug 와 release 배포 분기에 따른 CD 수정 - CD에 대한 트리거 재설정 : main 브랜치에 대한 push 및 pr * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 #326 (#330) * refactor: 지도 화면 onResume에서 스타카토 목록 load * refactor: 스타카토 목록 로드 메서드명 변경 - 이전: loadMoments - 이후: loadStaccatos * feat: 공유 view model에 스타카토 목록 업데이트 상태 추가 * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 * feat: 지도 로드 시 현위치로 이동하도록 구현 * build: ci 및 cd 파일 수정 ci - 불필요한 gradle 빌드 및 테스트 제거 cd - 타겟 브랜치 develop 제거 * feat: 댓글 조회, 생성, 삭제 기능 구현 #290 (#331) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * ui: xml 컨벤션에 맞추어진 타 사용자의 댓글 ui 구성 * feat: 댓글 API의 DTO 작성 * feat: 댓글 API Service 작성 * feat: 댓글 CRUD DataSource 작성 * refactor: CommentApiService 각 메서드의 반환 값을 Response로 변경 * feat: CommentApiService 를 create * feat: CommentDataSource 구현체 생성 * refactor: 댓글 Dto 클래스 네이밍 변경 - VisitLogDto -> CommentDto * refactor: CommentDto 의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * refactor: VisitLog 도메인 모델 클래스의 네이밍 변경 - VisitLog -> Comment * refactor: Comment 도메인 모델의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * feat: 새로운 댓글 도메인 모델 생성 * feat: CommentRepository 작성 * feat: Domain 모델과 DTO 모델을 변환해주는 Mapper 작성 - CommentDto를 Comment로 변환하는 메서드를 CommentMapper.kt로 이동 * feat: CommentRepository의 기본 구현체 작성 * feat: 댓글 ViewModel, Factory 작성 및 Comment 불러오기 구현 * ui: ViewModel 데이터바인딩 및 빈 댓글 문구에 대한 strings 설정 * feat: CommentsViewModel 활용 및 옵저빙 * feat: 댓글 조회, 생성, 삭제 기능 구현 * chore: ktlint 적용 * feat: 추억 생성 및 수정 이미지 로딩 중 표시 및 저장 버튼 비활성화 #332 (#334) * feat: 추억 생성 이미지 로딩 중 표시 * feat: 추억 수정 이미지 로딩 중 표시 * feat: 추억 생성 및 수정 이미지 로딩 중 저장 버튼 비활성화 * style: formatting * refactor: 댓글 화면 개선 및 리팩터링 #333 (#335) * fix: merge conflicts 해결 * fix: 글자 수 제한 500자로 수정 * style: ktlint 체크 * build: CD 수정 - 구글 플레이스토어 업로드 스텝 추가 --------- Co-authored-by: hxeyexn <[email protected]> Co-authored-by: Somin Lee <[email protected]> Co-authored-by: Hyeyeon Gong <[email protected]> Co-authored-by: s6m1n <[email protected]>
Junyoung-WON
added a commit
that referenced
this issue
Aug 28, 2024
* build: 프로젝트 생성 및 의존성 추가 * chore: 사용자 기능 및 권한 추가 * chore: gitignore 재설정 * chore: gitigonre .idea/ 추가 * build: develop-an 브랜치의 CI 설정 #3 (#10) * build: android-ci.yml 파일 생성 * chore: 오타 및 개행 수정 * chore: working-directory 수정 * build: ktLint 적용 및 format * ui: 디자인 시스템 구현 #11 (#44) * ui: color 정의 * ui: shape, selector 추가 * ui: icon 추가 * ui: font family 추가 - pretendard regular, medium, semibold, bold 추가 * ui: typography 정의 * ui: strings 정의 * ui: bottom sheet drag handle drawable 추가 * ui: styles 정의 * ui: detail toolbar 구현 - 상세 화면에서 사용 * ui: dialog, bottom sheet 구현 - 여행 및 방문 기록 삭제 dialog - 사진 등록 bottom sheet * ui: 사진 첨부 layout 구현 * feat: 삭제 다이얼로그, 사진 첨부 바텀 시트 fragment 추가 * ui: 세로모드로 고정 * build: data binding 의존성 추가 * style: strings resource 순서 정렬 * style: formatting * ui: plus icon 추가 * feat: jetpack navigation 및 바텀시트 프래그먼트 추가 #12 (#15) * build: androidx.navigation 및 dataBinding 의존성 추가 * feat: Binding 화면 클래스 및 bottomSheetNavigation 추가 * feat: TimelineFragment 임시 화면 추가 * feat: TravelFragment 임시 화면 추가 * feat: TravelCreationFragment 임시 화면 추가 * feat: VisitFragment 임시 화면 추가 * feat: VisitCreationFragment 임시 화면 추가 * feat: (여행, 방문 기록) 수정 화면 추가 * feat: (여행, 방문 기록) 생성 화면 이동 구현 * feat: BottomSheetController 설정 및 Navigation 이동 구현 * feat: 뒤로가기 버튼 클릭 시 BottomSheet, Toast 작동 구현 * feat: 여행, 방문 기록 생성을 위한 액티비티 추가 및 이동 구현 * feat: 여행, 방문 기록 수정을 위한 액티비티 추가 및 이동 구현 * build: 중복된 dataBinding 제거 * feat: 공통 이미지 로딩 BindingAdapter 설정 #33 (#41) * build: dataBinding 사용 설정 * feat: 이미지 로딩 바인딩 어댑터 설정 - Glide, Coil 바인딩 어댑터를 각각 작성 - placeholder 설정 * style: ktlint check - import 순서 조정 * fix: attribute 개수에 맞추어 BindingAdapter의 value 재설정 * style: 마지막 줄 개행 추가 * feat: placeHolder를 필수 속성으로 변경 및 coil 이미지 로딩 코드 수정 - placeHolder를 ImageView의 필수 속성으로 지정 - Coil BindingAdapter에서 url이 null인 경우에도 이미지를 로드하는 동작이 수행되도록 수정 * ui: 상단바 색상 변경 * build: develop-an의 CI 설정 수정 #38 (#39) - Git Action에 Secret으로 저장된 LOCAL_PROPERTIES_API_KEY를 변수로 가져온다. - 가져온 변수를 echo를 활용하여 local.properties에 설정한다. * build: develop-an 브랜치의 CI 파일 문법 오류 수정 #45 (#46) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * �fix: android-ci.yml 파일의 명령어 수정 #47 (#48) LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 * fix: develop-an 브랜치의 CI 파일 명령어 재수정 #47 (#49) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 --------- Co-authored-by: Somin Lee <[email protected]> * fix: 문자열 임을 명시하고 환경변수 설정 위치 조정 * fix: local.properties 생성 시점 수정 * feat: 데이터 패키지 설정 #13 (#35) * build: 서버 base url의 local.properties 사용 설정 및 BuildConfig 설정 * feat: Retrofit Client 작성 * fix: Merge Conflict 해결 - build.gradle.kts(project, app)의 ktlint 의존성 충돌 해결 - 버전 카탈로그 플러그인 충돌 해결 * feat: DTO 클래스 작성 * style: ktlint check - 불필요한 import 제거 - 개행 조정 - 콤마 추가 * feat: SerialName 어노테이션의 값을 camelCase로 수정 * refactor: DTO 클래스의 이름 수정 - API 요청으로 직접 보내거나 들어오는 JSON의 경우 DTO 클래스명 뒤에 Request/Response 를 붙이도록 설정 - JSON 안에 속성 값으로 들어가는 JSON은 DTO 클래스명 뒤에 Dto를 붙이도록 설정 * feat: 누락된 Dto 클래스 추가 TimelineResponse.kt - 타임라인 조회 시 여행 상세 목록을 불러올 때 사용되는 DTO 클래스 - TimelineTravelDto 리스트를 갖는다 * style: ktlint check * fix: const 키워드 제거 --------- Co-authored-by: hxeyexn <[email protected]> * feat: 둥근 모서리의 이미지를 로드하는 BindingAdapters 추가 #58 (#59) * feat: 둥근 모서리로 이미지를 로딩하는 Glide 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - glideRoundedCornerImageUrl: 출력하고자 하는 이미지 url - glidePlaceHolder: placeHolder의 url - glideRoundingRadius: 모서리의 둥근 정도를 Int로 설정 * feat: 둥근 모서리로 이미지를 로딩하는 Coil 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - coilRoundedCornerImageUrl: 출력하고자 하는 이미지 url - coilPlaceHolder: placeHolder의 url - coilRoundingRadius: 모서리의 둥근 정도를 Float으로 설정 * fix: centerCrop 설정을 BindingAdapter 에 위임 - xml 속성으로 centerCrop을 주게 되면 Round Corner가 제대로 적용되지 않는 현상 발생 - Glide의 api로 제공되는 centerCrop() 메서드를 활용 * ui: 타임라인 프래그먼트(BottomSheet) 구현 #55 (#71) * ui: 타임라인 View xml 파일 작성 - 타임라인에 나타날 여행 상세 아이템 xml 작성 - 썸네일 사진 유무에 따라 뷰를 구분 - 타임라인이 나타날 fragment xml 작성 * feat: 타임라인 여행 상세 아이템 UI 모델 생성 * ui: 썸네일이 없는 여행상세 아이템의 margin 조정 * ui: Timeline RecyclerView의 layoutManager 설정 * ui: xml에서의 UiModel 데이터 바인딩 설정 * feat: ViewHolder 작성 - 썸네일 사진 유무에 따라 다른 ViewHolder로 구분 - 공통된 속성을 정의한 TimelineViewHolder 추상클래스 생성 * feat: TimelineRepository Interface 생성 * feat: 임시 TimelineRepository 구현체 생성 * feat: TimelineViewModel 및 Factory 생성 * feat: TimelineViewType 작성 * feat: TimelineAdapter 작성 * feat: TimelineFragment에 ViewModel과 Adapter 구현 * feat: 이미지 로딩 PlaceHolder drawable 추가 및 적용 * feat: 임시 데이터 연결 * ui: Timeline fragment 의 세부 설정 조정 * ui: Timeline의 Item xml 변경 - 뷰 타입을 3개로 분할: 첫 번째 아이템, 중간 아이템, 마지막 아이템 - 이에 따라 xml 파일 추가 및 view 수정 * feat: ViewType 변경에 따른 Adapter 및 ViewHolder 수정 * refactor: 불필요한 View 및 ViewHolder 제거 * feat: 여행 click 에 대한 event handler 생성 및 설정 * refactor: drawable 이름을 네이밍 컨벤션에 맞게 수정 * ui: RecyclerView의 마진 속성을 패딩 속성으로 변경 * feat: 바텀 시트 디자인 변경 및 툴바와의 상호작용 구현 * ui: 타임라인 글귀 추가 * style: ktlint check * ui: 둥근 모서리의 이미지로 변경 * ui: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 구현 #52 (#74) * ui: typography.body textSize 1sp 씩 증가 * feat: DeleteDialogFragment에 Handler 추가 * feat: 툴바의 수정, 삭제 버튼 제어를 위한 ToolbarHandler 추가 * feat: 방문 상세 화면을 위한 VisitDetailUiModel 추가 * ui: PlaceHolder를 위한 xml 파일 추가 * feat: 방문 기록 상세 화면을 위한 VisitAdapter 및 VisitViewHolder 구현 * feat: 임시 VisitViewModel와 VisitViewModelFactory 추가 * feat: VisitFragment 화면 구현 * feat: 방문 기록에 해당하는 여행 선택을 위한 TravelSelectionFragment 구현 * feat: 방문 기록에 해당하는 날짜 선택을 위한 VisitedAtSelectionFragment 구현 * feat: 방문 기록 생성을 위한 VisitCreationActivity 구현 * feat: 방문 기록 수정을 위한 VisitUpdateActivity 구현 * refactor: DialogHandler를 DeleteDialogFragment의 생성자에서 받도록 수정 * refactor: initVisitUpdateDoneButton 중복 로직 제거 * refactor: VisitViewHolderType 메서드 명 변경 of -> from * refactor: tv_place_name_title을 xml id convention에 맞게 수정 * ui: 여행 화면 구현 #51 (#75) * ui: 함께 간 사람들 item 구현 * ui: 방문 기록 item 구현 * ui: 여행 상세 화면 구현 * ui: 여행 생성 화면 구현 * ui: 여행 수정 화면 구현 * ui: placeholder에 사용할 drawable 추가 * ui: 여행 삭제 완료 string 추가 * feat: 둥근 모서리 이미지 BindingAdapter 구현 * feat: 함께 간 사람들 adapter 구현 * ui: 여행 상세 화면 NestedScrollView로 변경 - 이전: ScrollView - 이후: NestedScrollView * feat: 방문 기록 adapter 구현 * feat: 여행 상세 view 연결 * feat: 함께 간 사람들, 방문 기록 adapter 연결 * feat: 삭제 다이얼로그 handler 구현 * feat: 여행 상세 화면 toolbar handler 구현 - 뒤로가기 - 여행 수정 화면으로 이동 - 삭제 다이얼로그 show * feat: 여행 -> 방문 기록 화면 이동 구현 * ui: DatePickerStyle 추가 - DatePickerStyle, CustomMaterialCalendarStyle 추가 - staccato_blue 투명도 30 추가 * feat: 여행 저장 버튼, 여행 기간 BindingAdapter 추가 * feat: 여행 생성 view 연결 * feat: 여행 수정 view 연결 * style: formatting - Exceeded max line length 해결 - 임시 이미지 URL 변경 * refactor: 기간 선택 로직 메서드 분리 * feat: 타임라인의 API 적용 및 MainActivity의 Toolbar 제거 #81 (#93) * refactor: UI Model의 패키지 경로 변경 * refactor: API 명세 변경에 따른 TimelineTravelDto 수정 * refactor: repository 메서드 수정 - 서버 요청을 비동기적으로 처리하기 위해 suspend 키워드 삽입 - 기존의 임시 데이터 요청 코드를 위해 load 메서드 분리 * feat: Timeline의 API Service 작성 * feat: DataSource 인터페이스 작성 * feat: TimelineDataSource 구현체 생성 * refactor: 년도에 대한 default parameter 설정 * refactor: DataSource의 요청 메서드 네이밍 수정 * feat: http 통신이 가능하도록 Cleartext Traffic 허용 설정 * feat: Authorization Header를 삽입하기 위한 Interceptor 생성 * feat: Client에 HeaderInterceptor 추가 * refactor: errorBody의 message 속성 이름 변경 * feat: 도메인 모델 작성 * feat: Response(dto)에서 도메인 모델로 변환하는 확장함수 구현 * feat: 도메인 모델에서 UI 모델로 변환하는 확장함수 구현 * feat: Repository 수정 및 ViewModel 데이터 연결 * ui: MainActivity의 상단 툴바 제거 * refactor: ViewType에 viewType 속성 추가 및 when에서의 enum 활용 * refactor: Timeline의 공통 ViewHolder를 sealed class로 변경 * style: ktlint check 수행 * fix: Response 데이터의 nullable 속성에 맞추어 DTO 수정 및 누락된 DTO 추가 * fix: 데이터가 비어있는 경우(초기)에만 새로운 여행상세 목록을 받도록 수정 * refactor: lazy 로 지연 초기화 및 timelineService가 하나의 인스턴스로 관리되도록 수정 * fix: Travel의 description에 nullable 속성 추가 API 명세서 잘 좀 보자 제발 * refactor: create 메서드를 private으로 변경 Client 클래스에서 Service를 create 하여 제공 및 캐싱하기 때문에, 불필요한 인스턴스를 생성하지 않도록 create를 public으로 두지 않는 것이 좋다. * refactor: LocalDateConverters의 패키지 경로 수정 * refactor: 파일의 이름 수정 * style: ktlint check * refactor: 에러 메시지 상수화 * feat: 특정 여행 상세 조회 api 연결 #82 (#97) * feat: 특정 여행 상세 조회 api service 구현 * feat: 썸네일, 소개 타입 변경 및 기본 인자 설정 - 변경 data class : TravelResponse, TravelUiModel - 이전: String - 이후: String? * refactor: MatesUiModel 네이밍 변경 MatesUiModel이 공통적으로 사용될 예정이므로 MemberUiModel로 변경 - 이전: MatesUiModel - 이후: MemberUiModel * refactor: VisitUiModel 네이밍 변경 - 여행 상세 방문 기록에 사용되는 UiModel 이름을 명시적으로 변경 - 이전: VisitUiModel - 이후: TravelVisitUiModel * feat: 특정 여행 상세 조회에 사용할 domain model 추가 * feat: Api 응답 핸들링 로직 구현 * feat: 특정 여행 상세 조회 data source 구현 * feat: 특정 여행 상세 조회 repository 구현 * feat: 특정 여행 상세 조회 api 연결 * feat: 특정 여행 상세 조회 로직 매개변수 추가 - 타임라인에서 선택된 여행 id를 매개변수로 받도록 변경 * refactor: ApiResponseHandler 이름 오타 수정 * refactor: 에러 메세지 상수화 * feat: 특정 여행 상세 조회 시그니처 변경 - HeaderInterceptor 적용으로 authorization 매개변수 제거 * style: formatting * feat: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 API 연결 #79 (#99) * feat: VisitApiService 인터페이스 및 관련 data class 추가 * feat: VisitRepository, RemoteVisitDataSource 및 관련 class 추가 * feat: 각 Visit 화면들의 ViewModelFactory 구현 * feat: 각 Visit 화면들의 UiModel 클래스 및 Mapper 추가 * feat: 여행 선택 및 방문 날짜 선택을 위한 BottomSheetDialogFragment 수정 * feat: VisitFragment API 연결 * feat: VisitCreationActivity API 연결 * feat: VisitUpdateActivity API 연결 준비 * refactor: visitApiService를 StaccatoClient object로 이동 * refactor: TravelVisit 클래스의 visitImage 변수 nullable하게 수정 * refactor: VisitApiService의 중복된 @Header 제거 * refactor: 방문 생성 성공 시 created id를 가져오도록 리팩터링 * chore: 변수명 visitImage로 수정 및 ktLint 적용 * refactor: 여행 수정 완료 동작 구현 및 VisitUpdateActivity 함수 분리 * feat: 여행 생성 api 연결 #98 (#104) * feat: 여행 생성 api service 구현 * feat: 여행 생성 data source 구현 * feat: 방문 기록 썸네일 타입 변경 및 기본 인자 설정 - 변경 data class : TravelVisitDto, TravelVisit, TravelVisitUiModel - 이전: String - 이후: String? * build: converter scalars 의존성 추가 * feat: 여행 생성 ApiService 반환값 및 DataSource 시그니처 변경 - 여행 생성 ApiService 반환값 변경 - DataSource 시그니처 변경 - TravelCreation DomainModel 구현 - TravelCreation Dto 변환 Mapper 구현 * feat: Client에 ScalarsConvert 추가 - Header 값을 읽어오기 위해 ScalarsConvert 추가 * feat: 여행 생성 repository 구현 * feat: 여행 생성 api 연결 * feat: TravelViewModel 생성자 변경 - 이전: travelId를 TravelViewModel 생성자로 넣어줌 - 이후: travelId를 loadTravel()의 매개변수로 넣어줌 * ui: map 화면 변경 * refactor: 컨벤션 통일 및 패키지 정리 #112 (#118) * refactor: bind 네임스페이스 적용 * refactor: BindingAdapters 메서드명 변경 * refactor: 컨벤션 맞게 xml 파일 이름 변경 * refactor: data 패키지 구조 정리 * refactor: RemoteVisitDataSource 컨벤션 따라 네이밍 변경 * refactor: 네트워킹 관련 메서드 이름 변경 - api service, data source, repository * refactor: presentation 패키지 구조 정리 * refactor: message utils 생성 및 적용 Co-authored-by: s6m1n <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * build: develop-an의 CI 테스트 자동화 추가 및 데모 APK 추출 #78 (#92) * build: test 자동화 Job 추가 * build: local.properties 생성 시점 변경 * build: 디버그 APK를 빌드하여 업로드하는 workflow 작성 * fix: test Job과 APK build Job에 local.properties 생성 동작 추가 * build: read 전용 권한 제거 * build: Firebase Analytics, Crashlytics 설정 #136 (#143) * build: Firebase Analytics, Crashlytics 의존성 추가 * chore: google-service.json ignore * feat: 특정 여행 상세 수정 api 연결 #109 (#146) * feat: 여행 수정 api service 구현 * feat: 여행 수정 data source 구현 * feat: 여행 수정 repository 구현 * feat: 여행 수정 화면 현재 데이터 로딩 기능 구현 * refactor: 컨벤션 따라 여행 api service의 수정 메서드명 변경 - 이전: updateTravel - 이후: putTravel * feat: 특정 여행 상세 수정 api 연결 * refactor: memberImage 타입 변경 및 기본 인자 설정 * refactor: MembersDto 삭제 * refactor: TravelCreationUiModel.kt 삭제 * refactor: TravelCreation 이름 변경 - 이전: TravelCreation - 이후: NewTravel * refactor: api 명세서 변경에 따른 도메인 모델 수정 및 여행 코드 리팩터링 #151 (#152) * refactor: nickName 변수명 변경 - 이전: nickName - 이후: nickname * ui: 여행 수정 화면 이미지 속성 수정 - glide -> coil 이용 - scaleType : fitXY -> centerCrop * style: import 정렬 * feat: 여행 상세 -> 방문 상세로 이동 시 여행 id 전달 * feat: 방문기록 조회 dto 수정 - 방문기록 조회 도메인 변경으로 인해 방문 기록이 조회되지 않음 - 따라서 api 명세서와 일치하도록 dto 수정하여 오류 해결 * refactor: 여행 생성을 위한 viewModel 메서드 분리 * refactor: 여행 조회를 위한 viewModel 메서드 분리 * feat: 여행 수정 handler 구현 * refactor: 여행 default id 변경 - 이전: -1L - 이후: 0L * refactor: TravelHandler 구현 위치 변경 - 이전: TravelViewModel - 이후: TravelFragment * style: 컨벤션에 맞게 TravelFragment의 메서드 순서 수정 * refactor: TravelFragment의 travelId 초기화 방식 변경 * feat: 여행 생성 및 수정 error toast 구현 * feat: 방문 생성 화면, 방문 수정 화면에서 갤러리 사진 불러오기 구현 #150 (#155) * feat: PhotoAttachFragment에 PhotoAttachHandler 연결 * feat: PhotoAttachFragment 앨범 접근 권한 관련 로직 구현 - API level 33 이상 : READ_MEDIA_IMAGES - API level 33 이하 : READ_EXTERNAL_STORAGE - ActivityResultLauncher를 이용한 권한 요청 - 권한 거부 시, 설정으로 이동하는 스낵바 띄우기 * feat: PhotoAttachFragment 앨범에서 불러온 이미지의 URI 추출하기 * feat: 불러온 이미지의 URI를 호스트 Activity로 전달 - OnUrisSelectedListener 인터페이스 추가 * feat: Uri를 File로 변환하는 메서드 파일 추가 * refactor: pr 리뷰 반영 * refactor: pr 리뷰 반영2 * build: develop-an의 android-ci 수정 #115 (#160) - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: android-ci 환경변수 생성 위치 조정 (#164) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * build: bash 쉘에 맞는 명령어 활용 #115 (#165) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * fix: bash 쉘에 적합한 명령어 형식으로 변경 * feat: 특정 여행 상세 삭제 api 연결 #153 (#167) * feat: 특정 여행 삭제 api service 구현 * feat: 특정 여행 삭제 data source 구현 * feat: 특정 여행 삭제 repository 구현 * feat: 특정 여행 삭제 기능 api 연결 * feat: error handling 방식 수정 - 서버에서 들어오는 error body의 status와 message를 활용하는 방식으로 변경 * refactor: DialogHandler를 독립적으로 관리 * refactor: api path 상수 활용 * refactor: BuildConfig에 token 정의 * refactor: DEFAULT_VALUE 상수 제거 * feat: 여행 생성 기능 api 수정 #169 (#178) * feat: onUrisSelected 매개변수 가변인자로 변경 * feat: 여행 생성 화면 갤러리 이미지 로딩 기능 구현 * refactor: 이미지 선택 리스너 초기화 메서드명 오타 수정 * refactor: 스낵바 액션 설정 코드 간소화 * feat: TravelRequest 의 여행 썸네일 필드 제거 * refactor: 여행 썸네일 이미지 변수명 수정 * feat: 이미지 전송 기능 구현 * refactor: image url 변수명 변경 - 변수 끝에 url이 오도록 * feat: 여행 생성 progressBar 구현 * ui: 사진 첨부 아이콘 가시성 설정 * feat: 여행 상세 수정 기능 api 변경 및 여행 리팩터링 #180 (#181) * feat: 여행 수정 화면 갤러리 이미지 로딩 기능 구현 * feat: URL 및 URI 기반 이미지 로딩 BindingAdapter 구현 * feat: 이미지 전송 기능 구현 * feat: 여행 수정 progressBar 구현 * fix: 삭제 불가능한 여행 삭제 시도 관련 에러 토스트 문제 해결 삭제 불가능한 여행을 삭제하려고 시도 -> 방문 조회 -> 뒤로 가기 버튼 클릭 -> 삭제 불가능 에러 토스트가 다시 뜨는 문제가 발생해 이를 해결 * refactor: TravelCreationViewModel의 imageUrl 변수 제거 * ui: 여행 상세 내 방문 기록 이미지 scaleType 속성 설정 * ui: 여행 생성 썸네일 이미지 scaleType 속성 설정 * fix: 여행 소개 미입력 시 여행이 생성 되지 않는 오류 해결 * refactor: 타임라인 화면 리팩터링 #162 (#179) * ui: 타임라인 RecyclerView의 크기 조정 및 여백 수정 * feat: Activity와 Fragment 간 데이터를 공유하는 공유 ViewModel 생성 * feat: 공유 ViewModel을 이용하여 타임라인 업데이트 여부를 공유 * refactor: RecyclerView.Adapter에서 ListAdapter로 변환 * refactor: 처음 타임라인을 불러오는 동작을 ViewModel 초기화 시에 수행 * fix: ListAdapter 수정 - 불필요한 travels 프로퍼티와 getItemCounts 메서드 제거 - currentList를 사용하는 것으로 변경 * refactor: 에러 핸들링 방식 수정 및 ViewModel 수정 - TimelineDefaultRepository로 네이밍 변경 - ApiResponseHandler와 ResponseResult를 이용하여 에러 핸들링 처리 - TimelineViewModel 에러 메시지 LiveData 사용 - 그 외 repository, dataSource 프로퍼티 이름 수정하여 통일 * refactor: MutableLiveData의 값 업데이트를 setValue로 변경 및 메서드 분리 * style: ktlint 적용 * feat: 3차 스프린트에서 수정된 방문 기록 상세 API 연결 #163 (#183) * feat: 방문 상세 생성 API 연결 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 방문 기록 생성 및 수정 시 로딩과 토스트 추가 * feat: 닉네임을 활용한 로그인 기능 구현 #124 (#172) * ui: 로그인 화면 구성 - 로그인 화면에서 사용되는 텍스트를 strings에 추가 - 로그인 버튼 스타일에 대한 style 생성 - xml 임시로 작성 * ui: 앱 로고 삽입 및 margin 조정 - 임시 로고 이미지 저장 - 로고 크기 및 마진 조정 * feat: 로그인 API Service 작성 및 Retrofit 객체 생성 * feat: 로그인 DataSource 작성 * feat: 로그인 Repository 생성 * feat: 사용자 정보를 저장하는 SharedPreferences Manager 생성 - 토큰 값 불러오기 및 저장 - 추후 사용자 닉네임, 사용자 프로필 이미지 등의 정보 저장 가능 * feat: Application 생성 및 사용자 정보 Preferences Manager 캐싱 * ui: Splash Screen 화면 구성을 위한 테마 생성 * feat: Preferences 로부터 사용자 토큰 값을 가져와 헤더에 추가하도록 변경 * refactor: Repository 네이밍 통일 * refactor: DataSource 기본 인자 추가 * feat: LoginViewModel 및 Handler 작성 * feat: LoginViewModel 을 생성하는 ViewModel Factory 작성 * feat: LoginActivity 작성 및 양방향 데이터 바인딩 적용 * feat: StaccatoApplication과 LoginActivity 설정 및 LoginActivity를 시작 화면으로 변경 * style: 불필요한 namespace 제거 및 lint 확인 * refactor: LoginViewModel과 Factory를 viewmodel 패키지로 분리 * refactor: TimelineViewModel과 Factory를 viewmodel 패키지로 분리 * style: ktlint 적용 * fix: 불필요한 ConverterFactory 제거 - 더 이상 사용하지 않는 text/plain 변환용 ScalarsConverterFactory 제거 * feat: 닉네임 로그인 요청 및 응답에 대한 DTO 작성 * refactor: 로그인 요청, 응답 시 DTO 활용 * fix: 토큰 값을 불러오고 및 저장하는 동작의 비동기 처리 및 화면 전환 개선 * refactor: 토큰 값을 캐싱하여 저장하는 TokenManager 생성 및 적용 - 매번 runBlocking을 통해 Preference에 저장된 토큰 값을 불러오는 것은 네트워크 성능을 저하시킨다. - 따라서, token 값을 캐싱하여 저장하는 TokenManager를 활용한다. - 첫 네트워크 요청 시에만 토큰을 불러오는 작업을 동기적으로 처리하기 위해 Main Thread가 Blocking 된다. - TokenManager가 Preference로부터 가져온 토큰을 캐싱하여 저장한다. - 이후 요청부터는 캐시된 토큰을 가져오므로 Main Thread가 Blocking 되지 않는다. * style: ktlint 적용 * feat: Night 모드 비활성화 * refactor: 여행 기간 날짜 형식 변환을 BindingAdapter에서 수행 - TimelineTravelUiModel 프로퍼티 수정 - UiModel의 여행기간 날짜를 LocalDate로 갖도록 통일 - 추후 날짜 관련 UI가 변경되었을 때 확장성 고려 - BindingAdapters에 날짜 형식 변환해주는 메서드 작성 * chore: 주석 처리된 Log 코드 삭제 * style: xml View의 ID 네이밍 컨벤션 적용 * ui: 앱 심볼 로고 추가 및 스플래시 스크린에 적용 * feat: 방문 상세 생성 API 연결 * ui: 배경 색을 흰 색으로 지정 * feat: 키보드 활성화 상태에서 화면 터치 시 키보드를 내리는 기능 추가 * style: ktlint 적용 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * fix: merge 과정에서 발생한 id값 네이밍 충돌 해결 * build: 앱 version code와 version name 수정 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 스플래시 스크린 시간 조정 및 데모 시연용 토큰 활성화 * fix: 동일한 사진이 여러 장 업로드되는 버그 수정 * feat: 기존 로그인 기능으로 롤백 --------- Co-authored-by: somin <[email protected]> * fix: 테스트 배포를 위한 버그 수정 #198 (#219) * style: formatting * fix: 무한 로딩 오류 수정 * fix: 여행 생성 오류 수정 * add: 앱 아이콘 변경 * ui: timeline empty view 추가 * feat: timeline empty view 가시성 설정 * ui: 여행 내 방문 기록 empty view 추가 및 가시성 설정 * ui: 방문 기록 내 로그 미지원 기능 view 추가 * feat: 사진 첨부 카메라 미지원 기능 알림 추가 * ui: 필수값 표기 style 정의 * ui: 여행 생성 및 수정 필수값 표기 추가 * ui: 방문 기록 생성 및 수정 필수값 표기 추가 * feat: 생성, 수정, 로그인 시 다중 요청 전송을 막기 위한 화면 터치 제한 * feat: 장소 생성의 사진 첨부 리사이클러뷰 구현 - 사진 추가 & 삭제 구현 - GridLayout으로 변경 - 사진 중복 없이 최대 5장으로 제한 - 새로 추가된 사진이 기존 사진 뒤에 더해지도록 구현 * chore: 방문 생성 화면 rv_photo_attach로 xml id 수정 * ui: app icon 및 splash icon 변경 * refactor: xml ID 네이밍 컨벤션 적용 --------- Co-authored-by: somin <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * �refactor: 도메인명 변경에 따라 travel을 memory로 수정 #217 (#231) * refactor: 패키지명 travel -> memory로 수정 * refactor: dto의 TravelMapper 를 MemoryMapper 로 네이밍 변경 * refactor: 여행(현 추억) 생성 response dto 네이밍 변경 - TravelCreationResponse -> MemoryCreationResponse * refactor: 여행(현 추억) request dto 네이밍 변경 - TravelRequest -> MemoryRequest * refactor: 여행(현 추억) 조회 response dto 네이밍 변경 - TravelResponse -> MemoryResponse * refactor: 여행(현 추억) 수정 request dto 네이밍 변경 - TravelUpdateRequest -> MemoryUpdateRequest * refactor: 여행(현 추억) 내 방문 dto 네이밍 변경 - TravelVisitDto -> MemoryVisitDto * refactor: 타임라인 여행(현 추억) item의 dto 네이밍 변경 - TimelineTravelDto -> TimelineMemoryDto * refactor: 여행(현 추억) ApiService 네이밍 변경 - TravelApiService -> MemoryApiService * refactor: 여행(현 추억) DataSource 네이밍 변경 - TravelDataSource -> MemoryDataSource - TravelRemoteDataSource -> MemoryRemoteDataSource * refactor: 여행(현 추억) Repository 네이밍 변경 - TravelRepository -> MemoryRepository - TravelDefaultRepository -> MemoryDefaultRepository * style: TimelineMapper import 재정렬 * refactor: NewTravel 도메인명을 NewMemory로 변경 * refactor: Travel 도메인명을 Memory로 변경 * refactor: TravelVisit 도메인명을 MemoryVisit으로 변경 * refactor: presentation의 TravelMapper 명 변경 - TravelMapper -> MemoryMapper * refactor: 여행(현 추억) ui 모델명 변경 - TravelUiModel -> MemoryUiModel - TravelVisitUiModel -> MemoryVisitUiModel * refactor: 여행(현 추억) view model 명 변경 - TravelViewModel -> MemoryViewModel - TravelViewModelFactory -> MemoryViewModelFactory * refactor: MemoryApiService의 Path 변경 - travel을 memory로 변경 - travels을 memories로 변경 * refactor: Memory 관련 dto 변수명 변경 - travel을 memory로 변경 * refactor: Timeline Dto의 Memory 관련 변수명 변경 - travel을 memory로 변경 - travels를 memories로 변경 * refactor: Memory 관련 도메인 모델의 변수명 변경 - travel을 memory로 변경 * refactor: Memory 관련 ui 모델의 변수명 변경 - travel을 memory로 변경 * refactor: data layer의 Memory 관련 함수 및 변수명 변경 - travel을 memory로 변경 * refactor: 방문 생성 request dto의 travelId 변수명 변경 - travelId -> memoryId * refactor: 여행(현 추억) 조회 view model 및 fragment의 네이밍 변경 - travel -> memory * refactor: fragment_travel 의 리소스 네이밍 변경 - travel -> memory - strings.xml의 리소스명 변경 * refactor: TravelCreationActivity 네이밍 변경 - TravelCreationActivity -> MemoryCreationActivity * refactor: 여행(현 추억) 생성의 ViewModel 관련 네이밍 변경 - TravelCreationViewModel -> MemoryCreationViewModel - TravelCreationViewModelFactory -> MemoryCreationViewModelFactory - 관련 함수 및 변수명 변경 - travel -> memory * refactor: 여행(현 추억) 생성, 수정에 관한 xml 리소스 명 변경 - travel -> memory - strings.xml 의 관련 리소스 수정 * refactor: 여행(현 추억) 수정 Activity, Handler 의 네이밍 변경 - travel -> memory * refactor: 여행(현 추억) 수정 ViewModel 의 네이밍 변경 - 관련 함수 및 변수 명 변경 - travel -> memory - Factory 클래스명 변경 * refactor: 여행(현 추억) 생성, 수정에서의 파일 변환 메서드명 변경 - travel -> memory - 자식 파일 명 상수화 * refactor: Timeline 의 UI 모델 및 Travel ID Key 의 리네이밍 - travel -> memory 로 일괄 변경 * refactor: presentation/timeline 내 travel 도메인명 변경 - travel -> memory - TimelineMapper 내 domain model -> ui model 변환 메서드명 변경 * refactor: dto/MemoryMapper 내 domain 변환 메서드명 변경 - dto/MemoryMapper 내 domain model을 dto로 변환하는 메서드명 변경 - travel -> memory * refactor: dummyTravel 을 dummyMemory 로 변경 * refactor: MainActivity 내 travel을 memory로 변경 * refactor: activity_main 내 travel을 memory로 변경 * refactor: TimeLineApiService 내 GET 메서드 path 수정 - travels -> memories * refactor: MemoryFragment 내 travel 을 memory 로 변경 - MemoryFragment, fragment_memory 내 travel 을 memory 로 변경 * refactor: MemoryViewModel 내 error message 변수명 변경 - TRAVEL_ERROR_MESSAGE -> MEMORY_ERROR_MESSAGE * refactor: navigation graph 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 extra 키 값 수정 - TRAVEL_ID_KEY -> MEMORY_ID_KEY - TRAVEL_TITLE_KEY -> MEMORY_TITLE_KEY * refactor: VisitFragment 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 travel을 memory로 변경 * refactor: VisitUpdateViewModel 내 travel을 memory로 변경 * refactor: VisitTravelUiModel을 VisitMemoryUiModel로 변경 * refactor: 방문 수정 xml의 travel을 memory로 변경 * refactor: 여행(현 추억) 선택 xml 내 travel을 memory로 변경 * refactor: 여행 선택 바텀 시트 내 travel을 memory로 변경 - TravelSelectionFragment -> MemorySelectionFragment 로 수정 - TravelSelectionHandler -> MemorySelectionHandler 로 수정 - TravelSelectionFragment 내 메서드명 수정 - TravelSelectionHandler 내 매개변수명 수정 * refactor: VisitRepository와 구현체의 메서드 내 매개변수명 통일 * refactor: VisitsViewHolder 내 travel을 memory로 변경 * refactor: VisitCreationActivity 내 travel을 memory로 변경 * refactor: VisitCreationViewModel 내 travel을 memory로 변경 * refactor: 방문 생성 xml 내 travel을 memory로 변경 * refactor: BindingAdapters 내 travel을 memory로 변경 * refactor: strings 내 travel을 memory로 변경 - strings 내 '여행'을 '추억'으로 수정 Co-authored-by: Junyoung-WON <[email protected]> Co-authored-by: s6m1n <[email protected]> * refactor: visit, visit log 도메인명 수정 #218 (#237) * refactor: VisitApiService 내 visit을 moment 로 변경 - 파일명 수정 - path 수정 - 메서드명 수정 - 매개변수명 수정 * refactor: data/visit 패키지명을 moment로 변경 * refactor: data/dto/visit 패키지명을 moment로 변경 * refactor: VisitCreationRequest 네이밍 변경 - 이전: VisitCreationRequest - 이후: MomentCreationRequest * style: StaccatoClient import 재정렬 * refactor: VisitCreationResponse 네이밍 변경 - 이전: VisitCreationResponse - 이후: MomentCreationResponse - 필드명 변경 : visitId -> momentId * refactor: VisitResponse 네이밍 변경 - 이전: VisitResponse - 이후: MomentResponse - VisitResponse 필드 내 visit을 moment로 변경 - VisitResponse 필드 내 visitLogs SerialName을 comments로 변경 * refactor: VisitUpdateRequest 네이밍 변경 - 이전: VisitUpdateRequest - 이후: MomentUpdateRequest - VisitUpdateRequest 필드 내 visit을 moment로 변경 * refactor: VisitLogDto 내 SerialName 변경 - visitLogId를 commentId로 변경 * refactor: MemoryResponse 내 visits SerialName 변경 - visits를 moments로 변경 * refactor: VisitCreationViewModel 내 FORM_DATA_NAME 변경 - 이전: visitImageFiles - 이후: momentImageFiles * refactor: MemoryVisitDto 내 visit를 moment로 변경 - MemoryVisitDto -> MemoryMomentDto로 변경 - visitId -> momentId로 변경 - visitImageUrl -> momentImageUrl로 변경 * refactor: VisitRemoteDataSource 내 visit을 moment로 변경 - VisitRemoteDataSource -> MomentRemoteDataSource로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: MomentRepository 및 구현체 내 visit을 moment로 변경 - VisitRepository -> MomentRepository로 변경 - VisitDefaultRepository -> MomentDefaultRepository로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: Visit 도메인 모델명 및 변수명 변경 - Visit -> Moment로 변경 - visitLogs -> comments로 변경 * refactor: Memory 도에인 모델의 visits을 moments로 변경 * refactor: MemoryVisit 도메인 모델 내 visit을 moment로 변경 * refactor: MemoryResponse의 visits 필드명을 moments로 변경 * refactor: dto/mapper/VisitMapper를 MomentMapper로 변경 * refactor: presentation/visit 패키지명을 moment로 변경 * refactor: VisitViewHolderType 네이밍 변경 - VisitViewHolderType -> MomentViewHolderType - enum 상수명 변경 - VISIT_DEFAULT -> MOMENT_DEFAULT - MY_VISIT_LOG -> MY_COMMENTS * refactor: VisitViewHolder 네이밍 변경 - VisitViewHolder -> MomentViewHolder - VisitDefaultViewHolder -> MomentDefaultViewHolder - MyVisitLogViewHolder -> MyCommentViewHolder * refactor: VisitAdapter 내 visit을 moment로 변경 - VisitAdapter -> MomentAdapter 로 변경 - visit -> moment 로 변경 * refactor: MomentAdapter 내 visit log를 comments로 변경 * refactor: VisitDetailUiModel 내 visit을 moment로 변경 - VisitDetailUiModel -> MomentDetailUiModel - VisitDefaultUiModel -> MomentDefaultUiModel - visitImageUrls -> momentImageUrls * refactor: VisitLogUiModel을 CommentsUiModel로 변경 * refactor: VISIT_ID_KEY extra key id 네이밍 변경 - VISIT_ID_KEY -> MOMENT_ID_KEY * refactor: VisitFragment 내 visit을 moment로 변경 * refactor: VisitViewModel 내 visit을 moment로 변경 - VisitViewModel -> MomentViewModel로 변경 - VisitViewModelFactory -> MomentViewModelFactory로 변경 * refactor: VisitMemoryUiModel 네이밍 변경 - VisitMemoryUiModel -> MomentMemoryUiModel로 변경 * refactor: presentation/visitcreation 패키지명 momentcreation으로 변경 * refactor: VisitCreationActivity 내 visit을 moment로 변경 - VisitCreationActivity -> MomentCreationActivity로 변경 * refactor: VisitCreationHandler 네이밍 변경 - VisitCreationHandler -> MomentCreationHandler로 변경 * refactor: VisitCreationViewModel 내 visit을 moment로 변경 - VisitCreationViewModel -> MomentCreationViewModel로 변경 - 메서드 및 변수명 변경 * refactor: 여행 -> 추억, 방문 기록 -> 스타카토로 도메인명 변경 * feat: s3 api 연결 #239 (#241) * feat: ImageResponse, ImageApiService 구현 * feat: ImageRepository 및 구현체 구현 Co-authored-by: s6m1n <[email protected]> * fix: 추억 기능 버그 수정 #246 (#252) * fix: 일부 EditText 개행 불가 처리 및 키보드 숨김 처리 #247 (#249) * ui: 닉네임과 추억 생성, 수정 제목 입력 시 줄바꿈 제한 * fix: 키보드 활성화 상태에서 빈 화면 터치로 키보드 숨김 처리 - 메서드 명 변경: setHideKeyboardAction -> setHidingKeyboardAction * style: 클래스 내 override 메서드의 순서 변경 - 팀 코드 컨벤션에 맞게 순서 재정렬 - override 메서드를 상단에 둔다. * style: ktlint 적용 * fix: root뷰 터치 시 클릭 이벤트가 발생하지 않는 오류 수정 - 원인 분석: ConstraintLayout 내부 Toolbar 및 ScrollView, 그리고 그 자식 View들이 클릭 이벤트를 가로채기 때문에, 바인딩 된 최상단 root 뷰인 ConstraintLayout의 클릭 이벤트가 동작하지 않는다. - 해결 방법: 여러 클릭 이벤트를 가로채는 dispatchTouchEvent 메서드를 오버라이드하여, 터치된 부분이 현재 포커스가 되지 않은 View(키보드 바깥 화면) 범위라면, 키보드를 숨기는 동작을 추가하였다. * refactor: 키보드 숨김 동작을 handler 바인딩으로 적용 - LoginHandler 에 화면 터치에 대한 동작을 추가, 화면 터치 시 키보드를 숨김 처리하는 동작을 바인딩으로 설정 - InputMethodManager 인스턴스를 지연초기화하여 저장 * refactor: InputMethodManager 인스턴스를 lazy로 지연 초기화 * fix: 닉네임, 제목 입력 칸의 키보드 액션 버튼 변경 - 키보드의 액션 타입을 Search에서 Done으로 변경 * style: ktlint 적용 * refactor: 타임라인 리팩터링 #232 (#263) * refactor: TimelineViewModelFactory의 생성자 파라미터 추가 - 내부 프로퍼티에 속해있던 TimelineRepository를 생성자 프로퍼티로 변경 * fix: 추억 목록 아이템이 하나일 때의 View 수정 - 아이템 개수가 하나일 때는 타임라인의 선이 나타나지 않도록 변경 * chore: 코루틴 예외 처리 로그에context 출력 * refactor: 메서드 분리 및 순서 재정렬 - 코드 컨벤션: override 메서드는 상단에 위치한다 * refactor: TimelineViewModel 생성 팩토리 메서드 활용 * style: ktlint 적용 * ui: 화면 전환에 사용될 twin animation 효과 생성 * ui: animation 효과 활용하여 화면 전환 애니메이션 적용 * ui: Main 화면의 배경 색을 하얀색(#FFFFFF)으로 지정 * style: ktlint 적용 * feat: 기분 선택 기능 구현 및 스타카토 조회 화면 구조 변경 #191 (#289) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * style: ktlint 적용 * feat: 추억 API 변경사항 반영 및 리팩터링 #259 (#265) * ui: 추억 생성 화면 사진 로드 시 coil 라이브러리 사용 * ui: 삭제 버튼 아이콘 추가 * ui: 추억 생성 화면 사진 삭제 버튼 추가 * feat: 추억 생성 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 생성 화면 사진 삭제 구현 * feat: 추억 수정 화면 사진 첨부 icon 가시성 설정 * ui: 추억 수정 화면 사진 삭제 버튼 추가 * feat: 추억 수정 화면 사진 삭제 버튼 가시성 설정 * feat: 추억 수정 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 수정 화면 사진 삭제 구현 * fix: 추억 생성 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * fix: 추억 수정 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * feat: MemoryRequest dto에 썸네일 사진 url 필드 추가 * feat: 추억 생성 메서드의 시그니처 변경 - MemoryApiService 내 추억 생성 메서드의 시그니처 변경 - 위 변경에 따른 DataSource, Repository, ViewModel의 추억 생성 관련 메서드 시그니처 변경 * feat: 추억 생성 view model 주 생성자로 ImageRepository 주입 * feat: 추억 생성 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 생성 화면) - 추억 생성 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 생성 시 썸네일 사진 url 추가 * refactor: MemoryRequest의 추억 썸네일 사진 기본 인자 값 null로 설정 * feat: 추억 수정 메서드의 시그니처 변경 * feat: 추억 수정 view model 주 생성자로 ImageRepository 주입 * feat: 추억 수정 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 수정 화면) - 추억 수정 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 수정 시 썸네일 사진 url 추가 * refactor: 불필요한 MemoryUpdateRequest 제거 * ui: empty view 캐릭터 이미지 추가 * ui: 추억 설명글 유무에 따른 가시성 설정 * ui: 함께 한 사람들 가시성 gone 으로 설정 - 4차 스프린트 범위에서 제외됨 * feat: 이미지 선택 옵션 추가 (단일 선택 및 다중 선택 지원) * ui: TextInputLayout, TextInputEditText Style 정의 * ui: 추억 생성 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 수정 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 조회 화면 썸네일 사진 유무에 따른 가시성 설정 * ui: empty view 캐릭터 이미지 크기 변경 * ui: 앱 이름 Staccato_AN -> Staccato 로 수정 * refactor: 추억 생성 및 수정 화면 메서드 순서 정리 * ui: 제목용 TextInputEditTextStyle 정의 및 적용 * ui: 추억 생성 및 수정 화면 썸네일 coilPlaceHolder 변경 - 이전: shape_place_holder_rectangle - 이후: shape_all_gray1_8dp * refactor: 삭제 다이얼로그 show 메서드 호출 방식 변경 - apply를 사용하지 않는 방식으로 변경 * ui: 코멘트 미지원 안내 view 추가 * feat: 스타카토 생성, 수정 화면 사진 및 완료 버튼 개선 #242 (#291) * feat: (스타카토 생성 화면) 사진 드래그로 순서 변경 기능 구현 * refactor: data 패키지에 S3 이미지 API 분리 적용 * refactor: AttachedPhotoUiModel 및 프로그래스바 추가 * feat: recyclerView에서 지워진 사진의 job cancel 처리 * refactor: editText를 TextInputLayout로 수정 * feat: (스타카토 수정 화면) 사진 드래그로 순서 변경 / 로딩 구현 * refactor: 프로퍼티 네임 변경 및 visitedAt LocalDateTime으로 수정 * style: ktlint 적용 * build: 구글 맵 API 사용에 따른 CI 수정 #296 (#297) * build: 구글 맵 api key를 저장하는 파일을 설정하는 명령어 작성 * refactor: defaults 에 설정된 shell 설정에 따라 추가적인 shell 설정 삭제 * feat: Google Map 연결, 스타카토 목록 조회 API 연결 #54 (#295) * build: google map 의존성 추가 * build: 구글맵 관련 properties ignore 추가 * build: 구글맵 api key 설정 * feat: Google Map 연결 * feat: MainActivity Handler 구현 * ui: 추억 및 스타카토 생성 메뉴 추가 * ui: popup menu style 정의 * feat: 추억 생성 및 수정 menu 연결 - handler 연결 - 메서드 분리 * feat: 위치 권한 요청 구현 - ACCESS_FINE_LOCATION 권한 요청 - ACCESS_COARSE_LOCATION 권한 요청 * feat: 현 위치 표시 * style: MainActivity formatting * feat: locationPermissions 타입 변경 - 이전: List<String> - 이후: Array<String> * feat: MomentLocationDto, MomentLocationResponse 추가 * feat: 스타카토 목록 조회 api service 구현 * feat: 스타카토 목록 조회 data source 구현 * feat: MomentLocation 도메인 모델 구현 * feat: MomentLocationDto를 도메인 모델로 변환하는 mapper 구현 * feat: 스타카토 목록 조회 repository 구현 * feat: 스타카토 목록 조회 view model 구현 * feat: 스타카토 목록을 marker로 표시 * refactor: home 패키지명을 maps로 변경 * feat: 마커 클릭 시 스타카토 상세로 이동 기능 구현 * feat: 스타카토 조회 추억 id, 제목 필드 추가 * feat: 마지막 위치 위경도 찾기 * refactor: 안드로이드 1차 QA 반영 #299 (#301) * refactor: 안드로이드 1차 QA 반영 * refactor: 안드로이드 1차 QA 반영2 * refactor: 안드로이드 1차 QA 반영3 * refactor: 삭제 메시지 변경 * fix: 스타카토 조회 화면 스택 관리 및 ui 수정 #304 (#306) * feat: 지도 화면에서 스타카토 조회 화면으로 이동 시 스택 관리 * feat: 타임라인 화면에서 추억이 존재하지 않을 때 추억 생성 버튼 추가 * ui: 스타카토 조회 화면 툴바 위치 고정 * build: Android CD 적용 #300 (#308) * build: CD 워크플로우 yml 파일 작성 * build: keystore 접근을 위한 build.gradle.kts 파일 설정 * build: 기존 apk 추출 ci 파일 수정 - demo 버전의 apk를 추출 및 배포하는 목적에 맞게 파일 명 수정 - apk 빌드 후 테스트를 수행하는 job 추가 - firebase 앱 배포에 아티팩트 업로드하는 job 추가 * fix: ci 파일에도 keystore 생성 job 추가 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: ci 파일에 키스토어 관련 설정 적용 * fix: 키스토어 관련 명령어 일부 수정 * fix: build.gradle.kts 불필요한 괄호 제거 * fix: keystore.properties 로 부터 프로퍼티를 가져오는 형식 변경 * fix: upload-artifact step에서 빌드 파일의 upload 경로 수정 (#316) upload-artifact 는 defaults 설정의 working-directory 경로가 적용되지 않음 * fix: android cd 재수정 (2차) #317 (#319) * fix: upload-artifact 빌드 파일의 upload 경로 3차 수정 * fix: 배포 시 빌드 파일의 경로 수정 * fix: 빌드 파일의 upload 경로 수정 및 파일이 없는 경우 에러 처리 * fix: 빌드 파일의 upload 경로 4차 수정 * fix: 빌드 파일의 upload 경로 5차 수정 * fix: 빌드 파일의 upload 경로 6차 수정 - 디렉터리 경로 생성 후 upload 실행 * fix: 빌드 파일의 upload 경로 7차 수정 github의 workspace 환경변수(절대경로) 활용 * fix: clean test 제거 및 디버그용 파일 경로 탐색 명령어 추가 * fix: 디버그용 파일 경로 검색 명령어 수정 * fix: 디버그용 파일 경로 검색 명령어 삭제 * fix: 디버그용 파일 검색 명령어 삭제 및 업로드 파일 경로명 수정 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 기능 구현 #314 (#324) * feat: MainActivity에서 주소를 가져오는 로직 삭제 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 로직 구현 * refactor: 메서드 순서 정렬 * refactor: 스타카토 조회 화면 ViewPager2 적용 및 UI 아이콘 개선 #318 (#320) * refactor: 아이콘 추가 및 UI 개선 * feat: 스타카토 상세 사진 Viewpager 적용 * feat: 스타카토 상세 사진 Viewpager에 dot indicator 추가 * style: ktLint Format * feat: 메인 지도 화면에서 스타카토 생성하는 플로우 구현 #321 (#327) * feat: 날짜로 추억 목록 불러오는 getMemories API 추가 * feat: 메인에서 스타카토 생성 시 추억 목록 선택 가능 * feat: 스타카토 생성 시 역지오코딩과 추억 선택 연동 * build: debug와 release로 buildTypes 분리 (#329) - appName, appId, baseUrl 분리 - release에 난독화 적용 * build: debug 와 release 배포 분기에 따른 CD 수정 - CD에 대한 트리거 재설정 : main 브랜치에 대한 push 및 pr * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 #326 (#330) * refactor: 지도 화면 onResume에서 스타카토 목록 load * refactor: 스타카토 목록 로드 메서드명 변경 - 이전: loadMoments - 이후: loadStaccatos * feat: 공유 view model에 스타카토 목록 업데이트 상태 추가 * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 * feat: 지도 로드 시 현위치로 이동하도록 구현 * build: ci 및 cd 파일 수정 ci - 불필요한 gradle 빌드 및 테스트 제거 cd - 타겟 브랜치 develop 제거 * feat: 댓글 조회, 생성, 삭제 기능 구현 #290 (#331) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * ui: xml 컨벤션에 맞추어진 타 사용자의 댓글 ui 구성 * feat: 댓글 API의 DTO 작성 * feat: 댓글 API Service 작성 * feat: 댓글 CRUD DataSource 작성 * refactor: CommentApiService 각 메서드의 반환 값을 Response로 변경 * feat: CommentApiService 를 create * feat: CommentDataSource 구현체 생성 * refactor: 댓글 Dto 클래스 네이밍 변경 - VisitLogDto -> CommentDto * refactor: CommentDto 의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * refactor: VisitLog 도메인 모델 클래스의 네이밍 변경 - VisitLog -> Comment * refactor: Comment 도메인 모델의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * feat: 새로운 댓글 도메인 모델 생성 * feat: CommentRepository 작성 * feat: Domain 모델과 DTO 모델을 변환해주는 Mapper 작성 - CommentDto를 Comment로 변환하는 메서드를 CommentMapper.kt로 이동 * feat: CommentRepository의 기본 구현체 작성 * feat: 댓글 ViewModel, Factory 작성 및 Comment 불러오기 구현 * ui: ViewModel 데이터바인딩 및 빈 댓글 문구에 대한 strings 설정 * feat: CommentsViewModel 활용 및 옵저빙 * feat: 댓글 조회, 생성, 삭제 기능 구현 * chore: ktlint 적용 * feat: 추억 생성 및 수정 이미지 로딩 중 표시 및 저장 버튼 비활성화 #332 (#334) * feat: 추억 생성 이미지 로딩 중 표시 * feat: 추억 수정 이미지 로딩 중 표시 * feat: 추억 생성 및 수정 이미지 로딩 중 저장 버튼 비활성화 * style: formatting * refactor: 댓글 화면 개선 및 리팩터링 #333 (#335) * fix: merge conflicts 해결 * fix: 글자 수 제한 500자로 수정 * style: ktlint 체크 * build: CD 수정 - 구글 플레이스토어 업로드 스텝 추가 * build: defaultConfig의 버전 코드와 이름 수정 versionCode : 2 -> 3 versionName : 1.1 -> 1.0.0 (배포 버전과 동일) --------- Co-authored-by: hxeyexn <[email protected]> Co-authored-by: s6m1n <[email protected]>
Junyoung-WON
added a commit
that referenced
this issue
Sep 9, 2024
* build: 프로젝트 생성 및 의존성 추가 * chore: 사용자 기능 및 권한 추가 * chore: gitignore 재설정 * chore: gitigonre .idea/ 추가 * build: develop-an 브랜치의 CI 설정 #3 (#10) * build: android-ci.yml 파일 생성 * chore: 오타 및 개행 수정 * chore: working-directory 수정 * build: ktLint 적용 및 format * ui: 디자인 시스템 구현 #11 (#44) * ui: color 정의 * ui: shape, selector 추가 * ui: icon 추가 * ui: font family 추가 - pretendard regular, medium, semibold, bold 추가 * ui: typography 정의 * ui: strings 정의 * ui: bottom sheet drag handle drawable 추가 * ui: styles 정의 * ui: detail toolbar 구현 - 상세 화면에서 사용 * ui: dialog, bottom sheet 구현 - 여행 및 방문 기록 삭제 dialog - 사진 등록 bottom sheet * ui: 사진 첨부 layout 구현 * feat: 삭제 다이얼로그, 사진 첨부 바텀 시트 fragment 추가 * ui: 세로모드로 고정 * build: data binding 의존성 추가 * style: strings resource 순서 정렬 * style: formatting * ui: plus icon 추가 * feat: jetpack navigation 및 바텀시트 프래그먼트 추가 #12 (#15) * build: androidx.navigation 및 dataBinding 의존성 추가 * feat: Binding 화면 클래스 및 bottomSheetNavigation 추가 * feat: TimelineFragment 임시 화면 추가 * feat: TravelFragment 임시 화면 추가 * feat: TravelCreationFragment 임시 화면 추가 * feat: VisitFragment 임시 화면 추가 * feat: VisitCreationFragment 임시 화면 추가 * feat: (여행, 방문 기록) 수정 화면 추가 * feat: (여행, 방문 기록) 생성 화면 이동 구현 * feat: BottomSheetController 설정 및 Navigation 이동 구현 * feat: 뒤로가기 버튼 클릭 시 BottomSheet, Toast 작동 구현 * feat: 여행, 방문 기록 생성을 위한 액티비티 추가 및 이동 구현 * feat: 여행, 방문 기록 수정을 위한 액티비티 추가 및 이동 구현 * build: 중복된 dataBinding 제거 * feat: 공통 이미지 로딩 BindingAdapter 설정 #33 (#41) * build: dataBinding 사용 설정 * feat: 이미지 로딩 바인딩 어댑터 설정 - Glide, Coil 바인딩 어댑터를 각각 작성 - placeholder 설정 * style: ktlint check - import 순서 조정 * fix: attribute 개수에 맞추어 BindingAdapter의 value 재설정 * style: 마지막 줄 개행 추가 * feat: placeHolder를 필수 속성으로 변경 및 coil 이미지 로딩 코드 수정 - placeHolder를 ImageView의 필수 속성으로 지정 - Coil BindingAdapter에서 url이 null인 경우에도 이미지를 로드하는 동작이 수행되도록 수정 * ui: 상단바 색상 변경 * build: develop-an의 CI 설정 수정 #38 (#39) - Git Action에 Secret으로 저장된 LOCAL_PROPERTIES_API_KEY를 변수로 가져온다. - 가져온 변수를 echo를 활용하여 local.properties에 설정한다. * build: develop-an 브랜치의 CI 파일 문법 오류 수정 #45 (#46) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * �fix: android-ci.yml 파일의 명령어 수정 #47 (#48) LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 * fix: develop-an 브랜치의 CI 파일 명령어 재수정 #47 (#49) * �fix: android-ci.yml 파일의 명령어 수정 LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정 * fix: 파이프라인 제거하여 명령어 수정 --------- Co-authored-by: Somin Lee <[email protected]> * fix: 문자열 임을 명시하고 환경변수 설정 위치 조정 * fix: local.properties 생성 시점 수정 * feat: 데이터 패키지 설정 #13 (#35) * build: 서버 base url의 local.properties 사용 설정 및 BuildConfig 설정 * feat: Retrofit Client 작성 * fix: Merge Conflict 해결 - build.gradle.kts(project, app)의 ktlint 의존성 충돌 해결 - 버전 카탈로그 플러그인 충돌 해결 * feat: DTO 클래스 작성 * style: ktlint check - 불필요한 import 제거 - 개행 조정 - 콤마 추가 * feat: SerialName 어노테이션의 값을 camelCase로 수정 * refactor: DTO 클래스의 이름 수정 - API 요청으로 직접 보내거나 들어오는 JSON의 경우 DTO 클래스명 뒤에 Request/Response 를 붙이도록 설정 - JSON 안에 속성 값으로 들어가는 JSON은 DTO 클래스명 뒤에 Dto를 붙이도록 설정 * feat: 누락된 Dto 클래스 추가 TimelineResponse.kt - 타임라인 조회 시 여행 상세 목록을 불러올 때 사용되는 DTO 클래스 - TimelineTravelDto 리스트를 갖는다 * style: ktlint check * fix: const 키워드 제거 --------- Co-authored-by: hxeyexn <[email protected]> * feat: 둥근 모서리의 이미지를 로드하는 BindingAdapters 추가 #58 (#59) * feat: 둥근 모서리로 이미지를 로딩하는 Glide 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - glideRoundedCornerImageUrl: 출력하고자 하는 이미지 url - glidePlaceHolder: placeHolder의 url - glideRoundingRadius: 모서리의 둥근 정도를 Int로 설정 * feat: 둥근 모서리로 이미지를 로딩하는 Coil 바인딩 어댑터 작성 - 세 속성이 모두 필요하다. - coilRoundedCornerImageUrl: 출력하고자 하는 이미지 url - coilPlaceHolder: placeHolder의 url - coilRoundingRadius: 모서리의 둥근 정도를 Float으로 설정 * fix: centerCrop 설정을 BindingAdapter 에 위임 - xml 속성으로 centerCrop을 주게 되면 Round Corner가 제대로 적용되지 않는 현상 발생 - Glide의 api로 제공되는 centerCrop() 메서드를 활용 * ui: 타임라인 프래그먼트(BottomSheet) 구현 #55 (#71) * ui: 타임라인 View xml 파일 작성 - 타임라인에 나타날 여행 상세 아이템 xml 작성 - 썸네일 사진 유무에 따라 뷰를 구분 - 타임라인이 나타날 fragment xml 작성 * feat: 타임라인 여행 상세 아이템 UI 모델 생성 * ui: 썸네일이 없는 여행상세 아이템의 margin 조정 * ui: Timeline RecyclerView의 layoutManager 설정 * ui: xml에서의 UiModel 데이터 바인딩 설정 * feat: ViewHolder 작성 - 썸네일 사진 유무에 따라 다른 ViewHolder로 구분 - 공통된 속성을 정의한 TimelineViewHolder 추상클래스 생성 * feat: TimelineRepository Interface 생성 * feat: 임시 TimelineRepository 구현체 생성 * feat: TimelineViewModel 및 Factory 생성 * feat: TimelineViewType 작성 * feat: TimelineAdapter 작성 * feat: TimelineFragment에 ViewModel과 Adapter 구현 * feat: 이미지 로딩 PlaceHolder drawable 추가 및 적용 * feat: 임시 데이터 연결 * ui: Timeline fragment 의 세부 설정 조정 * ui: Timeline의 Item xml 변경 - 뷰 타입을 3개로 분할: 첫 번째 아이템, 중간 아이템, 마지막 아이템 - 이에 따라 xml 파일 추가 및 view 수정 * feat: ViewType 변경에 따른 Adapter 및 ViewHolder 수정 * refactor: 불필요한 View 및 ViewHolder 제거 * feat: 여행 click 에 대한 event handler 생성 및 설정 * refactor: drawable 이름을 네이밍 컨벤션에 맞게 수정 * ui: RecyclerView의 마진 속성을 패딩 속성으로 변경 * feat: 바텀 시트 디자인 변경 및 툴바와의 상호작용 구현 * ui: 타임라인 글귀 추가 * style: ktlint check * ui: 둥근 모서리의 이미지로 변경 * ui: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 구현 #52 (#74) * ui: typography.body textSize 1sp 씩 증가 * feat: DeleteDialogFragment에 Handler 추가 * feat: 툴바의 수정, 삭제 버튼 제어를 위한 ToolbarHandler 추가 * feat: 방문 상세 화면을 위한 VisitDetailUiModel 추가 * ui: PlaceHolder를 위한 xml 파일 추가 * feat: 방문 기록 상세 화면을 위한 VisitAdapter 및 VisitViewHolder 구현 * feat: 임시 VisitViewModel와 VisitViewModelFactory 추가 * feat: VisitFragment 화면 구현 * feat: 방문 기록에 해당하는 여행 선택을 위한 TravelSelectionFragment 구현 * feat: 방문 기록에 해당하는 날짜 선택을 위한 VisitedAtSelectionFragment 구현 * feat: 방문 기록 생성을 위한 VisitCreationActivity 구현 * feat: 방문 기록 수정을 위한 VisitUpdateActivity 구현 * refactor: DialogHandler를 DeleteDialogFragment의 생성자에서 받도록 수정 * refactor: initVisitUpdateDoneButton 중복 로직 제거 * refactor: VisitViewHolderType 메서드 명 변경 of -> from * refactor: tv_place_name_title을 xml id convention에 맞게 수정 * ui: 여행 화면 구현 #51 (#75) * ui: 함께 간 사람들 item 구현 * ui: 방문 기록 item 구현 * ui: 여행 상세 화면 구현 * ui: 여행 생성 화면 구현 * ui: 여행 수정 화면 구현 * ui: placeholder에 사용할 drawable 추가 * ui: 여행 삭제 완료 string 추가 * feat: 둥근 모서리 이미지 BindingAdapter 구현 * feat: 함께 간 사람들 adapter 구현 * ui: 여행 상세 화면 NestedScrollView로 변경 - 이전: ScrollView - 이후: NestedScrollView * feat: 방문 기록 adapter 구현 * feat: 여행 상세 view 연결 * feat: 함께 간 사람들, 방문 기록 adapter 연결 * feat: 삭제 다이얼로그 handler 구현 * feat: 여행 상세 화면 toolbar handler 구현 - 뒤로가기 - 여행 수정 화면으로 이동 - 삭제 다이얼로그 show * feat: 여행 -> 방문 기록 화면 이동 구현 * ui: DatePickerStyle 추가 - DatePickerStyle, CustomMaterialCalendarStyle 추가 - staccato_blue 투명도 30 추가 * feat: 여행 저장 버튼, 여행 기간 BindingAdapter 추가 * feat: 여행 생성 view 연결 * feat: 여행 수정 view 연결 * style: formatting - Exceeded max line length 해결 - 임시 이미지 URL 변경 * refactor: 기간 선택 로직 메서드 분리 * feat: 타임라인의 API 적용 및 MainActivity의 Toolbar 제거 #81 (#93) * refactor: UI Model의 패키지 경로 변경 * refactor: API 명세 변경에 따른 TimelineTravelDto 수정 * refactor: repository 메서드 수정 - 서버 요청을 비동기적으로 처리하기 위해 suspend 키워드 삽입 - 기존의 임시 데이터 요청 코드를 위해 load 메서드 분리 * feat: Timeline의 API Service 작성 * feat: DataSource 인터페이스 작성 * feat: TimelineDataSource 구현체 생성 * refactor: 년도에 대한 default parameter 설정 * refactor: DataSource의 요청 메서드 네이밍 수정 * feat: http 통신이 가능하도록 Cleartext Traffic 허용 설정 * feat: Authorization Header를 삽입하기 위한 Interceptor 생성 * feat: Client에 HeaderInterceptor 추가 * refactor: errorBody의 message 속성 이름 변경 * feat: 도메인 모델 작성 * feat: Response(dto)에서 도메인 모델로 변환하는 확장함수 구현 * feat: 도메인 모델에서 UI 모델로 변환하는 확장함수 구현 * feat: Repository 수정 및 ViewModel 데이터 연결 * ui: MainActivity의 상단 툴바 제거 * refactor: ViewType에 viewType 속성 추가 및 when에서의 enum 활용 * refactor: Timeline의 공통 ViewHolder를 sealed class로 변경 * style: ktlint check 수행 * fix: Response 데이터의 nullable 속성에 맞추어 DTO 수정 및 누락된 DTO 추가 * fix: 데이터가 비어있는 경우(초기)에만 새로운 여행상세 목록을 받도록 수정 * refactor: lazy 로 지연 초기화 및 timelineService가 하나의 인스턴스로 관리되도록 수정 * fix: Travel의 description에 nullable 속성 추가 API 명세서 잘 좀 보자 제발 * refactor: create 메서드를 private으로 변경 Client 클래스에서 Service를 create 하여 제공 및 캐싱하기 때문에, 불필요한 인스턴스를 생성하지 않도록 create를 public으로 두지 않는 것이 좋다. * refactor: LocalDateConverters의 패키지 경로 수정 * refactor: 파일의 이름 수정 * style: ktlint check * refactor: 에러 메시지 상수화 * feat: 특정 여행 상세 조회 api 연결 #82 (#97) * feat: 특정 여행 상세 조회 api service 구현 * feat: 썸네일, 소개 타입 변경 및 기본 인자 설정 - 변경 data class : TravelResponse, TravelUiModel - 이전: String - 이후: String? * refactor: MatesUiModel 네이밍 변경 MatesUiModel이 공통적으로 사용될 예정이므로 MemberUiModel로 변경 - 이전: MatesUiModel - 이후: MemberUiModel * refactor: VisitUiModel 네이밍 변경 - 여행 상세 방문 기록에 사용되는 UiModel 이름을 명시적으로 변경 - 이전: VisitUiModel - 이후: TravelVisitUiModel * feat: 특정 여행 상세 조회에 사용할 domain model 추가 * feat: Api 응답 핸들링 로직 구현 * feat: 특정 여행 상세 조회 data source 구현 * feat: 특정 여행 상세 조회 repository 구현 * feat: 특정 여행 상세 조회 api 연결 * feat: 특정 여행 상세 조회 로직 매개변수 추가 - 타임라인에서 선택된 여행 id를 매개변수로 받도록 변경 * refactor: ApiResponseHandler 이름 오타 수정 * refactor: 에러 메세지 상수화 * feat: 특정 여행 상세 조회 시그니처 변경 - HeaderInterceptor 적용으로 authorization 매개변수 제거 * style: formatting * feat: 방문 기록, 방문 기록 생성, 방문 기록 수정 화면 API 연결 #79 (#99) * feat: VisitApiService 인터페이스 및 관련 data class 추가 * feat: VisitRepository, RemoteVisitDataSource 및 관련 class 추가 * feat: 각 Visit 화면들의 ViewModelFactory 구현 * feat: 각 Visit 화면들의 UiModel 클래스 및 Mapper 추가 * feat: 여행 선택 및 방문 날짜 선택을 위한 BottomSheetDialogFragment 수정 * feat: VisitFragment API 연결 * feat: VisitCreationActivity API 연결 * feat: VisitUpdateActivity API 연결 준비 * refactor: visitApiService를 StaccatoClient object로 이동 * refactor: TravelVisit 클래스의 visitImage 변수 nullable하게 수정 * refactor: VisitApiService의 중복된 @Header 제거 * refactor: 방문 생성 성공 시 created id를 가져오도록 리팩터링 * chore: 변수명 visitImage로 수정 및 ktLint 적용 * refactor: 여행 수정 완료 동작 구현 및 VisitUpdateActivity 함수 분리 * feat: 여행 생성 api 연결 #98 (#104) * feat: 여행 생성 api service 구현 * feat: 여행 생성 data source 구현 * feat: 방문 기록 썸네일 타입 변경 및 기본 인자 설정 - 변경 data class : TravelVisitDto, TravelVisit, TravelVisitUiModel - 이전: String - 이후: String? * build: converter scalars 의존성 추가 * feat: 여행 생성 ApiService 반환값 및 DataSource 시그니처 변경 - 여행 생성 ApiService 반환값 변경 - DataSource 시그니처 변경 - TravelCreation DomainModel 구현 - TravelCreation Dto 변환 Mapper 구현 * feat: Client에 ScalarsConvert 추가 - Header 값을 읽어오기 위해 ScalarsConvert 추가 * feat: 여행 생성 repository 구현 * feat: 여행 생성 api 연결 * feat: TravelViewModel 생성자 변경 - 이전: travelId를 TravelViewModel 생성자로 넣어줌 - 이후: travelId를 loadTravel()의 매개변수로 넣어줌 * ui: map 화면 변경 * refactor: 컨벤션 통일 및 패키지 정리 #112 (#118) * refactor: bind 네임스페이스 적용 * refactor: BindingAdapters 메서드명 변경 * refactor: 컨벤션 맞게 xml 파일 이름 변경 * refactor: data 패키지 구조 정리 * refactor: RemoteVisitDataSource 컨벤션 따라 네이밍 변경 * refactor: 네트워킹 관련 메서드 이름 변경 - api service, data source, repository * refactor: presentation 패키지 구조 정리 * refactor: message utils 생성 및 적용 Co-authored-by: s6m1n <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * build: develop-an의 CI 테스트 자동화 추가 및 데모 APK 추출 #78 (#92) * build: test 자동화 Job 추가 * build: local.properties 생성 시점 변경 * build: 디버그 APK를 빌드하여 업로드하는 workflow 작성 * fix: test Job과 APK build Job에 local.properties 생성 동작 추가 * build: read 전용 권한 제거 * build: Firebase Analytics, Crashlytics 설정 #136 (#143) * build: Firebase Analytics, Crashlytics 의존성 추가 * chore: google-service.json ignore * feat: 특정 여행 상세 수정 api 연결 #109 (#146) * feat: 여행 수정 api service 구현 * feat: 여행 수정 data source 구현 * feat: 여행 수정 repository 구현 * feat: 여행 수정 화면 현재 데이터 로딩 기능 구현 * refactor: 컨벤션 따라 여행 api service의 수정 메서드명 변경 - 이전: updateTravel - 이후: putTravel * feat: 특정 여행 상세 수정 api 연결 * refactor: memberImage 타입 변경 및 기본 인자 설정 * refactor: MembersDto 삭제 * refactor: TravelCreationUiModel.kt 삭제 * refactor: TravelCreation 이름 변경 - 이전: TravelCreation - 이후: NewTravel * refactor: api 명세서 변경에 따른 도메인 모델 수정 및 여행 코드 리팩터링 #151 (#152) * refactor: nickName 변수명 변경 - 이전: nickName - 이후: nickname * ui: 여행 수정 화면 이미지 속성 수정 - glide -> coil 이용 - scaleType : fitXY -> centerCrop * style: import 정렬 * feat: 여행 상세 -> 방문 상세로 이동 시 여행 id 전달 * feat: 방문기록 조회 dto 수정 - 방문기록 조회 도메인 변경으로 인해 방문 기록이 조회되지 않음 - 따라서 api 명세서와 일치하도록 dto 수정하여 오류 해결 * refactor: 여행 생성을 위한 viewModel 메서드 분리 * refactor: 여행 조회를 위한 viewModel 메서드 분리 * feat: 여행 수정 handler 구현 * refactor: 여행 default id 변경 - 이전: -1L - 이후: 0L * refactor: TravelHandler 구현 위치 변경 - 이전: TravelViewModel - 이후: TravelFragment * style: 컨벤션에 맞게 TravelFragment의 메서드 순서 수정 * refactor: TravelFragment의 travelId 초기화 방식 변경 * feat: 여행 생성 및 수정 error toast 구현 * feat: 방문 생성 화면, 방문 수정 화면에서 갤러리 사진 불러오기 구현 #150 (#155) * feat: PhotoAttachFragment에 PhotoAttachHandler 연결 * feat: PhotoAttachFragment 앨범 접근 권한 관련 로직 구현 - API level 33 이상 : READ_MEDIA_IMAGES - API level 33 이하 : READ_EXTERNAL_STORAGE - ActivityResultLauncher를 이용한 권한 요청 - 권한 거부 시, 설정으로 이동하는 스낵바 띄우기 * feat: PhotoAttachFragment 앨범에서 불러온 이미지의 URI 추출하기 * feat: 불러온 이미지의 URI를 호스트 Activity로 전달 - OnUrisSelectedListener 인터페이스 추가 * feat: Uri를 File로 변환하는 메서드 파일 추가 * refactor: pr 리뷰 반영 * refactor: pr 리뷰 반영2 * build: develop-an의 android-ci 수정 #115 (#160) - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: android-ci 환경변수 생성 위치 조정 (#164) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * build: bash 쉘에 맞는 명령어 활용 #115 (#165) * build: local.properties 와 google-services.json 설정 - local.properties: 파일 생성 후 secrets로부터 base_url 설정 - google-services.json: firebase android 구성파일 설정을 위해 secrets로부터 생성 * fix: 환경 변수 설정 위치 변경 * fix: bash 쉘에 적합한 명령어 형식으로 변경 * feat: 특정 여행 상세 삭제 api 연결 #153 (#167) * feat: 특정 여행 삭제 api service 구현 * feat: 특정 여행 삭제 data source 구현 * feat: 특정 여행 삭제 repository 구현 * feat: 특정 여행 삭제 기능 api 연결 * feat: error handling 방식 수정 - 서버에서 들어오는 error body의 status와 message를 활용하는 방식으로 변경 * refactor: DialogHandler를 독립적으로 관리 * refactor: api path 상수 활용 * refactor: BuildConfig에 token 정의 * refactor: DEFAULT_VALUE 상수 제거 * feat: 여행 생성 기능 api 수정 #169 (#178) * feat: onUrisSelected 매개변수 가변인자로 변경 * feat: 여행 생성 화면 갤러리 이미지 로딩 기능 구현 * refactor: 이미지 선택 리스너 초기화 메서드명 오타 수정 * refactor: 스낵바 액션 설정 코드 간소화 * feat: TravelRequest 의 여행 썸네일 필드 제거 * refactor: 여행 썸네일 이미지 변수명 수정 * feat: 이미지 전송 기능 구현 * refactor: image url 변수명 변경 - 변수 끝에 url이 오도록 * feat: 여행 생성 progressBar 구현 * ui: 사진 첨부 아이콘 가시성 설정 * feat: 여행 상세 수정 기능 api 변경 및 여행 리팩터링 #180 (#181) * feat: 여행 수정 화면 갤러리 이미지 로딩 기능 구현 * feat: URL 및 URI 기반 이미지 로딩 BindingAdapter 구현 * feat: 이미지 전송 기능 구현 * feat: 여행 수정 progressBar 구현 * fix: 삭제 불가능한 여행 삭제 시도 관련 에러 토스트 문제 해결 삭제 불가능한 여행을 삭제하려고 시도 -> 방문 조회 -> 뒤로 가기 버튼 클릭 -> 삭제 불가능 에러 토스트가 다시 뜨는 문제가 발생해 이를 해결 * refactor: TravelCreationViewModel의 imageUrl 변수 제거 * ui: 여행 상세 내 방문 기록 이미지 scaleType 속성 설정 * ui: 여행 생성 썸네일 이미지 scaleType 속성 설정 * fix: 여행 소개 미입력 시 여행이 생성 되지 않는 오류 해결 * refactor: 타임라인 화면 리팩터링 #162 (#179) * ui: 타임라인 RecyclerView의 크기 조정 및 여백 수정 * feat: Activity와 Fragment 간 데이터를 공유하는 공유 ViewModel 생성 * feat: 공유 ViewModel을 이용하여 타임라인 업데이트 여부를 공유 * refactor: RecyclerView.Adapter에서 ListAdapter로 변환 * refactor: 처음 타임라인을 불러오는 동작을 ViewModel 초기화 시에 수행 * fix: ListAdapter 수정 - 불필요한 travels 프로퍼티와 getItemCounts 메서드 제거 - currentList를 사용하는 것으로 변경 * refactor: 에러 핸들링 방식 수정 및 ViewModel 수정 - TimelineDefaultRepository로 네이밍 변경 - ApiResponseHandler와 ResponseResult를 이용하여 에러 핸들링 처리 - TimelineViewModel 에러 메시지 LiveData 사용 - 그 외 repository, dataSource 프로퍼티 이름 수정하여 통일 * refactor: MutableLiveData의 값 업데이트를 setValue로 변경 및 메서드 분리 * style: ktlint 적용 * feat: 3차 스프린트에서 수정된 방문 기록 상세 API 연결 #163 (#183) * feat: 방문 상세 생성 API 연결 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 방문 기록 생성 및 수정 시 로딩과 토스트 추가 * feat: 닉네임을 활용한 로그인 기능 구현 #124 (#172) * ui: 로그인 화면 구성 - 로그인 화면에서 사용되는 텍스트를 strings에 추가 - 로그인 버튼 스타일에 대한 style 생성 - xml 임시로 작성 * ui: 앱 로고 삽입 및 margin 조정 - 임시 로고 이미지 저장 - 로고 크기 및 마진 조정 * feat: 로그인 API Service 작성 및 Retrofit 객체 생성 * feat: 로그인 DataSource 작성 * feat: 로그인 Repository 생성 * feat: 사용자 정보를 저장하는 SharedPreferences Manager 생성 - 토큰 값 불러오기 및 저장 - 추후 사용자 닉네임, 사용자 프로필 이미지 등의 정보 저장 가능 * feat: Application 생성 및 사용자 정보 Preferences Manager 캐싱 * ui: Splash Screen 화면 구성을 위한 테마 생성 * feat: Preferences 로부터 사용자 토큰 값을 가져와 헤더에 추가하도록 변경 * refactor: Repository 네이밍 통일 * refactor: DataSource 기본 인자 추가 * feat: LoginViewModel 및 Handler 작성 * feat: LoginViewModel 을 생성하는 ViewModel Factory 작성 * feat: LoginActivity 작성 및 양방향 데이터 바인딩 적용 * feat: StaccatoApplication과 LoginActivity 설정 및 LoginActivity를 시작 화면으로 변경 * style: 불필요한 namespace 제거 및 lint 확인 * refactor: LoginViewModel과 Factory를 viewmodel 패키지로 분리 * refactor: TimelineViewModel과 Factory를 viewmodel 패키지로 분리 * style: ktlint 적용 * fix: 불필요한 ConverterFactory 제거 - 더 이상 사용하지 않는 text/plain 변환용 ScalarsConverterFactory 제거 * feat: 닉네임 로그인 요청 및 응답에 대한 DTO 작성 * refactor: 로그인 요청, 응답 시 DTO 활용 * fix: 토큰 값을 불러오고 및 저장하는 동작의 비동기 처리 및 화면 전환 개선 * refactor: 토큰 값을 캐싱하여 저장하는 TokenManager 생성 및 적용 - 매번 runBlocking을 통해 Preference에 저장된 토큰 값을 불러오는 것은 네트워크 성능을 저하시킨다. - 따라서, token 값을 캐싱하여 저장하는 TokenManager를 활용한다. - 첫 네트워크 요청 시에만 토큰을 불러오는 작업을 동기적으로 처리하기 위해 Main Thread가 Blocking 된다. - TokenManager가 Preference로부터 가져온 토큰을 캐싱하여 저장한다. - 이후 요청부터는 캐시된 토큰을 가져오므로 Main Thread가 Blocking 되지 않는다. * style: ktlint 적용 * feat: Night 모드 비활성화 * refactor: 여행 기간 날짜 형식 변환을 BindingAdapter에서 수행 - TimelineTravelUiModel 프로퍼티 수정 - UiModel의 여행기간 날짜를 LocalDate로 갖도록 통일 - 추후 날짜 관련 UI가 변경되었을 때 확장성 고려 - BindingAdapters에 날짜 형식 변환해주는 메서드 작성 * chore: 주석 처리된 Log 코드 삭제 * style: xml View의 ID 네이밍 컨벤션 적용 * ui: 앱 심볼 로고 추가 및 스플래시 스크린에 적용 * feat: 방문 상세 생성 API 연결 * ui: 배경 색을 흰 색으로 지정 * feat: 키보드 활성화 상태에서 화면 터치 시 키보드를 내리는 기능 추가 * style: ktlint 적용 * feat: 방문 상세 수정, 삭제 API 연결 * feat: 방문 기록 생성/수정 시 양방향 데이터 바인딩 적용 * fix: merge 과정에서 발생한 id값 네이밍 충돌 해결 * build: 앱 version code와 version name 수정 * feat: 방문 기록 생성 화면 사진 다중 선택 구현 * feat: 방문 기록 생성 이미지 업로드 구현 * feat: 스플래시 스크린 시간 조정 및 데모 시연용 토큰 활성화 * fix: 동일한 사진이 여러 장 업로드되는 버그 수정 * feat: 기존 로그인 기능으로 롤백 --------- Co-authored-by: somin <[email protected]> * fix: 테스트 배포를 위한 버그 수정 #198 (#219) * style: formatting * fix: 무한 로딩 오류 수정 * fix: 여행 생성 오류 수정 * add: 앱 아이콘 변경 * ui: timeline empty view 추가 * feat: timeline empty view 가시성 설정 * ui: 여행 내 방문 기록 empty view 추가 및 가시성 설정 * ui: 방문 기록 내 로그 미지원 기능 view 추가 * feat: 사진 첨부 카메라 미지원 기능 알림 추가 * ui: 필수값 표기 style 정의 * ui: 여행 생성 및 수정 필수값 표기 추가 * ui: 방문 기록 생성 및 수정 필수값 표기 추가 * feat: 생성, 수정, 로그인 시 다중 요청 전송을 막기 위한 화면 터치 제한 * feat: 장소 생성의 사진 첨부 리사이클러뷰 구현 - 사진 추가 & 삭제 구현 - GridLayout으로 변경 - 사진 중복 없이 최대 5장으로 제한 - 새로 추가된 사진이 기존 사진 뒤에 더해지도록 구현 * chore: 방문 생성 화면 rv_photo_attach로 xml id 수정 * ui: app icon 및 splash icon 변경 * refactor: xml ID 네이밍 컨벤션 적용 --------- Co-authored-by: somin <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> * �refactor: 도메인명 변경에 따라 travel을 memory로 수정 #217 (#231) * refactor: 패키지명 travel -> memory로 수정 * refactor: dto의 TravelMapper 를 MemoryMapper 로 네이밍 변경 * refactor: 여행(현 추억) 생성 response dto 네이밍 변경 - TravelCreationResponse -> MemoryCreationResponse * refactor: 여행(현 추억) request dto 네이밍 변경 - TravelRequest -> MemoryRequest * refactor: 여행(현 추억) 조회 response dto 네이밍 변경 - TravelResponse -> MemoryResponse * refactor: 여행(현 추억) 수정 request dto 네이밍 변경 - TravelUpdateRequest -> MemoryUpdateRequest * refactor: 여행(현 추억) 내 방문 dto 네이밍 변경 - TravelVisitDto -> MemoryVisitDto * refactor: 타임라인 여행(현 추억) item의 dto 네이밍 변경 - TimelineTravelDto -> TimelineMemoryDto * refactor: 여행(현 추억) ApiService 네이밍 변경 - TravelApiService -> MemoryApiService * refactor: 여행(현 추억) DataSource 네이밍 변경 - TravelDataSource -> MemoryDataSource - TravelRemoteDataSource -> MemoryRemoteDataSource * refactor: 여행(현 추억) Repository 네이밍 변경 - TravelRepository -> MemoryRepository - TravelDefaultRepository -> MemoryDefaultRepository * style: TimelineMapper import 재정렬 * refactor: NewTravel 도메인명을 NewMemory로 변경 * refactor: Travel 도메인명을 Memory로 변경 * refactor: TravelVisit 도메인명을 MemoryVisit으로 변경 * refactor: presentation의 TravelMapper 명 변경 - TravelMapper -> MemoryMapper * refactor: 여행(현 추억) ui 모델명 변경 - TravelUiModel -> MemoryUiModel - TravelVisitUiModel -> MemoryVisitUiModel * refactor: 여행(현 추억) view model 명 변경 - TravelViewModel -> MemoryViewModel - TravelViewModelFactory -> MemoryViewModelFactory * refactor: MemoryApiService의 Path 변경 - travel을 memory로 변경 - travels을 memories로 변경 * refactor: Memory 관련 dto 변수명 변경 - travel을 memory로 변경 * refactor: Timeline Dto의 Memory 관련 변수명 변경 - travel을 memory로 변경 - travels를 memories로 변경 * refactor: Memory 관련 도메인 모델의 변수명 변경 - travel을 memory로 변경 * refactor: Memory 관련 ui 모델의 변수명 변경 - travel을 memory로 변경 * refactor: data layer의 Memory 관련 함수 및 변수명 변경 - travel을 memory로 변경 * refactor: 방문 생성 request dto의 travelId 변수명 변경 - travelId -> memoryId * refactor: 여행(현 추억) 조회 view model 및 fragment의 네이밍 변경 - travel -> memory * refactor: fragment_travel 의 리소스 네이밍 변경 - travel -> memory - strings.xml의 리소스명 변경 * refactor: TravelCreationActivity 네이밍 변경 - TravelCreationActivity -> MemoryCreationActivity * refactor: 여행(현 추억) 생성의 ViewModel 관련 네이밍 변경 - TravelCreationViewModel -> MemoryCreationViewModel - TravelCreationViewModelFactory -> MemoryCreationViewModelFactory - 관련 함수 및 변수명 변경 - travel -> memory * refactor: 여행(현 추억) 생성, 수정에 관한 xml 리소스 명 변경 - travel -> memory - strings.xml 의 관련 리소스 수정 * refactor: 여행(현 추억) 수정 Activity, Handler 의 네이밍 변경 - travel -> memory * refactor: 여행(현 추억) 수정 ViewModel 의 네이밍 변경 - 관련 함수 및 변수 명 변경 - travel -> memory - Factory 클래스명 변경 * refactor: 여행(현 추억) 생성, 수정에서의 파일 변환 메서드명 변경 - travel -> memory - 자식 파일 명 상수화 * refactor: Timeline 의 UI 모델 및 Travel ID Key 의 리네이밍 - travel -> memory 로 일괄 변경 * refactor: presentation/timeline 내 travel 도메인명 변경 - travel -> memory - TimelineMapper 내 domain model -> ui model 변환 메서드명 변경 * refactor: dto/MemoryMapper 내 domain 변환 메서드명 변경 - dto/MemoryMapper 내 domain model을 dto로 변환하는 메서드명 변경 - travel -> memory * refactor: dummyTravel 을 dummyMemory 로 변경 * refactor: MainActivity 내 travel을 memory로 변경 * refactor: activity_main 내 travel을 memory로 변경 * refactor: TimeLineApiService 내 GET 메서드 path 수정 - travels -> memories * refactor: MemoryFragment 내 travel 을 memory 로 변경 - MemoryFragment, fragment_memory 내 travel 을 memory 로 변경 * refactor: MemoryViewModel 내 error message 변수명 변경 - TRAVEL_ERROR_MESSAGE -> MEMORY_ERROR_MESSAGE * refactor: navigation graph 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 extra 키 값 수정 - TRAVEL_ID_KEY -> MEMORY_ID_KEY - TRAVEL_TITLE_KEY -> MEMORY_TITLE_KEY * refactor: VisitFragment 내 travel을 memory로 변경 * refactor: VisitUpdateActivity 내 travel을 memory로 변경 * refactor: VisitUpdateViewModel 내 travel을 memory로 변경 * refactor: VisitTravelUiModel을 VisitMemoryUiModel로 변경 * refactor: 방문 수정 xml의 travel을 memory로 변경 * refactor: 여행(현 추억) 선택 xml 내 travel을 memory로 변경 * refactor: 여행 선택 바텀 시트 내 travel을 memory로 변경 - TravelSelectionFragment -> MemorySelectionFragment 로 수정 - TravelSelectionHandler -> MemorySelectionHandler 로 수정 - TravelSelectionFragment 내 메서드명 수정 - TravelSelectionHandler 내 매개변수명 수정 * refactor: VisitRepository와 구현체의 메서드 내 매개변수명 통일 * refactor: VisitsViewHolder 내 travel을 memory로 변경 * refactor: VisitCreationActivity 내 travel을 memory로 변경 * refactor: VisitCreationViewModel 내 travel을 memory로 변경 * refactor: 방문 생성 xml 내 travel을 memory로 변경 * refactor: BindingAdapters 내 travel을 memory로 변경 * refactor: strings 내 travel을 memory로 변경 - strings 내 '여행'을 '추억'으로 수정 Co-authored-by: Junyoung-WON <[email protected]> Co-authored-by: s6m1n <[email protected]> * refactor: visit, visit log 도메인명 수정 #218 (#237) * refactor: VisitApiService 내 visit을 moment 로 변경 - 파일명 수정 - path 수정 - 메서드명 수정 - 매개변수명 수정 * refactor: data/visit 패키지명을 moment로 변경 * refactor: data/dto/visit 패키지명을 moment로 변경 * refactor: VisitCreationRequest 네이밍 변경 - 이전: VisitCreationRequest - 이후: MomentCreationRequest * style: StaccatoClient import 재정렬 * refactor: VisitCreationResponse 네이밍 변경 - 이전: VisitCreationResponse - 이후: MomentCreationResponse - 필드명 변경 : visitId -> momentId * refactor: VisitResponse 네이밍 변경 - 이전: VisitResponse - 이후: MomentResponse - VisitResponse 필드 내 visit을 moment로 변경 - VisitResponse 필드 내 visitLogs SerialName을 comments로 변경 * refactor: VisitUpdateRequest 네이밍 변경 - 이전: VisitUpdateRequest - 이후: MomentUpdateRequest - VisitUpdateRequest 필드 내 visit을 moment로 변경 * refactor: VisitLogDto 내 SerialName 변경 - visitLogId를 commentId로 변경 * refactor: MemoryResponse 내 visits SerialName 변경 - visits를 moments로 변경 * refactor: VisitCreationViewModel 내 FORM_DATA_NAME 변경 - 이전: visitImageFiles - 이후: momentImageFiles * refactor: MemoryVisitDto 내 visit를 moment로 변경 - MemoryVisitDto -> MemoryMomentDto로 변경 - visitId -> momentId로 변경 - visitImageUrl -> momentImageUrl로 변경 * refactor: VisitRemoteDataSource 내 visit을 moment로 변경 - VisitRemoteDataSource -> MomentRemoteDataSource로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: MomentRepository 및 구현체 내 visit을 moment로 변경 - VisitRepository -> MomentRepository로 변경 - VisitDefaultRepository -> MomentDefaultRepository로 변경 - 메서드명 변경 - 매개변수명 변경 * refactor: Visit 도메인 모델명 및 변수명 변경 - Visit -> Moment로 변경 - visitLogs -> comments로 변경 * refactor: Memory 도에인 모델의 visits을 moments로 변경 * refactor: MemoryVisit 도메인 모델 내 visit을 moment로 변경 * refactor: MemoryResponse의 visits 필드명을 moments로 변경 * refactor: dto/mapper/VisitMapper를 MomentMapper로 변경 * refactor: presentation/visit 패키지명을 moment로 변경 * refactor: VisitViewHolderType 네이밍 변경 - VisitViewHolderType -> MomentViewHolderType - enum 상수명 변경 - VISIT_DEFAULT -> MOMENT_DEFAULT - MY_VISIT_LOG -> MY_COMMENTS * refactor: VisitViewHolder 네이밍 변경 - VisitViewHolder -> MomentViewHolder - VisitDefaultViewHolder -> MomentDefaultViewHolder - MyVisitLogViewHolder -> MyCommentViewHolder * refactor: VisitAdapter 내 visit을 moment로 변경 - VisitAdapter -> MomentAdapter 로 변경 - visit -> moment 로 변경 * refactor: MomentAdapter 내 visit log를 comments로 변경 * refactor: VisitDetailUiModel 내 visit을 moment로 변경 - VisitDetailUiModel -> MomentDetailUiModel - VisitDefaultUiModel -> MomentDefaultUiModel - visitImageUrls -> momentImageUrls * refactor: VisitLogUiModel을 CommentsUiModel로 변경 * refactor: VISIT_ID_KEY extra key id 네이밍 변경 - VISIT_ID_KEY -> MOMENT_ID_KEY * refactor: VisitFragment 내 visit을 moment로 변경 * refactor: VisitViewModel 내 visit을 moment로 변경 - VisitViewModel -> MomentViewModel로 변경 - VisitViewModelFactory -> MomentViewModelFactory로 변경 * refactor: VisitMemoryUiModel 네이밍 변경 - VisitMemoryUiModel -> MomentMemoryUiModel로 변경 * refactor: presentation/visitcreation 패키지명 momentcreation으로 변경 * refactor: VisitCreationActivity 내 visit을 moment로 변경 - VisitCreationActivity -> MomentCreationActivity로 변경 * refactor: VisitCreationHandler 네이밍 변경 - VisitCreationHandler -> MomentCreationHandler로 변경 * refactor: VisitCreationViewModel 내 visit을 moment로 변경 - VisitCreationViewModel -> MomentCreationViewModel로 변경 - 메서드 및 변수명 변경 * refactor: 여행 -> 추억, 방문 기록 -> 스타카토로 도메인명 변경 * feat: s3 api 연결 #239 (#241) * feat: ImageResponse, ImageApiService 구현 * feat: ImageRepository 및 구현체 구현 Co-authored-by: s6m1n <[email protected]> * fix: 추억 기능 버그 수정 #246 (#252) * fix: 일부 EditText 개행 불가 처리 및 키보드 숨김 처리 #247 (#249) * ui: 닉네임과 추억 생성, 수정 제목 입력 시 줄바꿈 제한 * fix: 키보드 활성화 상태에서 빈 화면 터치로 키보드 숨김 처리 - 메서드 명 변경: setHideKeyboardAction -> setHidingKeyboardAction * style: 클래스 내 override 메서드의 순서 변경 - 팀 코드 컨벤션에 맞게 순서 재정렬 - override 메서드를 상단에 둔다. * style: ktlint 적용 * fix: root뷰 터치 시 클릭 이벤트가 발생하지 않는 오류 수정 - 원인 분석: ConstraintLayout 내부 Toolbar 및 ScrollView, 그리고 그 자식 View들이 클릭 이벤트를 가로채기 때문에, 바인딩 된 최상단 root 뷰인 ConstraintLayout의 클릭 이벤트가 동작하지 않는다. - 해결 방법: 여러 클릭 이벤트를 가로채는 dispatchTouchEvent 메서드를 오버라이드하여, 터치된 부분이 현재 포커스가 되지 않은 View(키보드 바깥 화면) 범위라면, 키보드를 숨기는 동작을 추가하였다. * refactor: 키보드 숨김 동작을 handler 바인딩으로 적용 - LoginHandler 에 화면 터치에 대한 동작을 추가, 화면 터치 시 키보드를 숨김 처리하는 동작을 바인딩으로 설정 - InputMethodManager 인스턴스를 지연초기화하여 저장 * refactor: InputMethodManager 인스턴스를 lazy로 지연 초기화 * fix: 닉네임, 제목 입력 칸의 키보드 액션 버튼 변경 - 키보드의 액션 타입을 Search에서 Done으로 변경 * style: ktlint 적용 * refactor: 타임라인 리팩터링 #232 (#263) * refactor: TimelineViewModelFactory의 생성자 파라미터 추가 - 내부 프로퍼티에 속해있던 TimelineRepository를 생성자 프로퍼티로 변경 * fix: 추억 목록 아이템이 하나일 때의 View 수정 - 아이템 개수가 하나일 때는 타임라인의 선이 나타나지 않도록 변경 * chore: 코루틴 예외 처리 로그에context 출력 * refactor: 메서드 분리 및 순서 재정렬 - 코드 컨벤션: override 메서드는 상단에 위치한다 * refactor: TimelineViewModel 생성 팩토리 메서드 활용 * style: ktlint 적용 * ui: 화면 전환에 사용될 twin animation 효과 생성 * ui: animation 효과 활용하여 화면 전환 애니메이션 적용 * ui: Main 화면의 배경 색을 하얀색(#FFFFFF)으로 지정 * style: ktlint 적용 * feat: 기분 선택 기능 구현 및 스타카토 조회 화면 구조 변경 #191 (#289) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * style: ktlint 적용 * feat: 추억 API 변경사항 반영 및 리팩터링 #259 (#265) * ui: 추억 생성 화면 사진 로드 시 coil 라이브러리 사용 * ui: 삭제 버튼 아이콘 추가 * ui: 추억 생성 화면 사진 삭제 버튼 추가 * feat: 추억 생성 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 생성 화면 사진 삭제 구현 * feat: 추억 수정 화면 사진 첨부 icon 가시성 설정 * ui: 추억 수정 화면 사진 삭제 버튼 추가 * feat: 추억 수정 화면 사진 삭제 버튼 가시성 설정 * feat: 추억 수정 view model의 imageUri 설정 매개변수 타입 변경 * feat: 추억 수정 화면 사진 삭제 구현 * fix: 추억 생성 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * fix: 추억 수정 화면의 사진 첨부란 연속 클릭 시 앱 종료 되는 버그 수정 * feat: MemoryRequest dto에 썸네일 사진 url 필드 추가 * feat: 추억 생성 메서드의 시그니처 변경 - MemoryApiService 내 추억 생성 메서드의 시그니처 변경 - 위 변경에 따른 DataSource, Repository, ViewModel의 추억 생성 관련 메서드 시그니처 변경 * feat: 추억 생성 view model 주 생성자로 ImageRepository 주입 * feat: 추억 생성 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 생성 화면) - 추억 생성 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 생성 시 썸네일 사진 url 추가 * refactor: MemoryRequest의 추억 썸네일 사진 기본 인자 값 null로 설정 * feat: 추억 수정 메서드의 시그니처 변경 * feat: 추억 수정 view model 주 생성자로 ImageRepository 주입 * feat: 추억 수정 화면의 썸네일 사진 저장 기능 구현 * feat: 서버에서 저장된 사진을 불러오는 기능 추가 (추억 수정 화면) - 추억 수정 화면에서 서버에 저장된 사진을 로드하는 기능 구현 - UI에 불러온 사진을 표시하는 로직 수정 * feat: 추억 수정 시 썸네일 사진 url 추가 * refactor: 불필요한 MemoryUpdateRequest 제거 * ui: empty view 캐릭터 이미지 추가 * ui: 추억 설명글 유무에 따른 가시성 설정 * ui: 함께 한 사람들 가시성 gone 으로 설정 - 4차 스프린트 범위에서 제외됨 * feat: 이미지 선택 옵션 추가 (단일 선택 및 다중 선택 지원) * ui: TextInputLayout, TextInputEditText Style 정의 * ui: 추억 생성 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 수정 화면 입력란 TextInputLayout으로 변경 - counter 속성 사용을 위해 TextInputLayout으로 변경함 * ui: 추억 조회 화면 썸네일 사진 유무에 따른 가시성 설정 * ui: empty view 캐릭터 이미지 크기 변경 * ui: 앱 이름 Staccato_AN -> Staccato 로 수정 * refactor: 추억 생성 및 수정 화면 메서드 순서 정리 * ui: 제목용 TextInputEditTextStyle 정의 및 적용 * ui: 추억 생성 및 수정 화면 썸네일 coilPlaceHolder 변경 - 이전: shape_place_holder_rectangle - 이후: shape_all_gray1_8dp * refactor: 삭제 다이얼로그 show 메서드 호출 방식 변경 - apply를 사용하지 않는 방식으로 변경 * ui: 코멘트 미지원 안내 view 추가 * feat: 스타카토 생성, 수정 화면 사진 및 완료 버튼 개선 #242 (#291) * feat: (스타카토 생성 화면) 사진 드래그로 순서 변경 기능 구현 * refactor: data 패키지에 S3 이미지 API 분리 적용 * refactor: AttachedPhotoUiModel 및 프로그래스바 추가 * feat: recyclerView에서 지워진 사진의 job cancel 처리 * refactor: editText를 TextInputLayout로 수정 * feat: (스타카토 수정 화면) 사진 드래그로 순서 변경 / 로딩 구현 * refactor: 프로퍼티 네임 변경 및 visitedAt LocalDateTime으로 수정 * style: ktlint 적용 * build: 구글 맵 API 사용에 따른 CI 수정 #296 (#297) * build: 구글 맵 api key를 저장하는 파일을 설정하는 명령어 작성 * refactor: defaults 에 설정된 shell 설정에 따라 추가적인 shell 설정 삭제 * feat: Google Map 연결, 스타카토 목록 조회 API 연결 #54 (#295) * build: google map 의존성 추가 * build: 구글맵 관련 properties ignore 추가 * build: 구글맵 api key 설정 * feat: Google Map 연결 * feat: MainActivity Handler 구현 * ui: 추억 및 스타카토 생성 메뉴 추가 * ui: popup menu style 정의 * feat: 추억 생성 및 수정 menu 연결 - handler 연결 - 메서드 분리 * feat: 위치 권한 요청 구현 - ACCESS_FINE_LOCATION 권한 요청 - ACCESS_COARSE_LOCATION 권한 요청 * feat: 현 위치 표시 * style: MainActivity formatting * feat: locationPermissions 타입 변경 - 이전: List<String> - 이후: Array<String> * feat: MomentLocationDto, MomentLocationResponse 추가 * feat: 스타카토 목록 조회 api service 구현 * feat: 스타카토 목록 조회 data source 구현 * feat: MomentLocation 도메인 모델 구현 * feat: MomentLocationDto를 도메인 모델로 변환하는 mapper 구현 * feat: 스타카토 목록 조회 repository 구현 * feat: 스타카토 목록 조회 view model 구현 * feat: 스타카토 목록을 marker로 표시 * refactor: home 패키지명을 maps로 변경 * feat: 마커 클릭 시 스타카토 상세로 이동 기능 구현 * feat: 스타카토 조회 추억 id, 제목 필드 추가 * feat: 마지막 위치 위경도 찾기 * refactor: 안드로이드 1차 QA 반영 #299 (#301) * refactor: 안드로이드 1차 QA 반영 * refactor: 안드로이드 1차 QA 반영2 * refactor: 안드로이드 1차 QA 반영3 * refactor: 삭제 메시지 변경 * fix: 스타카토 조회 화면 스택 관리 및 ui 수정 #304 (#306) * feat: 지도 화면에서 스타카토 조회 화면으로 이동 시 스택 관리 * feat: 타임라인 화면에서 추억이 존재하지 않을 때 추억 생성 버튼 추가 * ui: 스타카토 조회 화면 툴바 위치 고정 * build: Android CD 적용 #300 (#308) * build: CD 워크플로우 yml 파일 작성 * build: keystore 접근을 위한 build.gradle.kts 파일 설정 * build: 기존 apk 추출 ci 파일 수정 - demo 버전의 apk를 추출 및 배포하는 목적에 맞게 파일 명 수정 - apk 빌드 후 테스트를 수행하는 job 추가 - firebase 앱 배포에 아티팩트 업로드하는 job 추가 * fix: ci 파일에도 keystore 생성 job 추가 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: 키스토어 환경변수를 base64로 디코딩하는 명령어 재수정 * fix: ci 파일에 키스토어 관련 설정 적용 * fix: 키스토어 관련 명령어 일부 수정 * fix: build.gradle.kts 불필요한 괄호 제거 * fix: keystore.properties 로 부터 프로퍼티를 가져오는 형식 변경 * fix: upload-artifact step에서 빌드 파일의 upload 경로 수정 (#316) upload-artifact 는 defaults 설정의 working-directory 경로가 적용되지 않음 * fix: android cd 재수정 (2차) #317 (#319) * fix: upload-artifact 빌드 파일의 upload 경로 3차 수정 * fix: 배포 시 빌드 파일의 경로 수정 * fix: 빌드 파일의 upload 경로 수정 및 파일이 없는 경우 에러 처리 * fix: 빌드 파일의 upload 경로 4차 수정 * fix: 빌드 파일의 upload 경로 5차 수정 * fix: 빌드 파일의 upload 경로 6차 수정 - 디렉터리 경로 생성 후 upload 실행 * fix: 빌드 파일의 upload 경로 7차 수정 github의 workspace 환경변수(절대경로) 활용 * fix: clean test 제거 및 디버그용 파일 경로 탐색 명령어 추가 * fix: 디버그용 파일 경로 검색 명령어 수정 * fix: 디버그용 파일 경로 검색 명령어 삭제 * fix: 디버그용 파일 검색 명령어 삭제 및 업로드 파일 경로명 수정 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 기능 구현 #314 (#324) * feat: MainActivity에서 주소를 가져오는 로직 삭제 * feat: 스타카토 생성 시 현 위치의 주소를 가져오는 로직 구현 * refactor: 메서드 순서 정렬 * refactor: 스타카토 조회 화면 ViewPager2 적용 및 UI 아이콘 개선 #318 (#320) * refactor: 아이콘 추가 및 UI 개선 * feat: 스타카토 상세 사진 Viewpager 적용 * feat: 스타카토 상세 사진 Viewpager에 dot indicator 추가 * style: ktLint Format * feat: 메인 지도 화면에서 스타카토 생성하는 플로우 구현 #321 (#327) * feat: 날짜로 추억 목록 불러오는 getMemories API 추가 * feat: 메인에서 스타카토 생성 시 추억 목록 선택 가능 * feat: 스타카토 생성 시 역지오코딩과 추억 선택 연동 * build: debug와 release로 buildTypes 분리 (#329) - appName, appId, baseUrl 분리 - release에 난독화 적용 * build: debug 와 release 배포 분기에 따른 CD 수정 - CD에 대한 트리거 재설정 : main 브랜치에 대한 push 및 pr * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 #326 (#330) * refactor: 지도 화면 onResume에서 스타카토 목록 load * refactor: 스타카토 목록 로드 메서드명 변경 - 이전: loadMoments - 이후: loadStaccatos * feat: 공유 view model에 스타카토 목록 업데이트 상태 추가 * fix: 스타카토 생성, 삭제 후 지도 화면의 마커가 갱신되지 않는 오류 해결 * feat: 지도 로드 시 현위치로 이동하도록 구현 * build: ci 및 cd 파일 수정 ci - 불필요한 gradle 빌드 및 테스트 제거 cd - 타겟 브랜치 develop 제거 * feat: 댓글 조회, 생성, 삭제 기능 구현 #290 (#331) * feat: 기분 수정 요청을 보내는 Request Dto 작성 * feat: MomentApiService 에 기분 수정 요청에 대한 API 작성 * feat: 기분 수정 요청에 대한 DataSource 메서드 작성 * feat: 기분 도메인 모델 생성 * feat: 기분 도메인을 기분 수정 Request로 변환하는 메서드 작성 * ui: 기분 아이콘 이미지 리소스 추가 * ui: 기분 아이콘의 테두리를 selector로 생성 - 선택/미선택에 따라 다른 ui를 나타낸다 * ui: 기분 아이콘에 사용할 style 지정 * fix: API 변경에 따라 DTO 및 Mapper 변경 - 순간(현 스타카토)의 visitedAt의 타입을 LocalDate에서 LocalDateTime으로 변경 * fix: 순간 DTO에 기분 필드 추가 - 순간 Dto에 기분(Feeling) 필드를 추가함에 따라 Mapper 및 도메인 수정 * feat: 기분 선택 api에 필요한 repository 메서드 작성 * feat: 기분 uiModel 생성 * feat: 댓글에 대한 UI 모델 생성 * feat: 순간(현 스타카토) 상세 정보에 대한 UI 모델 생성 * feat: 기분 ImageView 의 선택 상태 바인딩 어댑터 작성 * feat: 댓글 화면 구성 및 Adapter, Fragment 작성 * feat: 순간(현 스타카토)의 Ui Model Mapper 변경 MomentDetailUiModel.CommentsUiModel -> CommentUiModel MomentDetailUiModel.MomentDefaultUiModel -> MomentDetailUiModel Feeling을 Ui Model로 변환하는 Mapper 추가 * feat: 기분 선택 View 구성 및 Fragment, ViewModel, Adapter, Handler 작성 * feat: 순간 상세에 대한 View 구성 및 Fragment, ViewModel 작성 * fix: 기분 선택 클릭 리스너와 바인딩 어댑터 설정 및 View 수정 * fix: 누락된 ViewModel 데이터 바인딩 설정 * feat: 순간 조회 화면 재구성 * refactor: 네비게이션 action 및 id 네이밍 수정 visit -> moment로 수정 * refactor: 방문 -> 순간 으로 키워드 변경 * refactor: 불필요한 클래스 및 xml 파일 제거 * ui: xml 컨벤션에 맞추어진 타 사용자의 댓글 ui 구성 * feat: 댓글 API의 DTO 작성 * feat: 댓글 API Service 작성 * feat: 댓글 CRUD DataSource 작성 * refactor: CommentApiService 각 메서드의 반환 값을 Response로 변경 * feat: CommentApiService 를 create * feat: CommentDataSource 구현체 생성 * refactor: 댓글 Dto 클래스 네이밍 변경 - VisitLogDto -> CommentDto * refactor: CommentDto 의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * refactor: VisitLog 도메인 모델 클래스의 네이밍 변경 - VisitLog -> Comment * refactor: Comment 도메인 모델의 ID 프로퍼티 네이밍 변경 - visitLogId -> commentId * feat: 새로운 댓글 도메인 모델 생성 * feat: CommentRepository 작성 * feat: Domain 모델과 DTO 모델을 변환해주는 Mapper 작성 - CommentDto를 Comment로 변환하는 메서드를 CommentMapper.kt로 이동 * feat: CommentRepository의 기본 구현체 작성 * feat: 댓글 ViewModel, Factory 작성 및 Comment 불러오기 구현 * ui: ViewModel 데이터바인딩 및 빈 댓글 문구에 대한 strings 설정 * feat: CommentsViewModel 활용 및 옵저빙 * feat: 댓글 조회, 생성, 삭제 기능 구현 * chore: ktlint 적용 * feat: 추억 생성 및 수정 이미지 로딩 중 표시 및 저장 버튼 비활성화 #332 (#334) * feat: 추억 생성 이미지 로딩 중 표시 * feat: 추억 수정 이미지 로딩 중 표시 * feat: 추억 생성 및 수정 이미지 로딩 중 저장 버튼 비활성화 * style: formatting * refactor: 댓글 화면 개선 및 리팩터링 #333 (#335) * fix: merge conflicts 해결 * fix: 글자 수 제한 500자로 수정 * style: ktlint 체크 * build: CD 수정 - 구글 플레이스토어 업로드 스텝 추가 * build: defaultConfig의 버전 코드와 이름 수정 versionCode : 2 -> 3 versionName : 1.1 -> 1.0.0 (배포 버전과 동일) * refactor: 패키지명 변경 #342 (#343) - 5차 스프린트 요구사항 만족을 위해 패키지명 변경 - 이전: com.woowacourse.staccato - 이후: com.on.staccato * ui: 타임라인 화면 디자인 수정 #347 (#348) * layout: 타임라인 디자인 수정 및 STATE_HALF_EXPANDED 구현 * chore: 불필요한 파일 삭제 * chore: 수정된 패키지명 반영 * layout: empty 추억 view 높이 조절 * layout: 기분 선택 여부 컬러/흑백 처리 * ui: 추억 화면 디자인 수정 및 추억 생성 플로우 변경 #346 (#355) * ui: 추억 썸네일 이미지용 gradient drawable 구현 * ui: 스타카토 썸네일 이미지용 gradient drawable 구현 * ui: 추억 조회 화면 ui 수정 - 추억 상세 내용 ui 수정 - 스타카토 목록 ui 수정 * ui: 스타카토 추가 버튼 수정 * feat: 홈 화면의 추억 생성 플로우 제거 - 홈 화면에서는 스타카토 생성만 가능하게 변경 * ui: 추억 생성 및 수정 화면 toolbar 제목 추가 * ui: 스타카토 생성 및 수정 화면 toolbar 제목 추가 * ui: 타임라인 화면 추억 추가 및 정렬 버튼 추가 * style: formatting * refactor: 댓글 화면 개선 #333 (#354) * fix: merge conflicts 해결 * fix: 글자 수 제한 500자로 수정 * style: ktlint 체크 * build: CD 수정 - 구글 플레이스토어 업로드 스텝 추가 * ui: 댓글 구성요소의 UI 개선 RecyclerView - 아이템 변화 시 애니메이션 효과 제거 - 스크롤 시 물결 무늬 애니메이션 제거 - 최소 높이 지정 댓글이 없는 경우의 Default View - 높이 및 마진 조정 * refactor: UserInfoSharedPreferences의 파일, 키 이름 변경 - 패키지명 변경에 따라 해당 SF가 사용하는 파일, 키 이름 변경 * fix: xml 속성 수정 - layout_marginBottom 오타 수정 - app:itemAnimator 속성 제거 * feat: 댓글 입력 중 화면 터치 시 키보드 비활성화 구현 - MainActivity 에서 dispatchTouchEvent 를 오버라이드하여, focus 된 EditText의 focus를 해제하고, 키보드를 숨김처리하도록 구현 * ui: RecyclerView와 댓글이 없을 때 View의 높이 조정 * feat: 리사이클러뷰 애니메이션 효과 제거 및 adapter 설정 메서드명 변경 * feat: 댓글 수정하기 메뉴 제거 및 댓글 삭제 시 삭제 다이얼로그를 띄우도록 변경 --------- Co-authored-by: Somin Lee <[email protected]> Co-authored-by: hodu <[email protected]> Co-authored-by: Junyoung-WON <[email protected]> Co-authored-by: s6m1n <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
✅ CheckList
The text was updated successfully, but these errors were encountered: