Skip to content

셀프 피드백 작성 화면 구현 #144

Open
HamBeomJoon wants to merge 9 commits into
developfrom
feat/#113-self-feedback
Open

셀프 피드백 작성 화면 구현 #144
HamBeomJoon wants to merge 9 commits into
developfrom
feat/#113-self-feedback

Conversation

@HamBeomJoon
Copy link
Copy Markdown
Contributor

@HamBeomJoon HamBeomJoon commented May 31, 2026

📌 작업 내용

  • 셀프 피드백 작성 화면 신규 구현

  • 셀프 피드백 저장 API 연동

  • 홈 화면에서 셀프 피드백 작성 진입 연결

    • 지난 발표 카드에서 셀프 피드백 작성 화면으로 이동하도록 네비게이션 연결
    • 홈 화면 발표 분석하기/재분석 관련 네비게이션 연결 및 UI 표시 로직 개선
  • 분석 리포트와 셀프 피드백 플로우 연결

    • 분석 리포트의 “셀프 피드백 작성하기” 버튼에서 작성 화면으로 이동
    • 기존 작성된 셀프 피드백이 있으면 작성 화면 TextArea에 초기값으로 노출
    • 리포트에서 진입해 저장한 경우 홈이 아니라 분석 리포트 화면으로 돌아가며 새로고침되도록 수정

🧩 관련 이슈


📸 스크린샷


Summary by CodeRabbit

  • New Features

    • 발표에 대한 자기 피드백 작성 기능 추가 및 저장/완료 플로우 제공
    • 피드백 전용 화면(UI)과 입력 인터페이스(입력창, 저장버튼, 종료 확인 다이얼로그) 추가
    • 홈·리포트·분석 화면에서 피드백 화면으로 이동하는 네비게이션 통합
  • Chores

    • 피드백 모듈(구성·리소스) 및 빌드 설정 추가
    • 네트워크/도메인 계층 확장으로 피드백 API 연동 및 오류 처리 지원

- `feature:feedback` 모듈(api, impl) 추가 및 의존성 설정
- 셀프 피드백 작성을 위한 `FeedbackScreen`, `FeedbackViewModel` 구현
- `WriteSelfFeedbackUseCase` 및 관련 Repository, RemoteDataSource 로직 추가
- 홈 화면에서 피드백 작성 화면으로의 내비게이션 연결
- `POST recording/{presentationId}/review` API 엔드포인트 정의 및 `SelfFeedbackRequest` DTO 추가
- 피드백 작성 중 이탈 시 확인 다이얼로그 표시 로직 구현
- 피드백 저장 실패 시 스낵바 알림 표시 추가
- 피드백 작성 완료 시 이전 화면이 아닌 홈 화면으로 이동하도록 변경
- 분석 리포트에서 피드백 작성 화면으로 이동 시 발표 제목(`title`) 파라미터 추가
- `FeedbackUiEffect`에 `NavigateToHome` 상태 추가
- `feature:feedback:impl` 및 `feature:report:impl` 모듈의 의존성 업데이트 (`feature:home:api`, `feature:feedback:api`)
- `FeedbackEntryBuilder` 및 `ReportEntryBuilder` 내 네비게이션 핸들러 구현 수정
- `PresentationSummaryResponse`의 `growthGraph` 필드에 null 허용 설정 및 매퍼 로직 수정
- `HomeScreenContent`의 `HorizontalPager`에서 인덱스 참조 시 발생할 수 있는 잠재적 오류 방지 로직 추가
- `PresentationHero`에서 사용하던 `PrezelChip`을 커스텀 `HomeCategoryChip`으로 교체하여 디자인 시스템 요구사항 반영
- `GetPresentationDetailResponse`에 `reviewContent` 필드 추가
- `PresentationRemoteDataSourceImpl`에서 상세 응답 데이터 변환 시 `reviewContent`를 우선적으로 매핑하도록 로직 개선
- `FeedbackEntryBuilder`에서 홈 화면 이동 시 기존 스택을 제거하고 루트를 교체하도록 변경 (`replaceRoot`)
- `PresentationHero` 컴포넌트 프리뷰의 D-Day 표시 형식을 서비스 스펙에 맞게 수정 (`D-3`, `D+5`)
- `HomeScreen`에 발표 분석 페이지로 이동하는 `navigateToAnalyzePresentation` 콜백 추가
- 발표 목록 아이템 클릭 시 해당 발표의 ID와 과거 데이터 여부(`isPastPresentation`)를 전달하도록 구현
- `HomeEntryBuilder`에서 `AnalysisNavKey.ReRecording`을 사용하여 실제 내비게이션 로직 연결
- `FeedbackNavKey`에 `isPast`, `returnToReportOnSave` 파라미터 추가
- 피드백 저장 완료 시 홈 화면 또는 리포트 화면으로 이동하는 분기 로직 구현
- 피드백 작성 시 기존 저장된 내용을 불러오는 `fetchInitialContent` 로직 추가
- 변경 사항 여부를 판단하여 종료 다이얼로그 노출 로직 개선
- `AnalysisReport` 및 `Home` 화면에서 피드백 화면 이동 시 필요한 파라미터 전달 로직 수정
- `feature:feedback:impl` 모듈에 필요한 의존성 추가 (`coreModel`, `featureReportApi`)
@HamBeomJoon HamBeomJoon self-assigned this May 31, 2026
@HamBeomJoon HamBeomJoon requested a review from moondev03 as a code owner May 31, 2026 17:21
@HamBeomJoon HamBeomJoon added the ✨ feat 새로운 기능 추가 또는 기존 기능 확장 label May 31, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 31, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

네트워크 API부터 도메인 유스케이스, ViewModel·Composable UI, 네비게이션 및 빌드 설정까지 포함한 프레젠테이션 자기 피드백 작성 기능을 추가합니다.

Changes

Self Feedback 작성 기능 구현

레이어 / 파일(들) 요약
Self Feedback API 요청/응답 모델 및 서비스 정의
core/network/.../SelfFeedbackRequest.kt, core/network/.../GetPresentationDetailResponse.kt, core/network/.../PresentationSummaryResponse.kt, core/network/service/PresentationService.kt
SelfFeedbackRequest 추가, GetPresentationDetailResponse.reviewContentPresentationSummaryResponse.growthGraph nullable 처리, PresentationService.writeSelfFeedback POST 엔드포인트 추가.
원격 데이터 소스 인터페이스 및 구현
core/network/datasource/PresentationRemoteDataSource.kt, core/network/datasource/PresentationRemoteDataSourceImpl.kt
RemoteDataSource에 writeSelfFeedback 시그니처 추가 및 구현에서 SelfFeedbackRequest 전달, 상세 응답 → PresentationSummaryResponse 변환 추가.
도메인 Repository 인터페이스 및 데이터 구현
core/domain/.../repository/presentation/PresentationRepository.kt, core/data/.../repository/PresentationRepositoryImpl.kt, core/data/.../mapper/PresentationMapper.kt
Repository에 writeSelfFeedback 시그니처 추가; impl에서 원격 호출을 위임하고 도메인 실패 매핑 적용. Mapper에서 growthGraph null-safe 매핑 적용.
WriteSelfFeedbackUseCase
core/domain/.../usecase/presentation/WriteSelfFeedbackUseCase.kt
Repository를 주입받아 피드백 저장을 수행하는 UseCase 추가.
Feedback UI 계약 정의
feature/feedback/impl/.../contract/FeedbackUiIntent.kt, .../FeedbackUiState.kt, .../FeedbackUiEffect.kt, .../model/FeedbackUiMessage.kt, feature/feedback/api/.../FeedbackNavKey.kt, feature/feedback/api/.../strings.xml
UI 인텐트/상태/이펙트/메시지 타입과 네비게이션 키(FeedbackNavKey) 및 빈 리소스 파일 추가.
FeedbackViewModel 및 FeedbackScreen 구현
feature/feedback/impl/.../FeedbackViewModel.kt, feature/feedback/impl/.../FeedbackScreen.kt
초기 피드백 로드, 입력 변경·저장·닫기 흐름, 오류→UI 메시지 매핑 구현; Composable 화면(TopAppBar, 텍스트영역, 저장버튼, 종료 다이얼로그) 및 previews 추가.
Feedback 네비게이션 엔트리 및 DI 설정
feature/feedback/impl/.../navigation/FeedbackEntryBuilder.kt
Feedback 화면 엔트리 빌더와 Hilt 모듈 제공자 등록으로 네비게이션에 화면 등록.
Home 화면에서 Feedback 네비게이션 연결
feature/home/impl/.../build.gradle.kts, feature/home/impl/.../main/HomeScreen.kt, feature/home/impl/.../main/component/HomeScreenContent.kt, feature/home/impl/.../main/component/title/PresentationHero.kt, feature/home/impl/.../navigation/HomeEntryBuilder.kt
Home 모듈에 API 의존성 추가, HomeScreen에서 feedback 네비게이션 콜백 연결, HorizontalPager null-safe 처리, 카테고리 칩 UI 개선.
Report 화면에서 Feedback 네비게이션 및 파라미터 확장
feature/report/impl/.../build.gradle.kts, feature/report/impl/.../AnalysisReportScreen.kt, feature/report/impl/.../AnalysisReportViewModel.kt, feature/report/impl/.../contract/AnalysisReportUiEffect.kt, feature/report/impl/.../navigation/ReportEntryBuilder.kt
Report 화면의 navigateToSelfFeedbackWrite 파라미터를 (presentationId, title, isPast)로 확장하고, ViewModel·Effect·엔트리 빌더에서 해당 파라미터를 사용해 FeedbackNavKey로 실제 네비게이션을 수행하도록 변경.
빌드 설정 및 모듈 포함
feature/feedback/api/build.gradle.kts, feature/feedback/impl/build.gradle.kts, app/build.gradle.kts, settings.gradle.kts, detekt-config.yml
피드백 API/Impl 모듈의 build 파일 추가, settings에 모듈 포함, 앱·feature 모듈들의 dependency에 featureFeedbackApi/featureFeedbackImpl 추가, detekt 설정의 thresholdInInterfaces 상향.
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Out of Scope Changes check ❓ Inconclusive detekt 설정 파일의 TooManyFunctions 임계값 변경을 제외한 모든 변경사항이 셀프 피드백 기능 구현과 관련되어 있습니다. detekt-config.yml의 TooManyFunctions 임계값 변경(12→15)이 이슈 #113과 직접적인 관련성이 없어 보이므로 해당 변경의 필요성을 검토하시기 바랍니다.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경사항인 셀프 피드백 작성 화면 구현을 명확하게 요약하고 있습니다.
Description check ✅ Passed PR 설명이 작업 내용, 관련 이슈, 스크린샷 섹션을 포함하며 템플릿 구조를 대부분 따르고 있습니다.
Linked Issues check ✅ Passed PR의 모든 코드 변경사항이 이슈 #113의 요구사항(셀프 피드백 작성 화면 구현, 홈/리포트 연결, 저장 기능, 초기값 노출, UX 처리)을 충족합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
Prezel/detekt-config.yml (1)

40-40: ⚡ Quick win

Detekt 전역 완화 대신 범위 제한 적용을 권장합니다.

thresholdInInterfaces 전역 상향은 unrelated 인터페이스까지 규칙 신호를 약화시킬 수 있습니다. 이 PR 목적이 특정 인터페이스 대응이라면 해당 지점에 @Suppress("TooManyFunctions") 또는 인터페이스 분리로 범위를 제한하는 쪽이 유지보수에 더 안전합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Prezel/detekt-config.yml` at line 40, Revert the global raise of
thresholdInInterfaces in detekt-config.yml and instead apply the suppression or
refactor locally: identify the specific interface(s) that triggered the rule and
either annotate that interface declaration with `@Suppress`("TooManyFunctions") or
split the interface into smaller interfaces to reduce function count; ensure
detekt-config.yml keeps the default thresholdInInterfaces and only use
`@Suppress`("TooManyFunctions") on the precise interface(s) you changed (or
perform the interface split) so the rule weakening is scoped rather than global.
Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackScreen.kt (1)

185-191: ⚡ Quick win

글자 수 제한 상수가 중복됩니다.

maxLength = 200이 하드코딩되어 있는데, FeedbackViewModelMAX_CONTENT_COUNT = 200과 동일한 값입니다. 한쪽만 변경되면 UI에 표시되는 카운트/제한과 ViewModel의 실제 truncate 길이가 어긋날 수 있습니다. 공용 상수로 추출해 단일 출처로 관리하는 것을 권장합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackScreen.kt`
around lines 185 - 191, Hardcoded maxLength (200) in PrezelTextArea duplicates
FeedbackViewModel's MAX_CONTENT_COUNT; extract a shared constant (e.g.,
FeedbackConstants.MAX_CONTENT_COUNT) and use it in both places so the UI and
ViewModel stay in sync: create a common constant holder (object/class) and
replace the literal in FeedbackScreen's PrezelTextArea (maxLength) and in
FeedbackViewModel's MAX_CONTENT_COUNT reference to use that single constant.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackViewModel.kt`:
- Around line 45-61: fetchInitialContent uses fetchPresentationDetailUseCase but
lacks an onFailure branch so initialContent and the UI can be cleared on network
error; add an onFailure handler on the Result returned by
fetchPresentationDetailUseCase inside viewModelScope.launch that logs the error
and emits a user-facing event (or shows a toast/snackbar) via existing
state/events instead of setting initialContent to an empty string, and ensure
you only set initialContent and call updateState { copy(content = ...) } inside
the onSuccess path (do not overwrite currentState.content on failure). Use the
existing symbols: fetchInitialContent, fetchPresentationDetailUseCase,
initialContent, updateState, and viewModelScope.launch to locate where to add
the onFailure handling and UI/error emission.

---

Nitpick comments:
In `@Prezel/detekt-config.yml`:
- Line 40: Revert the global raise of thresholdInInterfaces in detekt-config.yml
and instead apply the suppression or refactor locally: identify the specific
interface(s) that triggered the rule and either annotate that interface
declaration with `@Suppress`("TooManyFunctions") or split the interface into
smaller interfaces to reduce function count; ensure detekt-config.yml keeps the
default thresholdInInterfaces and only use `@Suppress`("TooManyFunctions") on the
precise interface(s) you changed (or perform the interface split) so the rule
weakening is scoped rather than global.

In
`@Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackScreen.kt`:
- Around line 185-191: Hardcoded maxLength (200) in PrezelTextArea duplicates
FeedbackViewModel's MAX_CONTENT_COUNT; extract a shared constant (e.g.,
FeedbackConstants.MAX_CONTENT_COUNT) and use it in both places so the UI and
ViewModel stay in sync: create a common constant holder (object/class) and
replace the literal in FeedbackScreen's PrezelTextArea (maxLength) and in
FeedbackViewModel's MAX_CONTENT_COUNT reference to use that single constant.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1cfd6e0d-7aab-4e2f-85df-3e11e1c37aae

📥 Commits

Reviewing files that changed from the base of the PR and between e3831de and 1222340.

📒 Files selected for processing (39)
  • Prezel/app/build.gradle.kts
  • Prezel/core/data/src/main/java/com/team/prezel/core/data/mapper/PresentationMapper.kt
  • Prezel/core/data/src/main/java/com/team/prezel/core/data/repository/PresentationRepositoryImpl.kt
  • Prezel/core/domain/src/main/kotlin/com/team/prezel/core/domain/repository/presentation/PresentationRepository.kt
  • Prezel/core/domain/src/main/kotlin/com/team/prezel/core/domain/usecase/presentation/WriteSelfFeedbackUseCase.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/datasource/PresentationRemoteDataSource.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/datasource/PresentationRemoteDataSourceImpl.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/GetPresentationDetailResponse.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/PresentationSummaryResponse.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/model/presentation/review/SelfFeedbackRequest.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/service/PresentationService.kt
  • Prezel/detekt-config.yml
  • Prezel/feature/feedback/api/build.gradle.kts
  • Prezel/feature/feedback/api/consumer-rules.pro
  • Prezel/feature/feedback/api/proguard-rules.pro
  • Prezel/feature/feedback/api/src/main/java/com/team/prezel/feature/feedback/api/FeedbackNavKey.kt
  • Prezel/feature/feedback/api/src/main/res/values/strings.xml
  • Prezel/feature/feedback/impl/build.gradle.kts
  • Prezel/feature/feedback/impl/consumer-rules.pro
  • Prezel/feature/feedback/impl/proguard-rules.pro
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackScreen.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackViewModel.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/contract/FeedbackUiEffect.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/contract/FeedbackUiIntent.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/contract/FeedbackUiState.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/model/FeedbackUiMessage.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/navigation/FeedbackEntryBuilder.kt
  • Prezel/feature/feedback/impl/src/main/res/values/strings.xml
  • Prezel/feature/home/impl/build.gradle.kts
  • Prezel/feature/home/impl/src/main/java/com/team/prezel/feature/home/impl/main/HomeScreen.kt
  • Prezel/feature/home/impl/src/main/java/com/team/prezel/feature/home/impl/main/component/HomeScreenContent.kt
  • Prezel/feature/home/impl/src/main/java/com/team/prezel/feature/home/impl/main/component/title/PresentationHero.kt
  • Prezel/feature/home/impl/src/main/java/com/team/prezel/feature/home/impl/navigation/HomeEntryBuilder.kt
  • Prezel/feature/report/impl/build.gradle.kts
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/AnalysisReportScreen.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/AnalysisReportViewModel.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/contract/AnalysisReportUiEffect.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt
  • Prezel/settings.gradle.kts

- `AnalysisReportUiIntent.FetchData` 인텐트를 추가하고 `LaunchedEffect`를 통해 데이터를 호출하도록 변경
- `ReportNavKey`와 `FeedbackNavKey`에서 불필요한 `refreshKey`, `returnToReportOnSave` 파라미터 제거
- 피드백 저장 완료 시 복잡한 화면 전환 로직을 `navigator.goBack()`으로 단순화
- `AnalysisReportViewModel`의 초기 데이터 로드 로직을 `init` 블록에서 `onIntent` 처리 방식으로 이전
- `feature:feedback:impl` 모듈의 불필요한 의존성(`feature:home:api`, `feature:report:api`) 제거
- 서버 에러 코드(`ServerErrorCode`) 및 앱 에러(`AppError`) 매핑 로직 추가
    - `SELF_FEEDBACK_ALREADY_WRITTEN`, `PRESENTATION_REVIEW_NOT_FOUND`, `PRESENTATION_REVIEW_FORBIDDEN` 추가
- `FeedbackUiMessage` enum 클래스에 에러 케이스 추가
    - `FETCH_FEEDBACK_FAILED`, `PRESENTATION_FORBIDDEN`, `PRESENTATION_NOT_FOUND`, `SELF_FEEDBACK_ALREADY_WRITTEN` 정의
- `FeedbackViewModel` 내 에러 핸들링 로직 개선
    - 발표 상세 조회 및 피드백 저장 실패 시 `FeedbackUiMessage`로 변환하여 UI 에러 메시지 표시
    - `AppException` 기반의 `toFeedbackUiMessage` 확장 함수 구현
- 피드백 화면(`FeedbackScreen`) 에러 메시지 스낵바 연동 및 다국어 리소스 추가
- `feature:feedback:impl` 모듈에 `coreCommon` 의존성 추가 및 최대 글자 수 상수명 변경(`FEEDBACK_CONTENT_MAX_LENGTH`)
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackViewModel.kt`:
- Around line 93-95: 성공 분기에서 isSaving 상태를 false로 복구하지 않아 저장 버튼이 비활성화된 상태로 남는 문제를
고치세요: FeedbackViewModel의 해당 비동기 호출의 onSuccess 블록(현재
sendEffect(FeedbackUiEffect.SaveComplete) 호출이 있는 위치)에서 isSaving 상태를 false로 설정하도록
상태 업데이트 로직(예: 상태 복사나 setState/updateState 호출)을 추가해 주세요 so that after
sendEffect(FeedbackUiEffect.SaveComplete) completes the viewModel restores
isSaving=false.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5e13377d-49b6-4a17-8c83-d6453f901e0f

📥 Commits

Reviewing files that changed from the base of the PR and between 1222340 and 4ef55ae.

📒 Files selected for processing (16)
  • Prezel/app/build.gradle.kts
  • Prezel/core/data/src/main/java/com/team/prezel/core/data/error/AppErrorExt.kt
  • Prezel/core/network/src/main/java/com/team/prezel/core/network/model/BaseResponse.kt
  • Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt
  • Prezel/feature/feedback/api/src/main/java/com/team/prezel/feature/feedback/api/FeedbackNavKey.kt
  • Prezel/feature/feedback/impl/build.gradle.kts
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackScreen.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackViewModel.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/model/FeedbackUiMessage.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/navigation/FeedbackEntryBuilder.kt
  • Prezel/feature/feedback/impl/src/main/res/values/strings.xml
  • Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/AnalysisReportScreen.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/AnalysisReportViewModel.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/contract/AnalysisReportUiIntent.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt
💤 Files with no reviewable changes (4)
  • Prezel/feature/feedback/api/src/main/java/com/team/prezel/feature/feedback/api/FeedbackNavKey.kt
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt
  • Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt
  • Prezel/feature/analysis/impl/src/main/java/com/team/prezel/feature/analysis/impl/navigation/AnalysisEntryBuilder.kt
✅ Files skipped from review due to trivial changes (2)
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/contract/AnalysisReportUiIntent.kt
  • Prezel/feature/feedback/impl/src/main/res/values/strings.xml
🚧 Files skipped from review as they are similar to previous changes (3)
  • Prezel/app/build.gradle.kts
  • Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/AnalysisReportScreen.kt
  • Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackScreen.kt

Comment on lines +93 to +95
).onSuccess {
sendEffect(FeedbackUiEffect.SaveComplete)
}.onFailure { throwable ->
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

저장 성공 시 isSaving 상태를 복구해 주세요.

성공 분기에서 isSavingfalse로 되돌리지 않아, SaveComplete 이펙트가 소비되지 않거나 내비게이션이 실패하면 저장 버튼이 계속 비활성화될 수 있습니다.

수정 예시
             ).onSuccess {
+                updateState { copy(isSaving = false) }
                 sendEffect(FeedbackUiEffect.SaveComplete)
             }.onFailure { throwable ->
                 updateState { copy(isSaving = false) }
                 sendEffect(FeedbackUiEffect.ShowMessage(throwable.toFeedbackUiMessage()))
                 Timber.e(throwable)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Prezel/feature/feedback/impl/src/main/java/com/team/prezel/feature/feedback/impl/FeedbackViewModel.kt`
around lines 93 - 95, 성공 분기에서 isSaving 상태를 false로 복구하지 않아 저장 버튼이 비활성화된 상태로 남는
문제를 고치세요: FeedbackViewModel의 해당 비동기 호출의 onSuccess 블록(현재
sendEffect(FeedbackUiEffect.SaveComplete) 호출이 있는 위치)에서 isSaving 상태를 false로 설정하도록
상태 업데이트 로직(예: 상태 복사나 setState/updateState 호출)을 추가해 주세요 so that after
sendEffect(FeedbackUiEffect.SaveComplete) completes the viewModel restores
isSaving=false.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 추가 또는 기존 기능 확장

Projects

None yet

Development

Successfully merging this pull request may close these issues.

셀프 피드백 작성 화면 구현

1 participant