Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

fix: android-ci.yml 파일의 명령어 수정 #47 #48

Merged
merged 1 commit into from
Jul 23, 2024

Conversation

s6m1n
Copy link
Member

@s6m1n s6m1n commented Jul 23, 2024

LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정

⭐️ Issue Number

🚩 Summary

  • 명령어 수정 : echo의 출력을 local.properties 파일로 지정하는 연산자를 '>' 로 수정

LOCAL_PROPERTIES_API_KEY에 접근하는 명령어 수정
@s6m1n s6m1n added android We are android>< fix 버그 (버그 수정) ⚙️ build 빌드 관련 (빌드 스크립트 수정 등) labels Jul 23, 2024
@s6m1n s6m1n added this to the sprint-2 milestone Jul 23, 2024
@s6m1n s6m1n requested review from Junyoung-WON and hxeyexn July 23, 2024 08:01
@s6m1n s6m1n self-assigned this Jul 23, 2024
@s6m1n s6m1n changed the title fix: android-ci.yml 파일의 명령어 수정 fix: android-ci.yml 파일의 명령어 수정 #47 Jul 23, 2024
Copy link
Contributor

@hxeyexn hxeyexn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Copy link
Contributor

@Junyoung-WON Junyoung-WON left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM~

@hxeyexn hxeyexn merged commit 03ae2cb into develop-an Jul 23, 2024
1 check passed
hxeyexn added a commit that referenced this pull request 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 pull request 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 pull request 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 pull request 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]>
linirini added a commit that referenced this pull request Oct 10, 2024
* 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]>

* build: CD yml 파일 구성 #28 (#53)

* feat: CI/CD 설정

* feat: CI/CD 검증용 트리거 설정

* fix: CI/CD workflow 수정

* fix: CI/CD workflow 재수정

* fix: CI/CD workflow 절대 경로 수정

* chore: DDL 생성 전략 변경

* chore: dev 환경 DDL 생성 전략 변경

* refactor: 검증용 트리거 제거

* fix: 도커 이미지 기반 컨테이너 생성으로 변경

* refactor: 중간 테이블 엔티티 수정 #56 (#57)

* refactor: 중간 테이블명 TravelMember로 변경

* refactor: 중간 테이블 OneToMany 필드 추가

* refactor: Member OneToMany 제거

* refactor: OneToMany List 초기화

* refactor: 연관관계 편의 메서드 사용

* chore: ddl 전략 임시 변경

* chore: ddl 전략 변경

* feat: 특정 방문 기록 삭제 API 구현 #26 (#42)

* feat: 특정 방문 기록 삭제 API 구현

* feat: 양수가 아닌 id로 특정 방문 기록 삭제를 시도할 때 예외 처리 기능 구현

* feat: 방문 기록 삭제 시 방문 로그도 함께 삭제되는 기능 구현

* refactor: 커스텀 예외를 제거하는 방향으로 변경

* fix: 예외를 못 잡던 문제 해결

* refactor: 메서드명 적절하게 변경

* build: Docker Compose Setting #27 (#40)

* chore: gitignore 파일 추가

* chore: mysql 디펜던시 추가

* chore: Profile 분리

* feat: Docker 파일 설정

* feat: 여행 상세 생성 API 구현 #18 (#43)

* build: RestAssured 의존성 추가

* test: 여행 상세 생성 인수 테스트 작성

* feat: 임시 MemberIdArgumentResolver 구현

* feat: Lombok 추가

* feat: Database 초기화 구현

* feat: 여행 상세 성공 서비스 구현

* fix: resolveArgument 반환 타입 오류 수정

* feat: 여행 상세 생성 성공 컨트롤러 구현

* feat: 여행 상세 생성 시 필수값 누락 검증 구현

* test: 글자 수 제한 검증 인수 테스트 추가

* refactor: 생성자에 builder 지정

* feat: 시작 날짜와 끝 날짜 도메인 검증 구현

* feat: 시작 날짜와 끝 날짜 예외 처리 테스트 및 구현

* style: 코드 컨벤션 적용

* refactor: parameter명 변경

* feat: transactional 적용

* style: paremeter 형식 통일

* style: parameter 형식 통일

* refactor: display name 오류 수정

* refactor: 불필요한 상수 제거

* refactor: paramterized test로 리팩터링

* style: 개행 제거

* refactor: 인자 변경

* refactor: 공통 예외 클래스명 변경

* feat: 범위 예외 핸들러 추가

* refactor: 서비스, 통합 테스트 보일러 플레이트 코드 제거

* refactor: builder 사용 시 필수 값 누락 제약 추가

* refactor: 도메인으로 변환하는 메서드를 dto에 추가

* build: CD yml 파일 구성 #28 (#53)

* feat: CI/CD 설정

* feat: CI/CD 검증용 트리거 설정

* fix: CI/CD workflow 수정

* fix: CI/CD workflow 재수정

* fix: CI/CD workflow 절대 경로 수정

* chore: DDL 생성 전략 변경

* chore: dev 환경 DDL 생성 전략 변경

* refactor: 검증용 트리거 제거

* fix: 도커 이미지 기반 컨테이너 생성으로 변경

* fix: rebase 과정에서 파일이 꼬인 문제 해결

* test: HttpHeaders.AUTHORIZATION 사용

* refactor: 중간 테이블 엔티티 수정 #56 (#57)

* refactor: 중간 테이블명 TravelMember로 변경

* refactor: 중간 테이블 OneToMany 필드 추가

* refactor: Member OneToMany 제거

* refactor: OneToMany List 초기화

* refactor: 연관관계 편의 메서드 사용

* chore: ddl 전략 임시 변경

* chore: ddl 전략 변경

* feat: Pin, Visit, VisitLog 생성자에 builder 추가

* feat: Pin repository 추가

* refactor: visit이 삭제되기 전에 visit에 의존하는 visitLog들이 먼저 삭제되도록 순서 변경

* test: 방문 기록 삭제에 대한 서비스 슬라이스 테스트 추가

* test: 방문 기록이 갖는 모든 방문 로그 삭제 메서드 테스트

* fix: Modifying을 사용할 때 영속성컨텍스트와 관련하여 발생하던 문제 해결

* refactor: visitLog의 content를 필수값으로 변경

* test: 컨벤션에 맞게 Controller 테스트 클래스 변경

* fix: ConstraintViolationException의 예외 메시지를 정해둔 형식에 맞게 변경

---------

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: linirini <[email protected]>

* refactor: 여행 상세 생성 서비스 반환 타입 변경 (#63)

* feat: 여행 상세 목록 조회 API 구현 #19 (#60)

* test: 여행 상세 목록 조회 통합 테스트 작성

* feat: 여행 상세 목록 조회 DTO 구현

* feat: 모든 여행 상세 목록 조회 서비스 구현

* refactor: 미사용 반환값 제거

* feat: 년도 조건에 따른 여행 상세 조회 서비스 구현

* test: import 수정

* test: 년도와 사용자 식별자로 여행 목록 조회하는 JPQL 테스트 추가

* style: 코드 컨벤션 적용

* test: 여행 상세 목록 조회 컨트롤러 구현

* test: disabled 제거 및 테스트 오류 수정

* refactor: 불필요한 변수 분리 제거

* refactor: Optional로 분기 처리

* test: DisplayName 수정

* refactor: DTO 이름 변경

* feat: 방문 기록 생성 API 구현 #21 (#64)

* feat: 방문 기록 생성 기능 구현

* feat: getter 및 builder 추가

* feat: VisitService에 Transactional 적용

* test: 방문 기록 생성 테스트

* fix: 오타 수정

* style: 코드 컨벤션 적용

* fix: deleteById에 Transactional annotation 추가

* refactor: builder 파라미터 NonNull 설정 추가

* refactor: 데이터 개수 감소

* refactor: 예외 메시지 구체화 및 상태 코드 변경

* feat: 특정 여행 상세 수정 API 구현 #22 (#62)

* build: Docker Compose Setting #27 (#40)

* chore: gitignore 파일 추가

* chore: mysql 디펜던시 추가

* chore: Profile 분리

* feat: Docker 파일 설정

* feat: 여행 상세 생성 API 구현 #18 (#43)

* build: RestAssured 의존성 추가

* test: 여행 상세 생성 인수 테스트 작성

* feat: 임시 MemberIdArgumentResolver 구현

* feat: Lombok 추가

* feat: Database 초기화 구현

* feat: 여행 상세 성공 서비스 구현

* fix: resolveArgument 반환 타입 오류 수정

* feat: 여행 상세 생성 성공 컨트롤러 구현

* feat: 여행 상세 생성 시 필수값 누락 검증 구현

* test: 글자 수 제한 검증 인수 테스트 추가

* refactor: 생성자에 builder 지정

* feat: 시작 날짜와 끝 날짜 도메인 검증 구현

* feat: 시작 날짜와 끝 날짜 예외 처리 테스트 및 구현

* style: 코드 컨벤션 적용

* refactor: parameter명 변경

* feat: transactional 적용

* style: paremeter 형식 통일

* style: parameter 형식 통일

* refactor: display name 오류 수정

* refactor: 불필요한 상수 제거

* refactor: paramterized test로 리팩터링

* style: 개행 제거

* refactor: 인자 변경

* refactor: 공통 예외 클래스명 변경

* feat: 범위 예외 핸들러 추가

* refactor: 서비스, 통합 테스트 보일러 플레이트 코드 제거

* refactor: builder 사용 시 필수 값 누락 제약 추가

* refactor: 도메인으로 변환하는 메서드를 dto에 추가

* build: CD yml 파일 구성 #28 (#53)

* feat: CI/CD 설정

* feat: CI/CD 검증용 트리거 설정

* fix: CI/CD workflow 수정

* fix: CI/CD workflow 재수정

* fix: CI/CD workflow 절대 경로 수정

* chore: DDL 생성 전략 변경

* chore: dev 환경 DDL 생성 전략 변경

* refactor: 검증용 트리거 제거

* fix: 도커 이미지 기반 컨테이너 생성으로 변경

* refactor: 중간 테이블 엔티티 수정 #56 (#57)

* refactor: 중간 테이블명 TravelMember로 변경

* refactor: 중간 테이블 OneToMany 필드 추가

* refactor: Member OneToMany 제거

* refactor: OneToMany List 초기화

* refactor: 연관관계 편의 메서드 사용

* chore: ddl 전략 임시 변경

* chore: ddl 전략 변경

* feat: 비어있는 요청 에러 핸들링 추가

* feat: 특정 여행 상세 수정 서비스 구현

* feat: 특정 여행 상세 수정 컨트롤러 구현

* feat: 비어있는 요청 에러 핸들링 추가

* feat: 특정 여행 상세 수정 서비스 구현

* feat: 특정 여행 상세 수정 컨트롤러 구현

* refactor: DirtiesContext 삭제

* refactor: Transactional 읽기 전용 옵션 구성

* feat: 방문 기록 날짜 검증 로직 추가

* refactor: 메서드 체이닝 적용

* refactor: 수정 작업 테스트 환경 동일하게 유지

---------

Co-authored-by: linirini <[email protected]>
Co-authored-by: devhoya97 <[email protected]>

* fix: 논리적 삭제 데이터는 조회에서 제외 #66 (#68)

* test: 쿼리 메서드 사용

* fix: sqlDelete문에 테이블명 변경사항 반영

* fix: 삭제된 데이터 제외하고 조회하도록 조건 추가

* fix: 삭제된 데이터 제외하고 조회하도록 조건 추가

* fix: 특정 방문 기록 삭제 API 호출 시 관련된 VisitImage를 모두 삭제하도록 수정 #65 (#67)

* feat: visitId에 맞는 visitImage들을 모두 삭제하는 기능 구현

* fix: visit을 삭제해도 visit에 포함된 모든 visitImage들이 삭제되지 않던 문제 해결

* test: 엔티티 생성시 가독성을 위한 개행 삭제

* refactor: JPQL에서 VisitLog를 vl로 축약

* fix: 충돌해결

* test: 경계값에 포함되지 않는 변수 제거

* 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: 둥근 모서리의 이미지로 변경

* feat: 특정 여행 상세 조회 API 구현 #20 (#73)

* test: 특정 여행 상세 조회 통합 테스트 작성

* feat: 특정 여행 상세 조회 DTO 구현

* fix: 삭제되지 않은 데이터만 찾도록 쿼리 메서드 수정

* feat: 특정 여행 상세 조회 서비스 구현

* feat: 특정 여행 상세 조회 컨트롤러 구현

* test: 존재하지 않는 특정 여행 상세 조회 테스트

* feat: null 필드 응답에 미포함 구현

* style: 코드 컨벤션 적용

* fix: 응답 형식 오류 수정

* feat: 특정 여행 상세 삭제 API 구현 #24 (#72)

* style: 코드 컨벤션 적용

* feat: 특정 여행 상세 삭제 서비스 구현

* feat: 특정 여행 상세 삭제 컨트롤러 구현

* refactor: 검증 메서드 분리

* refactor: Visit 논리적 삭제 전파 순서 수정

* 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 구현 #25 (#76)

* feat: 특정 방문 기록 조회 API 기능 구현

* fix: Repository 조회시 논리적 삭제가 되지 않은 엔티티들만 가져오도록 변경

* test: System.out 메서드 제거

* refactor: 메서드명 통일 및 CRUD 순서로 배치

* refactor: 사용하지 않는 DTO 제거

* test: 서비스 메서드명 변경에 따른 테스트 메서드명 변경

* fix: 특정 방문 기록이 몇 번째 방문인지 계산할 때, 더 늦게 방문한 기록까지 세던 문제 해결

* test: 몇 번째 방문인지 계산할 때, 이전의 방문만 셀 수 있는지 테스트

* feat: Pin 연관관계 추가 #80 (#83)

* feat: Pin에 Member 연관관계 추가

* refactor: private 보조 메서드 순서 변경

* feat: logging 추가 #86 (#89)

* feat: 간단한 Error Logging 추가

* refactor: Logging Level 변경

* feat: VisitLog, VisitImage 양방향 관계 설정 및 논리적 삭제 제거 #87 (#88)

* feat: visitLog, visitImage 논리적 삭제 제거

* feat: visitLog, visitImage 양방향 설정 및 양방향 관계 설정에 따른 여행, 방문기록 삭제 로직 변경

* fix: 여행 상세 수정 날짜 필터링 오류와 썸네일 저장 오류 수정 #90 (#91)

* fix: 여행 상세 수정 날짜 필터링 오류 수정

* fix: 여행 상세 생성 시 썸네일을 저장하지 않는 오류 수정

* refactor: dto 필드 수정 (#95)

* 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: 여행 상세 목록 조회 시 최신순 정렬 #96 (#100)

* feat: 여행 상세 목록 최신순으로 조회

* refactor: JPQL 메서드명 변경

* feat: 특정 여행 상세 조회 API에서 방문 기록 오래된 순 정렬 #101 (#102)

* refactor: 반환값 제거 및 미사용 Param 제거

* feat: 특정 여행 상세 조회 시 방문 기록 오래된 순 조회 구현

* 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 화면 변경

* fix: Travel 삭제시 발생하는 오류 수정 #103 (#105)

* fix: 여행에 포함된 방문 기록의 존재 여부를 검사할 때 논리적으로 삭제되지 않은 방문 기록만 고려하도록 수정

* fix: 여행을 삭제하면 연관된 TravelMember에 논리적 삭제가 전파되도록 수정

* refactor: JPQL에서 쿼리메서드로 변경

* refactor: @SQLRestriction으로 soft-delete하도록 변경 #106 (#107)

* refactor: @SQLRestriction으로 soft-delete하도록 변경

* fix: 정렬 조건 누락 추가

* test: displayName 변경

* docs: swagger 컨벤션 설정 및 적용 (#116)

* build: 중복 의존성 정의 제거

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* build: OpenApi 의존성 추가

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* chore: 전역적인 media type 설정

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* chore: open api skeleton code 작성

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* fix: constraint redefine 불가로 인한 오류 수정

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* style: 의미없는 개행 제거

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* docs: 누락된 설명 추가

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

---------

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* 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]>

* feat: Entity 수정 (#119)

* feat: 엔티티 구조 변경

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* style: 불필요한 개행 제거

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

---------

Co-authored-by: YoonJuHo <[email protected]>
Co-authored-by: devhoya97 <[email protected]>
Co-authored-by: BurningFalls <[email protected]>

* build: 사용하지 않는 도커 이미지 삭제 workflow 구성 #84 (#120)

* build: CD 작업 시 기존 도커 이미지 삭제

* build: CD 작업 시 기존 도커 이미지 삭제 순서 변경

* build: CD 트리거 수정

* refactor: 엔티티 수정 #125 (#126)

* refactor: base entity 필드명 수정

* refactor: visitLog에 base Entity 추가 및 논리적 삭제 구현

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

* 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 전용 권한 제거

* feat: 로그인 API 구현 #123 (#128)

* build: jwt 의존성 추가

* chore: jwt 관련 환경 설정 추가

* test: 회원 생성 및 토큰 발급 성공 테스트 & 닉네임 중복 테스트 추가

* feat: 토큰 발급 구현

* feat: 로그인 서비스 구현

* feat: 로그인 컨트롤러 구현

* feat: 닉네임 VO 분리 및 예외 처리 구현

* refactor: getter 재정의 제거

* test: 닉네임 형식 예외 처리에 따른 테스트 수정

* feat: 필수값 누락 예외 처리 구현

* style: 코드 컨벤션 적용

* refactor: 누락된 dto 패키지 추가

* refactor: 애너테이션명 변경

* feat: 토큰 파싱해서 member 찾도록 resolver 구현

* fix: @MemberId -> @LoginMember로 변경되며 long에서 member로 타입 변경에 따른 테스트 실패 수정

* style: 코드 컨벤션 적용

* feat: 401 예외 핸들러 구현

* docs: swagger 명세 추가

* feat: 인가 관련 예외 & 핸들러 추가

* test: authorization 헤더 로직 구현에 따른 테스트 수정

* chore: CI run 임시 수정

* refactor: 필드 접근 제어자 수정

* refactor: 변수 분리

* test: 테스트명 수정

* refactor: handler 메서드명 변경

* docs: 예외 설명 추가

* refactor: 상수 재활용

* docs: schema description 수정

* refactor: 불필요한 개행 제거

* docs: 예외 발생 상황 설명 수정

* test: 토큰 생성 검증 추가

* chore: CI run 이전 상태로 수정

* docs: 응답 명세 작성

* feat: transactional 적용

* chore: CI run을 self hosted로 임시 변경

* fix: CD 실패로 인한 workflow 수정 (#135)

* build: jwt 의존성 추가

* chore: jwt 관련 환경 설정 추가

* test: 회원 생성 및 토큰 발급 성공 테스트 & 닉네임 중복 테스트 추가

* feat: 토큰 발급 구현

* feat: 로그인 서비스 구현

* feat: 로그인 컨트롤러 구현

* feat: 닉네임 VO 분리 및 예외 처리 구현

* refactor: getter 재정의 제거

* test: 닉네임 형식 예외 처리에 따른 테스트 수정

* feat: 필수값 누락 예외 처리 구현

* style: 코드 컨벤션 적용

* refactor: 누락된 dto 패키지 추가

* refactor: 애너테이션명 변경

* feat: 토큰 파싱해서 member 찾도록 resolver 구현

* fix: @MemberId -> @LoginMember로 변경되며 long에서 member로 타입 변경에 따른 테스트 실패 수정

* style: 코드 컨벤션 적용

* feat: 401 예외 핸들러 구현

* docs: swagger 명세 추가

* feat: 인가 관련 예외 & 핸들러 추가

* test: authorization 헤더 로직 구현에 따른 테스트 수정

* chore: CI run 임시 수정

* refactor: 필드 접근 제어자 수정

* refactor: 변수 분리

* test: 테스트명 수정

* refactor: handler 메서드명 변경

* docs: 예외 설명 추가

* refactor: 상수 재활용

* docs: schema description 수정

* refactor: 불필요한 개행 제거

* docs: 예외 발생 상황 설명 수정

* test: 토큰 생성 검증 추가

* chore: CI run 이전 상태로 수정

* docs: 응답 명세 작성

* feat: transactional 적용

* chore: CI run을 self hosted로 임시 변경

* chore: CI run을 self hosted로 권한 부여

* chore: CI/CD workflow 트리거 임시 설정

* chore: CI/CD runs on 재설정

* chore: CI/CD workflow 권한 재설정

* chore: CI/CD workflow 권한 재설정

* chore: CI/CD workflow 임시용 트리거 제거

* build: Firebase Analytics, Crashlytics 설정 #136 (#143)

* build: Firebase Analytics, Crashlytics 의존성 추가

* chore: google-service.json ignore

* fix: TravelResponses 필드 wrapping 오류 수정 (#145)

* 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: 방문기록 조회/수정 도메인 변경으로 인한 수정 #121 (#131)

* feat: 특정 방문 기록 조회 API 문서화

* test: Test Fixture 생성

* refactor: 특정 방문 기록 조회 서비스 수정

* test: 특정 방문 기록 조회 컨트롤러 단위 테스트 추가

* refactor: API 명세에 맞게 변수명 변경

* feat: 일급컬렉션 구성 및 연관관계 편의 메서드 위치 변경

* feat: 특정 방문 기록 수정 서비스 구현

* feat: 특정 방문 기록 수정 컨트롤러 구현

* fix: ci 환경 변경

* feat: Multipart 문서화 및 검증 로직 추가

* refactor: 검증하고자 하는 부분을 명시적으로 표현

* refactor: 상수 접근제어자 변경

* refactor: NoArgsConstructor 접근 제어자 변경

* refactor: 생성자 Builder로 표현

* refactor: 부정으로만 사용되는 메서드 명 변경

* refactor: 메서드 명 변경

* refactor: 테스트 검증 방법 변경

* fix: 수정 요청 값 필수

* feat: 메시지 검증 로직 추가

* refactor: 불필요한 Content 애노테이션 제거

* refactor: API 명세 요청 변수 명 변경으로 인한 필드 명 수정

* refactor: 메서드 분리

* fix: AuthService Mocking

* refactor: 명세에 맞게 닉네임 필드 명 변경

* refactor: 방문 기록 생성/삭제 도메인 변경으로 인한 수정 #122 (#129)

* refactor: api명세에 맞게 필드명 변경

* test: TDD를 위한 컨트롤러 테스트코드 작성

* refactor: 방문 상세 생성 컨트롤러 api명세에 맞게 리팩토링

* refactor: 코드 컨벤션에 맞게 필드와 어노테이션을 다른 줄로 구분

* fix: 여행 식별자가 양수인지 검증하는 코드 추가

* test: 방문 기록을 생성할 수 없는 케이스 테스트

* feat: 사진이 5장을 초과하면 예외처리 기능 구현

* refactor: API 명세의 이름과 변수명 통일

* test: 방문 기록 생성 테스트 추가

* test: 메서드 명을 명확하게 변경

* fix: visitImagesUrl이 null일 때 NPE가 발생하는 문제 수정

* test: 양수가 아닌 식별자로 방문 기록 삭제시 예외 발생 테스트

* refactor: 코드 컨벤션에 맞게 컨트롤러 코드 수정

* test: Visit을 삭제하면 VisitImage도 삭제되는지 테스트

* refactor: 방문 기록 생성시 경계값을 테스트하면서 필요없어지는 메서드 제거

* refactor: 방문 기록 삭제 시 visitId는 null일 수 없으므로 long 타입으로 변경

* test: 방문 기록과 관련된 통합테스트 제거

* test: invalidVisitRequestProvider의 위치를 맨 위로 이동

* fix: 여행 기간에 포함되지 않는 방문 기록은 생성하지 못하도록 수정

* refactor: 가독성을 위한 예외 메시지 수정

* refactor: 불필요한 개행 제거

* refactor: 컨벤션에 맞게 메서드 위치 변경

* test: 가독성을 위한 개행 추가

* refactor: 검증 메서드명을 더 명확하게 수정

* feat: 방문 기록 생성에 Swagger 적용

* fix: visitImageFile이 필수 값으로 설정되어 있던 버그 수정

* refactor: 패키지 위치 적절하게 변경

* feat: 방문 기록 생성 DTO에 Swagger 적용

* feat: 방문 기록 삭제 Swagger 적용

* test: 방문 기록 생성시 경계값 성공 테스트 추가

* refactor: dto에 Schema 설명 추가

* refactor: 방문 사진이 없는 경우 null이 아닌 빈 리스트로 오므로 null 체크 제거

* test: mockMvc 검증에서 content 활용

* test: 가독성을 위한 변경

* refactor: 추후 ExceptionHandler에서 처리할 상황 제거

* refactor: RequestPart value와 dto 변수명을 명세에 맞게 변경

* refactor: null 값을 다룰 가능성이 없는 필드에 Long이 아닌 long을 사용

* test: DisplayName을 더 명확하게 수정

* refactor: 코드 컨벤션에 맞게 개행 제거

* test: 상수 활용

* refacotr: VisitControllerDocs에 @Parameter 추가

* refacotr: 컨트롤러 메서드 순서를 CRUD순으로 정렬

* refactor: 방문기록 생성 시 이미지가 없어도 빈 리스트가 오므로 required=false 제거

* test: 자동정렬로 인한 의도치 않은 개행 제거

* feat: 여행 상세 생성 API 수정 #141 (#147)

* refactor: where 검증절 이동

* feat: 여행 상세 생성 서비스에서 multipart 처리 위한 기반 코드 구현

* feat: 여행 상세 생성 컨트롤러에서 multipartFile 받도록 구현

* docs: 여행 상세 생성 명세서 작성

* docs: 여행 상세 생성 명세서 상 key 오류 수정

* docs: 여행 상세 생성 명세서 상 설명 오타 수정

* refactor: cascadeType 변경 및 부모 엔티티가 관리하도록 수정

* test: 모호한 displayName 수정

* refactor: persist 전파 위해 순서 변경

* 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: 여행 상세 목록 조회, 특정 여행 상세 조회, 특정 여행 상세 삭제 API 수정 #148 (#149)

* docs: 여행 상세 목록 조회 API 문서화

* docs: 특정 여행 상세 조회 API 문서화

* docs: 공통 예외 문서화

* docs: 특정 여행 상세 삭제 API 문서화

* refactor: 응답 변수 분리

* feat: 특정 여행 상세 조회 시 권한 예외 처리 구현

* feat: 특정 여행 상세 삭제 시 권한 예외 처리 구현

* refactor: 메서드 순서 조정 (CRUD 순서)

* fix: dto 필드 오류 수정

* test: 여행 상세 목록 조회 테스트 작성

* test: 특정 여행 상세 조회 테스트 작성

* test: 특정 여행 상세 삭제 컨트롤러 테스트 작성

* test: 여행 상세 목록 조회 JPQL 테스트 수정

* docs: example 제거

* fix: 동일성 비교

* test: 가독성있게 pathVariable 분리

* refactor: 방문기록 썸네일 메서드 분리

* fix: 삭제하려는 여행 상세 없을 시 예외 발생하지 않도록 수정

* refactor: member entity 외 논리적 삭제 제거 #132 (#156)

* refactor: member 외 soft delete 제거

* chore: ddl 교체 위한 환경 임시 변경

* fix: 닉네임 형식 수정 #157 (#158)

* fix: 닉네임 형식 수정

* chore: ddl 변경 위한 환경 임시변경

* 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: AWS S3 SDK 구현 (#137)

* build: aws sdk 의존성 추가

* chore: application-secrets 반영하도록 변경

* chore: multipart 최대파일크기와 최대요청크기를 10MB로 확장

* feat: S3Client 설정 커스텀

* feat: S3Exception 에러 핸들러 추가

* feat: s3Client를 사용하는 CloudStorageClient 생성

* feat: 이미지를 S3에 올리고 URL을 받아오는 비즈니스 로직 작성

* feat: file upload API 구현

* chore: pull_request에도 CD가 적용되도록 임시 변경

* chore: secret 변수들을 env로 관리하도록 변경

* chore: dev 서버도 멀티파트 용량 확장

* chore: application.yml 파일에 cloud 관련 재설정

* chore: cd 과정에서 환경 변수 설정하기

* fix: env 파일 인식하도록 수정

* fix: CI/CD에서 env를 읽을 수 있도록 수정

* chore: pull_request 시 CD 돌아가지 않도록 수정

* chore: pull_request 시 CD 돌아가도록 임시 수정

* fix: dev에 빠진 security 설정 추가

* chore: dev에도 cloud 관련 설정 추가

* chore: yml 파일 롤백

* chore: ci/cd workflow 롤백

* chore: cloud 관련 설정 추가

* chore: 이미지 용량 제한 늘리는 설정 추가

* chore: yml에 실제 값 대입

* chore: pull_request에도 CD가 적용되도록 임시 수정

* fix: s3Client build를 CLoudStorageClient에서 수행

* chore: cloud 관련 설정 값 대입

* refactor: s3Client build를 S3ClientConfig에서 수행

* refactor: s3Client build를 CloudStorageClient에서 수행

* fix: 파일 경로 오류 수정

* fix: 파일 경로 오류 수정

* fix: 파일 경로 오류 수정

* fix: 파일 경로 오류 수정

* fix: 파일 경로 오류 수정

* fix: 파일 경로가 버킷을 포함하지 않도록 수정

* feat: file 이름이 겹치는 경우, UUID를 뒤에 붙이는 기능 구현

* chore: push에만 cd가 적용되도록 다시 변경

* refactor: 에러 메시지 변경

* refactor: MultipartFile 여러 개 받을 수 있도록 수정

* feat: S3 객체 삭제하는 API 구현

* chore: pull_request에도 cd가 적용되도록 다시 변경

* chore: push에만 cd가 적용되도록 다시 변경

* style: ci/cd workflow endline 롤백

* feat: 방문 기록 관련 인가 구현 #140 (#161)

* feature: 특정 방문기록 조회시 인가 처리

* feature: 특정 방문기록 수정, 삭제시 인가 처리

* style: 미사용 import 제거

* feat: 방문 기록 생성 시 여행 상세의 주인인지 인가 추가

* refactor: 불필요한 개행 제거

* test: 테스트 실패 지점을 하나로 수정

* chore: 서버 DDL 생성 전략 변경

* feat: 여행 상세 수정 API 수정 #142 (#159)

* refactor: 썸네일이 없는 경우 기존 썸네일 유지

* feat: 여행 수정 서비스 multipart와 인가 기능 추가

* feat: 여행 수정 컨트롤러 multipart와 인가 기능 추가

* fix: 여행 썸네일 추출 임시 로직 구성

* refactor: 400 에러 메세지 응답 API 문서에 추가

* docs: id 예시 값 추가

* chore: 개발 서버 DDL 생성 전략 변경

* refactor: 이미지 수정 요청 분기 처리 위치 변경 및 테스트 작성

* 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에 S3 적용 #166 (#168)

* test: S3 테스트를 위해 fake 객체 생성

* feat: 여행 상세 생성 시 S3에 썸네일 저장

* feat: 여행 상세 수정 시 S3에 썸네일 대치

* feat: 방문 기록 생성 시 S3에 이미지 저장

* feat: 방문 기록 수정 시 S3에 이미지 대치

* chore: pull request에도 CD가 돌아가도록 임시 설정

* chore: pull request에도 CD가 돌아가도록 임시 설정한 것 원상복구

* refactor: Objects.isNull 활용 및 메서드 위치 변경

* docs: PR 템플릿 오타 수정 (#154)

- 오타 수정 및 개행 조정
- Issue Number 태그 형식 추가

* feat: 로깅 프레임워크 적용 #134 (#171)

* feat: 로거 환경 설정

* feat: 로거 형식 정의

* feat: 요청/응답 로깅 구현

* feat: 예외에 대한 로거 형식 적용

* feat: token 유무 식별 로그 추가

* refactor: thread 식별명 추가

* refactor: 예외 발생 구체 클래스/메서드 로깅

* chore: CD 트리거 수정

* chore: CD 트리거 복원

* chore: 임시 예외 케이스 생성 및 로그 테스트

* chore: 임시 예외 케이스 수정 및 로그 테스트

* chore: 임시 예외 케이스 재수정 및 로그 테스트

* chore: 임시 예외 케이스 삭제

* chore: CD 트리거 복원

* fix: Logging 데이터 변경

* chore: CD 트리거 복원

* fix: Logging 데이터 오류 수정

* chore: CD 트리거 복원

* feat: 로깅 White List 추가

* feat: 방문 기록 목록 조회시 시간 순으로도 정렬되는 기능 구현 (#175)

* feat: 방문 기록의 방문 날짜 저장 시, 시간까지 저장하도록 변경

* fix: request dto에서 LocalDateTime에 대한 패턴이 시간까지 포함하도록 변경

* refactor: 여행에 포함된 날짜인지 비교시 LocalDateTime을 넘겨주도록 변경

* refactor: 사진 url 관련 dto 필드명 끝에 url 추가

* refactor: 기대한대로 작동하지 않는 ExceptionHandler 메서드 주석 처리

* refactor: 파일 이름 및 형식 오류 수정 #176 (#177)

* refactor: 파일 이름을 UUID로만 구성하도록 수정

* refactor: content-type을 multipart/formed-data로 고정

* 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: swagger https 적용하기 #184 (#185)

* feat: swagger가 https 접근 가능하도록 하는 기능 구현

* chore: pull_request에도 CD가 적용되도록 임시 변경

* style: push에만 CD가 적용되도록 롤백

* feat: 빈/공백 문자열 예외 처리 #186 (#187)

* fix: 여행 제목은 공백 문자열 불가, 1자 이상 30자 이하로 설정할 수 있도록 예외 처리

* fix: 방문 기록의 이름은 공백 문자열 불가, 1자 이상 30자 이하로 설정할 수 있도록 예외 처리

* fix: 닉네임의 이름은 공백 문자열 불가, 1자 이상 20자 이하로 설정할 수 있도록 예외 처리

* test: displayName 변경

* fix: Swagger 인증 헤더 형식 변경 #188 (#189)

* fix: Swagger 인증 헤더 수정

* refactor: 로깅 정보 수정

* 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]>

* chore: stage/dev 서버 분리 #192 (#197)

* fix: 포트 수정

* refactor: 설정 파일 profile 별로 분리

* fix: timezone 설정

* refactor: ci-cd 파일명 변경

* refactor: ci-cd 분리

* test: 경계값 테스트로 수정

* test: 경계값 테스트로 수정 및 발생하는 오류 수정

* chore: back-end 개발용 CD 트리거 변경

* fix: 불필요한 파일 삭제

* refactor: stage용 환경 파일 분리

* refactor: DockerFile 분리

* refactor: 태그 설정

* refactor: 태그 설정

* fix: 태그 설정

* fix: 태그 설정

* fix: 태그 설정

* fix: 태그 설정

* fix: 태그 설정

* fix: 태그 설정

* fix: 태그 설정

* fix: 태그 설정 수정

* refactor: CI runs-on 변경

* refactor: dev용 CICD trigger 변경

* refactor: dev용 CICD runs on 변경

* refactor: dev용 CICD trigger 변경

* refactor: runner 재설치로 인해 임시로 변경했던 dev용 CICD runs-on & trigger 복구

* refactor: hub push 시 로그인 재수행

* fix: 명령어 오류 수정

* feat: 단체 계정으로 dockerhub 변경

* refactor: 정상 작동 확인 후 트리거 복구

* fix: image push 시 권한 오류 수정 (#200)

* feat:admin용 계정 로직 추가 (#201)

* fix: add stage logging (#204)

* feat: 이미지 확장자와 content-type 설정 #196 (#202)

* feat: content-type을 확장자로 분석하는 기능 구현

* chore: PR CD 임시 적용

* chore: PR CD 해제

* refactor: dev, stage, local 환경의 swagger url 설정 (#208)

* refactor: 이미지 용량 제한 확장 (한 이미지: 20MB, 한 요청: 100MB) (#206)

* fix: 이미지 전송 안되는 에러 수정 #209 (#210)

* chore: PR CD 임시 적용

* fix: 파일 형식에 .추가 및 디폴트 형식 변경

* temp: 확인용 에러

* temp: 롤백

* refactor: 디폴트 mime type 변경

* temp: 일단 image의 내부 메서드 사용

* fix: file-extension 지정 롤백

* fix: content-type 지정

* temp: 에러 체크를 위해 메시지 임시 변경

* temp: 에러 메시지 롤백

* feat: content-type 확장자로부터 추출

* chore: PR CD 해제

* refactor: API명세 변경에 따른 URI, DTO 변수명 변경 #211 (#212)

* refactor: URI, DTO 변수명 변경

* refactor: DTO 클래스명을 API명세에 맞게 변경

* refactor: imageFile 변수명 변경

* test: pathVariable명을 클래스명을 고려하여 변경

* refactor: 엔티티, 메서드명 API 명세에 맞게 변경

* refactor: 여행을 추억으로, 방문을 순간으로 네이밍 변경

* 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]>

* feat: 추억 목록 조회 API 수정 #215 (#216)

* feat: startAt, endAt 필드 nullable하게 변경

* feat: memory의 createdAt 기준 최신순 정렬로 변경

* style: code convention 적용

* style: 응답 형식 변경 (mates 제거 및 기간 미필수 응답 필드로 변경)

* feat: 올바르지 않은 년도 형식 예외 처리

* refactor: 추억 상세 -> 추억

* test: 메세지 오류 수정

* test: 저장 순서 오류 수정

* refactor: fixture 패키지 이동

* refactor: fixture 분리

* test: 경계값 검증으로 수정

* feat: 사용자 로깅, Nginx 로깅, DB 로깅 #190 (#224)

* feat: MDC 적용

* refactor: 중복 예외 제거

* feat: 사용자 식별 로깅 추가

* refactor: 예외 메세지 형식 json으로 변경

* feat: 추억 삭제 API 수정 #221 (#222)

* feat: 변경사항 docs 반영

* feat: 순간이 존재하는 경우 추억을 삭제할 수 없었던 예외 제거

* style: code convention 적용

* feat: 추억 삭제 시 속한 순간도 함께 삭제되도록 서비스 구현

* refactor: 불필요한 개행 제거

* feat: 추억 조회 API 수정 #227 (#228)

* feat: 기간 필수 여부 변경에 따른 어노테이션 추가

* docs: 도메인명 변경에 따른 명세서 수정

* build: stage 서버 CICD 임시 비활성화 #234 (#235)

* chore: stage 비활성화 적용 전 dev에서 시범 적용

* chore: dev 서버 cicd 비활성화 해제

* chore: dev 서버 cicd 트리거 복구

* chore: stage 서버 cicd 임시 비활성화

* 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: 댓글 생성, 조회 API 구현 #214 (#225)

* refactor: 댓글과 관련된 클래스를 별도의 패키지로 분리

* test: tdd를 위한 댓글 생성 서비스 테스트 추가

* feat: 댓글 생성 서비스 메서드 구현

* test: 댓글 생성 관련 컨트롤러 테스트 코드 작성

* feat: 댓글 생성 기능 구현

* feat: 댓글 조회 서비스 메서드를 위한 tdd 틀 작성

* feat: 댓글 조회 서비스 메서드 구현

* test: 댓글 컨트롤러 테스트 클래스 패키지 위치 변경

* refactor: 댓글 읽기 메서드명을 더 명확하게 변경

* test: 댓글 읽기 테스트 코드 추가

* feat: 댓글 읽기 컨트롤러 메서드 구현

* feat: 댓글 생성, 조회 API에 swagger 적용 및 순간 기록을 순간으로 변경

* fix: Swagger 적용으로 인한 문제 해결

* test: 순간 기록이라는 말을 순간으로 변경

* refactor: 댓글의 글자수로 인한 예외 메시지에 '1자 이상'이라는 말을 제거

* fix: 댓글 생성 메서드에 Transactional 적용

* chore: stage 서버 CI/CD 활성화

* feat: 감정 선택 API 구현 #230 (#236)

* feat: 기분 유형 생성

* feat: Moment 비즈니스 로직에 기분 표현 적용

* feat: 기분 표현 컨트롤러 구현

* feat: default 기분 생성

* style: 코드 컨벤션 적용

* refactor: 예외 메세지 변경

* feat: s3 api 연결 #239 (#241)

* feat: ImageResponse, ImageApiService 구현

* feat: ImageRepository 및 구현체 구현

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

* feat: 순간 생성 API 구현 #226 (#229)

* refactor: 기한이 없는 memory 구현

* test: 기한없는 Memory에 Moment 생성 테스트

* feat: Moment 생성 서비스 구현

* feat: Moment 생성 컨트롤러 구현

* refactor: builder 선택 필드 제외

* style: 잘못된 네이밍 수정

* refactor: MomentImages 생성 책임 Moment로 위임

* fix: 추억 기능 버그 수정 #246 (#252)

* feat: 하나의 사진 업로드 API 생성 #256 (#258)

* feat: api 이름 captures로 변경

* feat: RequestBody imageFiles로 이름 변경

* refactor: 변수명 iamge -> file로 통합

* refactor: requestparam -> requestpart로 변경

* feat: 다섯 장을 넘기지 않도록 예외 추가

* feat: 빈 배열을 받는 경우 로직을 수행하지 않도록 변경

* style: CamelCase 적용

* refactor: 에러 메시지 수정

* feat: 특정 content-type을 처리하도록 명시

* feat: validated 어노테이션 추가해서 유효성 검사 수행

* test: 사진 개수에 따른 성공/실패 테스트 수행

* test: 빈 멀티파일 리스트가 들어올 시, 빈 url 리스트가 들어오는 테스트 수행

* refactor: byte 처리에서 나는 오류를 StaccatoException으로 처리

* chore: dev 서버 PR CD 임시 적용

* refactor: API명 captures -> images로 변경

* chore: dev 서버 PR CD 해제

* fix: test에도 변경된 api명 적용

* feat: 파일을 한 장만 업로드하도록 변경

* feat: dto를 반환하는 새로운 메서드 생성

* test: 테스트 Disabled

* refactor: CloudStorage -> Image로 이름 단순화

* feat: S3 객체 삭제 로직 삭제

* refactor: 미사용 import 삭제

* refactor: 전체 경로를 yml에서 지정

* refactor: getFileExtension 메서드 리팩터링

* feat: ImageUrlResponse 생성

* refactor: file을 전부 image로 변경

* refactor: S3Client를  S3ObjectClient로 변경

* refactor: S3Exception 로깅에 EXCEPTION_LOGGING_FORM 적용

* feat: 로그인한 사용자만 images API를 사용가능하게 함

* refactor: ImageExtension을 사용하는 Service 폴더로 이동

* feat: yml에서 설정한 파일 용량 제한 예외를 잡는 MultipartExceptionHandler 구현

* refactor: 충돌방지 이름변경

* refactor: @Size 사라지면서 Validated 삭제

* test: 컨트롤러 단위 테스트 수행

* refactor: 미사용 import문 삭제

* style: /images API swagger 적용

* refactor: file -> image

* refactor: uploadImages -> uploadImage

* refactor: 미사용 import문 삭제

* chore: PR CD를 수동으로 실행 가능하게 설정

* refactor: 기존 테스트 삭제

* fix: 반영되지 않은 수정사항 관련 테스트 disabled

* chore: dev 서버 PR CD 임시 해제

* fix: 이미지 저장 폴더 재지정

* refactor: 테스트 메서드 네이밍 수정

* refactor: 폴더명 수정

* refactor: 닫는 괄호 추가

* refactor: S3ObjectClient를 infrastructure 패키지로 이동

* refactor: 컨벤션에 맞추어 줄바꿈

* refactor: infra 패키지를 image 패키지 내부로 이동

* feat: 추억 생성 API 수정 #238 (#260)

* feat: multipartFile 제거 및 contentType을 application/json으로 변경

* refactor: term(startAt, endAt) 객체 분리

* feat: startAt, endAt 중 누락 예외 처리

* fix: 기간이 없을 경우 순간 날짜 포함 여부 예외 처리 오류 수정

* test: 기간 포함 날짜 검증 테스트 추가

* refactor: 가독성 있게 로직 수정

* docs: 요청 형식 설명 수정

* feat: 댓글 수정 API 구현 #245 (#254)

* test: Fixture를 활용하도록 기존 테스트 변경

* feat: 댓글을 생성하는 기능 해피케이스 구현

* feat: 댓글을 찾을 수 없는 경우 예외 발생 테스트

* feat: 본인이 달지 않은 댓글에 대해 수정을 시도하면 예외 발생 기능 구현

* test: 조회 권한이 없는 순간에 달린 댓글들 조회를 시도했을 때 예외 발생 테스트 추가

* feat: 댓글 수정 컨트롤러 메서드 구현

* test: 양수가 아닌 댓글 식별자로 댓글 수정 시 예외 발생 테스트

* feat: 댓글 내용을 입력하지 않거나 빈 문자열로 입력 후 댓글 수정 시 예외처리

* refactor: 댓글 생성 시 최소 글자수 조건이 NotBlank에 의해 필요 없으므로 삭제

* refactor: 순서가 불필요하므로 GroupSequence 설정 제거

* feat: updateDTO에 Swagger 적용

* test: 실수로 빠뜨린 when & then 적용

* feat: 댓글 삭제 API 구현 #255 (#257)

* test: Fixture를 활용하도록 기존 테스트 변경

* feat: 댓글을 생성하는 기능 해피케이스 구현

* feat: 댓글을 찾을 수 없는 경우 예외 발생 테스트

* feat: 본인이 달지 않은 댓글에 대해 수정을 시도하면 예외 발생 기능 구현

* test: 조회 권한이 없는 순간에 달린 댓글들 조회를 시도했을 때 예외 발생 테스트 추가

* feat: 댓글 수정 컨트롤러 메서드 구현

* test: 양수가 아닌 댓글 식별자로 댓글 수정 시 예외 발생 테스트

* feat: 댓글 내용을 입력하지 않거나 빈 문자열로 입력 후 댓글 수정 시 예외처리

* refactor: 댓글 생성 시 최소 글자수 조건이 NotBlank에 의해 필요 없으므로 삭제

* refactor: 순서가 불필요하므로 GroupSequence 설정 제거

* feat: updateDTO에 Swagger 적용

* feat: 댓글 삭제 API 해피케이스 구현

* feat: 본인이 쓴 댓글이 아닌데 삭제를 시도하면 예외 처리 기능 구현

* feat: 댓글 삭제 컨트롤러 메서드 구현

* test: 댓글 식별자가 양수가 아닐 경우 댓글 삭제 실패 테스트

* feat: 댓글 삭제 API에 Swagger 적용

* feat: 추억 수정 API 수정 #261 (#262)

* feat: 이미지 컨트롤러 분리로 변경된 사항 반영

* refactor: 미사용 메서드 제거

* test: 인증 관련 테스트 추가

* docs: 명세서 누락 및 오류 수정

* test: aaa 주석 수정

* chore: dev 서버 push 트리거 제거

* feat: 순간 수정 API 구현 #244 (#248)

* refactor: Moment 수정 서비스 로직 수정

* refactor: Moment 수정 컨트롤러 로직 수정

* refactor: 레거시 코드 변경 및 예외 메세지 변경

* docs: 누락 DTO 명세 추가

* docs: 명세 수정

* feat: 순간 삭제 API 구현 #243 (#250)

* style: 네이밍 컨벤션 적용

* docs: 명세 수정

* feat: 순간 조회/목록 조회 API 구현 #251 (#253)

* feat: 순간 조회/목록 조회 서비스 로직 구현

* feat: 순간 조회/목록 조회 컨트롤러 로직 구현

* test: 메서드 쿼리 검증 테스트 추가

* refactor: 클래스 명 수정

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

* 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 적용

* feat: image upload 예외 처리 추가 #268 (#269)

* feat: MissingServletRequestPartException 에러 핸들링

* chore: dev 서버 PR CD 임시 해제

* chore: dev 서버 push cd 삭제

* refactor: 같은 메시지 주는 예외 동일한 exceptionHandler로 묶기

* refactor: 예외 핸들러를 다시 분리

* refactor: 에러 메시지 적절하게 변경

* feat: 서버 별로 이미지 저장 경로 설정 (#272)

* refactor: S3 로직 리팩터링 #274 (#275)

* refactor: 미사용 메서드 삭제

* refactor: 미사용 import 삭제

* refactor: 명세 변경에 따른 swagger 메시지 변경

* refactor: 요청 크기 제한 100->20으로 변경

* refactor: 메서드 순서 변경

* refactor: 개행 삭제

* chore: 운영 서버 구축 #264 (#270)

* chore: prod 서버 환경설정

* feat: prod 환경 로깅 설정

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

* fix: env 파일 경로 수정

* chore: 로그 파일 저장 위치 지정

* chore: 로그 폴더 생성 명령 삭제

* chore: 로그 생성 위치 변경

* chore: 도커 이미지 재실행 코드 추가

* chore: 도커 이미지 재실행 코드 수정

* chore: 로그 콘솔 출력

* chore: 로그 저장 위치 수정

* feat: 운영 환경에서 어드민 로직 비활성화

* refactor: main에 push시에만 prod cd trigger 실행하도록 workflow 변경

---------

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

* fix: 닉네임 앞뒤 공백 제거 #277 (#278)

* fix: 닉네임 앞뒤 공백 제거

* fix: 닉네임 요청 형식에서 앞뒤 공백 제거 NPE 해결

* fix: 순간 조회 응답 형식 수정 (#276)

* fix: 순간 조회 응답 형식 수정

* fix: 순간 목록 응답 인자 명 수정

* feat: 추억 이름 중복 불가 예외 처리 #280 (#282)

* feat: 추억 제목 중복 검사 구현

* docs: 예외 발생 케이스 문서화

* test: 픽스처 활용

* feat: 추억 수정 시 이미 존재하는 타 추억 이름으로 변경 불가능 예외 처리

* test: 주석 오타 수정

* fix: 순간 날짜 반환 형식 변경 #283 (#286)

* fix: 순간 날짜 응답 형식 수정

* refactor: 메서드 분리 로직 삭제

* fix: 날짜 ms 제거

* feat: 현재 날짜를 포함하고 있는 추억 목록 조회 구현 #281 (#285)

* feat: 특정 날짜를 포함하는 모든 추억 조회 기능 구현

* feat: 특정 날짜를 포함하는 모든 추억 조회 기능 구현

* test: 메시지 변경으로 인한 테스트코드 수정

* feat: 날짜로 추억 목록 조회 컨트롤러 분리

* style: 미사용 import 제거

* feat: 날짜를 포함하는 모든 추억을 조회시 기간이 없는 추억도 함께 조회

* refactor: 순간 수정 이미지 순서 적용 #287 (#288)

* refactor: 순간 수정 이미지 순서 적용

* test: 순간 수정 이미지 순서 검증 테스트 추가

* refactor: 순간 수정 이미지 순서 중복 로직 삭제

* refactor: 사용되지 않는 메서드 삭제

* 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 적용

* fix: 순간 조회 응답 필드 추가 #292 (#293)

* fix: 순간 응답 필드에 추억 관련 필드 추가

* test: 픽스쳐 사용

* 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: 예외 메시지 수정 #294 (#298)

* refactor: 예외 메시지의 순간을 스타카토로 변경

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

* refactor: 예외 메시지 수정

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

* refactor: 순간 -> 스타카토

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

* docs: 문서 수정

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

---------

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

* chore: 운영 서버에서 명세서 비활성화 #302 (#303)

* refactor: 안드로이드 1차 QA 반영 #299 (#301)

* refactor: 안드로이드 1차 QA 반영

* refactor: 안드로이드 1차 QA 반영2

* refactor: 안드로이드 1차 QA 반영3

* refactor: 삭제 메시지 변경

* fix: 스타카토 조회 화면 스택 관리 및 ui 수정 #304 (#306)

* feat: 지도 화면에서 스타카토 조회 화면으로 이동 시 스택 관리

* feat: 타임라인 화면에서 추억이 존재하지 않을 때 추억 생성 버튼 추가

* ui: 스타카토 조회 화면 툴바 위치 고정

* feat : 스타카토 제목, 추억 제목에 trim 적용 #305 (#307)

* refactor: 예외 메시지의 순간을 스타카토로 변경

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

* refactor: 예외 메시지 수정

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

* refactor: 순간 -> 스타카토

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

* refactor: 추억 생성 시 title에 trim 적용

* refactor: 스타카토 생성 시 placeName에 trim 적용

* fix: dto에서 size 검증 시 min 조건 제거

---------

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

* 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 파일에 키스토어 관련 설정 적용

* fi…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
android We are android>< ⚙️ build 빌드 관련 (빌드 스크립트 수정 등) fix 버그 (버그 수정)
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants