Skip to content

Comments

[Feat] 1차 QA 기능 추가#90

Merged
kamja0510 merged 31 commits intodevelopfrom
feat/#89-qa-1-new-feature
Jan 29, 2026
Merged

[Feat] 1차 QA 기능 추가#90
kamja0510 merged 31 commits intodevelopfrom
feat/#89-qa-1-new-feature

Conversation

@kamja0510
Copy link
Collaborator

@kamja0510 kamja0510 commented Jan 28, 2026

Related issue 🛠

Work Description ✏️

  • 타 유저 프로필 볼 수 있도록 구현
  • 매일 질문이 도착했다는 알림 구현
  • 마이페이지의 scrapped 데이터들이 다른 화면을 갔다 돌아올 시 반영되도록 구현
  • 앱 아이콘 추가
  • 알림 권한이 시스템 설정과 연동되도록 구현
  • 홈화면 large cover 블러 처리

Screenshot 📷

image

To Reviewers 📢

QA한번 시원하게 부탁드립니다~

t1nm1ksun and others added 28 commits January 25, 2026 16:47
@kamja0510 kamja0510 self-assigned this Jan 28, 2026
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

이 PR은 1차 QA 과정에서 발견된 기능들을 구현합니다. 주요 변경사항으로는 타 유저 프로필 조회, 매일 오전 9시 질문 도착 알림, 마이페이지 데이터 새로고침, 앱 아이콘 추가, 알림 권한 시스템 연동, 홈화면 커버 블러 효과 등이 있습니다.

Changes:

  • 새로운 feature:otherprofile 모듈 추가로 타 유저 프로필 조회 기능 구현
  • WorkManager 기반 매일 알림 스케줄링 및 알림 권한 시스템 설정 연동
  • Refresh Trigger 패턴을 통한 화면 간 데이터 동기화 개선
  • Badges 모델을 BADGE enum으로 리팩토링하여 타입 안정성 향상
  • MyPage를 data class로 변경하여 초기 탭 지정 가능

Reviewed changes

Copilot reviewed 56 out of 72 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
settings.gradle.kts otherprofile 모듈 추가
gradle/libs.versions.toml WorkManager 의존성 추가
feature/setting/* 알림 권한을 시스템 설정으로 연동하도록 변경
feature/otherprofile/* 타 유저 프로필 조회 기능 신규 구현
feature/mypage/* 데이터 새로고침 trigger 통합 및 초기 탭 설정 기능 추가
feature/home/* 새로고침 trigger, 잠긴 커버 모달, 블러 효과 구현
feature/detail/* 삭제 확인 모달 추가, 날짜 표시 개선, BADGE 통합
feature/comment/* Home 새로고침 trigger 연동
core/navigation/* MyPage data class 변경, OtherProfile 라우트 추가
core/domain/* UseCase 리팩토링, BADGE enum 도입, UserRelation 및 CheckUserRelationUseCase 추가
core/data/* BADGE 모델 변경, PostDetail 날짜 포맷팅 추가, User 조회 API 추가
core/designsystem/* DPlayLargeCover 블러 효과, 북마크 버튼 분리, 리포트 바텀시트 단일 선택으로 변경
core/common/* HomeRefreshTrigger, RegisteredTrackRefreshTrigger, ScrappedTrackRefreshTrigger 추가
app/* 앱 아이콘 추가, DailyQuestionWorker 구현, 알림 스케줄링

}

companion object{
const val ADMIN_ID = 1L
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

ADMIN_ID가 하드코딩되어 있습니다. 설정이나 BuildConfig를 통해 관리하는 것이 더 유연합니다.

Copilot uses AI. Check for mistakes.
Comment on lines 184 to 185
}.onFailure { e ->
changeBottomSheetVisible(visible = false)
Timber.e(e)
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

포스트 삭제 실패 시 빈 onFailure 블록만 있습니다. 사용자에게 삭제 실패를 알리거나 에러를 로깅해야 합니다.

Copilot uses AI. Check for mistakes.
Comment on lines +395 to +396
} else {
}
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

빈 else 블록이 남아있습니다. 불필요한 코드는 제거하는 것이 좋습니다.

Copilot uses AI. Check for mistakes.
Spacer(modifier = Modifier.height(184.dp))

Text(
text = "아직 등록한 곡이 없어요",
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

하드코딩된 문자열입니다. strings.xml로 리소스화하는 것이 좋습니다.

Copilot uses AI. Check for mistakes.
Spacer(modifier = Modifier.height(184.dp))

Text(
text = "아직 저장한 곡이 없어요",
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

하드코딩된 문자열입니다. strings.xml로 리소스화하는 것이 좋습니다.

Copilot uses AI. Check for mistakes.
Comment on lines +51 to +56
// 추후 Writer와 통합
User(
id = userData.userId,
nickname = userData.nickname,
profileImagePath = userData.profileImg,
)
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

주석 "추후 Writer와 통합"이 있지만, Writer 타입과 User 타입이 중복되는 것으로 보입니다. 이는 기술 부채가 될 수 있으니 이슈로 트래킹하거나 TODO로 명확히 표시하는 것이 좋습니다.

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="other_profile_screen_title">마이페이지</string>
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

타 유저의 프로필 화면인데 screen_title이 "마이페이지"로 되어 있습니다. 다른 사용자의 프로필이므로 "프로필" 또는 사용자 닉네임을 표시하는 것이 더 적절합니다.

Copilot uses AI. Check for mistakes.
Comment on lines +25 to +51
private fun scheduleDailyNotification() {
val currentDate = Calendar.getInstance()
val dueDate = Calendar.getInstance()

dueDate.set(Calendar.HOUR_OF_DAY, 9)
dueDate.set(Calendar.MINUTE, 0)
dueDate.set(Calendar.SECOND, 0)

if (dueDate.before(currentDate)) {
dueDate.add(Calendar.HOUR_OF_DAY, 24)
}

val timeDiff = dueDate.timeInMillis - currentDate.timeInMillis

val dailyWorkRequest =
PeriodicWorkRequestBuilder<DailyQuestionWorker>(24, TimeUnit.HOURS)
.setInitialDelay(timeDiff, TimeUnit.MILLISECONDS)
.addTag(DailyQuestionWorker.TAG)
.build()

WorkManager
.getInstance(this)
.enqueueUniquePeriodicWork(
DailyQuestionWorker.WORK_NAME,
ExistingPeriodicWorkPolicy.KEEP,
dailyWorkRequest,
)
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

WorkManager는 정확한 시간 보장이 어렵습니다. 정확히 오전 9시에 알림을 보내야 한다면 AlarmManager 사용을 고려해야 합니다. WorkManager는 배터리 최적화를 위해 실행 시간을 조정할 수 있어 최대 15분 정도 지연될 수 있습니다.

Copilot uses AI. Check for mistakes.
Comment on lines +19 to +22
override fun doWork(): Result {
showNotification()
return Result.success()
}
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

알림 권한이 없을 때 알림이 표시되지 않습니다. 권한 체크를 추가하거나, 최소한 권한이 없을 때는 Worker 실행을 건너뛰는 로직이 필요합니다.

Copilot uses AI. Check for mistakes.
Comment on lines +62 to +65
if (event == Lifecycle.Event.ON_RESUME) {
val isGranted = NotificationManagerCompat.from(context).areNotificationsEnabled()
viewModel.handleIntent(SettingContract.SettingIntent.UpdateNotificationPermission(isGranted))
}
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

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

시스템 설정에서 알림 권한 변경 시 앱으로 돌아올 때마다 권한 상태를 확인하는 것은 좋은 접근이지만, 화면이 표시될 때마다(ON_RESUME) 체크하는 것은 과도할 수 있습니다. ON_START 이벤트를 사용하거나, 설정 화면에서 돌아올 때만 체크하는 것을 고려해보세요.

Copilot uses AI. Check for mistakes.
@kamja0510 kamja0510 merged commit 469eb01 into develop Jan 29, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 1차 QA 기능 추가

2 participants