Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
dd29a54
feat: 오른쪽상단아이콘 클릭하면 daily-expand로 화면이동 #166
theBettor May 13, 2025
7adc196
feat: fab를 누르면 daily-edit로 화면이동
theBettor May 13, 2025
41a9e63
feat: fab를 누르면 daily-edit로 화면이동 #165
theBettor May 13, 2025
984f9d9
Merge remote-tracking branch 'origin/refactor/daily' into refactor/daily
theBettor May 13, 2025
ccbe560
feat: 일과 추가를 위한 usecase 생성 #164
theBettor May 13, 2025
6ae22b1
feat: daily-edit에서 완료하면 daily에서 보여주기
theBettor May 13, 2025
34f881b
feat: daily-edit에서 완료하면 daily에서 보여주기 #164
theBettor May 13, 2025
dbd9ab4
Merge remote-tracking branch 'origin/refactor/daily' into refactor/daily
theBettor May 13, 2025
66854e6
왜안될까
theBettor May 13, 2025
b61aa1d
feat: daily-certify 모듈 생성
theBettor May 14, 2025
d9c71d4
feat: 일과알람화면 추가
theBettor May 14, 2025
5a34f1d
fix: 누락된 answer모듈 추가
theBettor May 14, 2025
834f095
Merge remote-tracking branch 'origin/develop' into refactor/daily
theBettor May 20, 2025
82fa7e6
feat: 인증화면을 enum으로 분기처리 #162
theBettor May 20, 2025
7b8643b
feat: bottomSheet, dialog 추가
theBettor May 21, 2025
341ae1c
feat: 댓글삭제, BottomSheet를 제외한 디자인 마무리
theBettor May 21, 2025
96398da
feat: bottomSheet, dialog 추가 #162
theBettor May 21, 2025
b430129
feat: 댓글삭제, BottomSheet를 제외한 디자인 마무리 #162
theBettor May 21, 2025
f49505d
Merge remote-tracking branch 'origin/refactor/daily' into refactor/daily
theBettor May 21, 2025
fd75fc4
feat: workmanager로 notification 띄우기 #169
theBettor May 25, 2025
dfd9a18
fix: 꼭 도착해야할 액티비티에 대한 manifest 명시해주기 #169
theBettor May 26, 2025
a581493
feat: Alarm->Certify 화면연결 #180
theBettor May 26, 2025
9172053
refactore: 프리뷰용이 아닌 PlaceHolder로 교체 #182
theBettor May 26, 2025
8cf5b85
feat: Certify-> CertiyDetail 화면연결 #180
theBettor May 27, 2025
e7570ea
fix: onCertifyCompleteRequest시 CONFIRMED로 끝나는것이 아닌 CONFIRMED->PENDING…
theBettor May 27, 2025
ffefeb3
fix: lint #182
theBettor May 27, 2025
44ba818
fix : 접근 제어자를 internal에서 public으로 수정 #182
theBettor May 29, 2025
7b1c8fe
feat: BottomSheet 추가 #182
theBettor May 29, 2025
472bc2a
refactor: 파라미터 3개 추가, BottomSheet다시 열기 위한 트리거 추가 #182
theBettor May 29, 2025
6b114bc
feat: BottomSheet에 photopicker 넣을 수 있게 #182
theBettor May 29, 2025
39feb6a
feat: 바텀시트 이미지 업로드 #182
theBettor May 29, 2025
1c44ccc
feat: 댓글 추가 완료되면 Item에 바로 적용하기 #182
theBettor May 29, 2025
824c11e
feat: 댓글 삭제 기능 추가, 주석제거 #182
theBettor May 29, 2025
c3de5fd
Merge remote-tracking branch 'origin/develop' into refactor/daily
theBettor May 29, 2025
eb0e8d0
fix: lint
theBettor May 29, 2025
cfd5115
feat: workmanager를 완료버튼을 누를 때의 시점으로 변경 #182
theBettor May 30, 2025
5317903
refactor: 필요없는 함수 정리 #184
theBettor May 31, 2025
ca60eea
fix: 화면보이게 if문 제거 #184
theBettor May 31, 2025
76e28e4
refactor: expand모듈에서 DailyManage가 아닌 GetDailyRoutine가져오기 #185
theBettor May 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ dependencies {
implementation(project(":feature:daily"))
implementation(project(":feature:daily-edit"))
implementation(project(":feature:daily-expand"))
implementation(project(":feature:daily-certify"))
implementation(project(":feature:memorycard-registration"))
implementation(project(":feature:question"))
implementation(project(":feature:question-expand"))
Expand Down
54 changes: 43 additions & 11 deletions app/src/main/java/com/teampatch/harmony/MainNavHost.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.teampatch.harmony

import android.net.Uri
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
Expand All @@ -9,10 +10,13 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navOptions
import com.teampatch.core.common.findActivity
import com.teampatch.feature.answer.addAnswerScreen
import com.teampatch.daily.certify.addDailyCertifyAlarmScreen
import com.teampatch.daily.certify.navigateToDailyCertifyScreen
import com.teampatch.feature.answer.navigateToAnswerScreen
import com.teampatch.feature.daily.edit.addDailyEditScreen
import com.teampatch.feature.daily.edit.navigateToDailyEditScreen
import com.teampatch.feature.daily.expand.addDailyExpandScreen
import com.teampatch.feature.daily.expand.navigateToDailyExpandScreen
import com.teampatch.feature.family.info.addFamilyInfoScreen
import com.teampatch.feature.family.info.navigateToFamilyInfoScreen
import com.teampatch.feature.home.HomeRoute
Expand Down Expand Up @@ -47,7 +51,6 @@ import com.teampatch.feature.onboarding.make.navigateToShareInvitationScreen
import com.teampatch.feature.profile.edit.addProfileEditScreen
import com.teampatch.feature.profile.edit.navigateToProfileEditScreen
import com.teampatch.feature.question.addQuestionScreen
import com.teampatch.feature.question.detail.QuestionDetailParams
import com.teampatch.feature.question.detail.addQuestionDetailScreen
import com.teampatch.feature.question.detail.navigateToQuestionDetailScreen
import com.teampatch.feature.question.expand.addQuestionExpandScreen
Expand Down Expand Up @@ -179,14 +182,14 @@ fun MainNavHost(
answerEditPageRequest = navController::navigateToAnswerScreen
)

addAnswerScreen(
onBackRequest = navController::navigateUp,
onCompleteRequest = { answer ->
navController.previousBackStackEntry?.savedStateHandle?.set(
key = QuestionDetailParams.ANSWER_UPDATE_DATA,
value = answer
)
navController.popBackStack()
addDailyEditScreen(
onDismissRequest = navController::navigateUp,
onCompleteRequest = { todo ->
Log.d("DEBUG", "MainNavHost: 전달받은 todo = $todo") // ✅ 여기
navController.previousBackStackEntry
?.savedStateHandle
?.set("new_todo", todo)
navController.navigateUp()
}
)

Expand All @@ -213,7 +216,8 @@ fun MainNavHost(
)

addDailyScreen(
dailyExpandPageRequest = { navController.navigateToDailyScreen() }
dailyExpandPageRequest = { navController.navigateToDailyExpandScreen() },
dailyEditPageRequest = { navController.navigateToDailyEditScreen() }
)

addDailyExpandScreen(
Expand All @@ -222,6 +226,34 @@ fun MainNavHost(
onDeleteClick = {} // 임시
)

addDailyEditScreen(
onDismissRequest = navController::navigateUp,
onCompleteRequest = { todo ->
Log.d("DEBUG", "MainNavHost: 전달받은 todo = $todo") // ✅ 여기
navController.previousBackStackEntry
?.savedStateHandle
?.set("todo_added", true) // 결과 저장
navController.navigateUp()
}
)

addDailyCertifyAlarmScreen(
onPickImageScreenRequest = { navController.navigateToDailyCertifyScreen() },
onDismissRequest = { navController.navigateToHomeScreen() },
fromNotification = true
)

// addDailyCertifyScreen(
// viewModel = DailyCertifyViewModel(),
// onBackRequest = navController::navigateUp,
// onCertifyCompleteRequest = { navController.navigateToDailyCertifyDetailScreen() },
// onNavigateToDetailRequest = { navController.navigateToDailyCertifyDetailScreen() }
// )
//
// addDailyCertifyDetailScreen(
// onBackRequest = navController::navigateUp
// )

addMemoryStorageDetailScreen(
onBackRequest = navController::navigateUp,
onRestartConversation = { navController.navigateToMemoryCardRegistrationScreen("memoryCardId") }
Expand Down
4 changes: 4 additions & 0 deletions core/data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,17 @@ dependencies {
implementation(project(":core:network"))
implementation(project(":core:authentication"))
implementation(project(":core:database"))
implementation(project(":core:designsystem"))

implementation("androidx.work:work-runtime-ktx:2.9.0")

implementation(libs.google.play.app.update)

implementation(libs.androidx.paging.runtime)
implementation(libs.androidx.paging.compose)

implementation(libs.androidx.security.crypto)
implementation(project(":feature:daily-certify"))

testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
Expand Down
4 changes: 3 additions & 1 deletion core/data/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<manifest xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.teampatch.core.data.repository

import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.teampatch.core.designsystem.R.drawable.img_upload_cert
import com.teampatch.core.domain.repository.NotificationRepository
import com.teampatch.daily.certify.EditCertifyActivity
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import java.time.Duration
import java.time.LocalDateTime
import java.util.concurrent.TimeUnit
import javax.inject.Inject

class NotificationRepositoryImpl @Inject constructor(
@ApplicationContext private val context: Context,
) : NotificationRepository {
override fun scheduleCertifyNotification(time: LocalDateTime) {
val delay = Duration.between(LocalDateTime.now(), time).toMillis()
val request = OneTimeWorkRequestBuilder<CertifyNotificationWorker>()
.setInitialDelay(delay, TimeUnit.MILLISECONDS)
.build()
WorkManager.getInstance(context).enqueue(request)
}
}

class CertifyNotificationWorker(
context: Context,
workerParams: WorkerParameters,
) : Worker(context, workerParams) {

override fun doWork(): Result {
// ✅ 1. 먼저 채널 생성
createNotificationChannel(applicationContext)

// ✅ 2. 알림 생성
val notificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

val notification = NotificationCompat.Builder(applicationContext, "certify_channel")
.setContentTitle("인증 시간이에요!")
.setContentText("지금 바로 인증하러 가볼까요?")
.setContentIntent(createPendingIntent())
.setSmallIcon(img_upload_cert) // ← 아이콘도 꼭 지정해야 보임!
.setAutoCancel(true)
.build()

notificationManager.notify(1001, notification)
return Result.success()
}

// ✅ 여기에 채널 생성 함수 추가
private fun createNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "인증 알림"
val description = "Daily certify notification"
val importance = NotificationManager.IMPORTANCE_HIGH
val channel = NotificationChannel("certify_channel", name, importance).apply {
this.description = description
}

val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}

private fun createPendingIntent(): PendingIntent {
val intent = Intent(applicationContext, EditCertifyActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
putExtra("FROM_NOTIFICATION", true)
}

return PendingIntent.getActivity(
applicationContext,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
}
}

@Module
@InstallIn(SingletonComponent::class)
abstract class NotificationModule {

@Binds
abstract fun bindNotificationRepository(
impl: NotificationRepositoryImpl,
): NotificationRepository
}
37 changes: 37 additions & 0 deletions core/designsystem/src/main/res/drawable/img_upload_cert.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="392dp"
android:height="240dp"
android:viewportWidth="392"
android:viewportHeight="240">
<path
android:pathData="M-1,0h393v240h-393z"
android:fillColor="#F5F5F1"/>
<path
android:pathData="M219.69,106.43H172.31C169.93,106.43 168,108.3 168,110.61V139.83C168,142.13 169.93,144 172.31,144H219.69C222.07,144 224,142.13 224,139.83V110.61C224,108.3 222.07,106.43 219.69,106.43Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#E6E3DD"
android:strokeLineCap="round"/>
<path
android:pathData="M195.99,134.07C200.73,134.07 204.59,130.22 204.59,125.47C204.59,120.72 200.73,116.87 195.99,116.87C191.24,116.87 187.38,120.72 187.38,125.47C187.38,130.22 191.24,134.07 195.99,134.07Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#E6E3DD"
android:strokeLineCap="round"/>
<path
android:pathData="M206.77,106.43V100.17C206.77,99.07 206.32,98.01 205.51,97.22C204.7,96.44 203.6,96 202.46,96H189.54C188.4,96 187.3,96.44 186.49,97.22C185.68,98.01 185.23,99.07 185.23,100.17V106.43"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#E6E3DD"
android:strokeLineCap="round"/>
<path
android:pathData="M208.55,172L197,152L185.45,172H54C40.75,172 30,182.74 30,196C30,209.26 40.75,220 54,220H339C352.26,220 363,209.26 363,196C363,182.74 352.26,172 339,172H208.55Z"
android:fillColor="#00C573"
android:fillType="evenOdd"/>
<path
android:pathData="M79.19,186.49V205.93H76.78V186.49H79.19ZM63.66,194.76C63.65,190.57 65.78,187.91 68.73,187.91C71.64,187.91 73.79,190.57 73.8,194.76C73.79,198.98 71.64,201.64 68.73,201.64C65.78,201.64 63.65,198.98 63.66,194.76ZM65.96,194.76C65.96,197.75 67.08,199.48 68.73,199.49C70.36,199.48 71.48,197.75 71.48,194.76C71.48,191.8 70.36,190.06 68.73,190.06C67.08,190.06 65.96,191.8 65.96,194.76ZM97.56,187.41V188.88C97.57,190.36 97.57,192.03 97.09,194.23L94.7,193.99C95.13,192.03 95.17,190.6 95.17,189.28H84.11V187.41H97.56ZM82.09,197.27V195.38H88.92V191.67H91.29V195.38H99.71V197.27H82.09ZM83.21,203.98C87.21,203.45 89.59,201.45 89.61,199.27V198.56H92.02V199.27C92.01,201.45 94.39,203.45 98.46,203.98L97.58,205.8C94.43,205.38 92.02,204.06 90.81,202.2C89.6,204.06 87.19,205.38 84.07,205.8L83.21,203.98ZM109.89,186.79C114.32,186.8 116.89,187.97 116.9,190.12C116.89,192.29 114.32,193.46 109.89,193.47C105.48,193.46 102.89,192.29 102.89,190.12C102.89,187.97 105.48,186.8 109.89,186.79ZM101.06,196.42V194.5H118.76V196.42H101.06ZM103.15,199.49V197.73H116.55V202.48H105.51V203.91H117.09V205.74H103.17V200.78H114.21V199.49H103.15ZM105.4,190.12C105.39,191.2 106.94,191.69 109.89,191.69C112.89,191.69 114.43,191.2 114.43,190.12C114.43,189.12 112.89,188.55 109.89,188.55C106.94,188.55 105.39,189.12 105.4,190.12ZM140.98,190.68V192.59H127.57V186.75H129.91V190.68H140.98ZM125.27,195.84V193.9H143.02V195.84H135.29V197.53H140.85V202.37H129.81V203.89H141.49V205.74H127.4V200.69H138.49V199.34H127.38V197.53H132.94V195.84H125.27ZM160.57,186.49V205.93H158.19V195.6H154.86V193.65H158.19V186.49H160.57ZM144.95,190.12V188.19H153.74V195.3H147.38V199.38C150.27,199.37 152.59,199.27 155.2,198.8L155.4,200.76C152.51,201.26 149.91,201.37 146.57,201.38H145.02V193.37H151.4V190.12H144.95ZM175.48,191.15C175.46,194.62 177.2,198.12 180.21,199.57L178.75,201.49C176.64,200.42 175.13,198.37 174.3,195.9C173.45,198.54 171.86,200.73 169.64,201.85L168.18,199.94C171.3,198.46 173.09,194.74 173.1,191.15V188.06H175.48V191.15ZM181.37,205.91V186.49H183.76V194.1H186.74V196.14H183.76V205.91H181.37ZM194.93,190.44C194.93,192.86 196.58,195.22 199.68,196.18L198.45,198.05C196.25,197.34 194.65,195.88 193.76,194.03C192.89,196.04 191.23,197.64 188.93,198.44L187.71,196.54C190.83,195.51 192.5,193 192.52,190.44V189.88H188.33V187.97H199.01V189.88H194.93V190.44ZM190.89,205.52V199.32H193.29V203.59H204.27V205.52H190.89ZM201.33,200.6V186.51H203.74V200.6H201.33ZM215.4,186.79C219.83,186.8 222.4,187.97 222.4,190.12C222.4,192.29 219.83,193.46 215.4,193.47C210.99,193.46 208.4,192.29 208.4,190.12C208.4,187.97 210.99,186.8 215.4,186.79ZM206.57,196.42V194.5H224.27V196.42H206.57ZM208.65,199.49V197.73H222.06V202.48H211.02V203.91H222.6V205.74H208.68V200.78H219.72V199.49H208.65ZM210.91,190.12C210.9,191.2 212.45,191.69 215.4,191.69C218.4,191.69 219.93,191.2 219.93,190.12C219.93,189.12 218.4,188.55 215.4,188.55C212.45,188.55 210.9,189.12 210.91,190.12ZM246.12,186.51V190.72H248.85V192.7H246.12V197.45H243.74V186.51H246.12ZM231.64,196.27V187.46H234.05V194.3C236.53,194.27 239.16,194.04 242,193.49L242.28,195.45C239.06,196.09 236.07,196.27 233.26,196.27H231.64ZM233.56,205.65V198.39H246.12V205.65H233.56ZM235.9,203.76H243.78V200.26H235.9V203.76ZM259.72,188.55C259.72,189.6 259.65,190.62 259.48,191.6H263.7V186.49H266.08V205.89H263.7V198.78H258.76V196.85H263.7V193.52H259.04C257.95,197.11 255.48,200.21 250.94,202.43L249.69,200.54C254.5,198.13 256.88,194.84 257.31,190.44H250.59V188.55H259.72ZM286.58,201.62V203.57H268.83V201.62H276.48V197.83H270.79V187.78H273.17V190.96H282.17V187.78H284.56V197.83H278.85V201.62H286.58ZM273.17,195.9H282.17V192.87H273.17V195.9ZM293.9,191.58C293.92,194.72 294.99,197.98 297.62,199.64L296.31,201.46C294.56,200.41 293.42,198.61 292.78,196.49C292.08,198.82 290.83,200.8 289.01,201.92L287.52,200.13C290.35,198.43 291.6,195 291.61,191.69V188.21H293.9V191.58ZM295.54,195.15V193.17H298.31V186.83H300.57V204.97H298.31V195.15H295.54ZM302.31,205.91V186.49H304.6V205.91H302.31ZM324.61,201.59V203.55H306.86V201.59H310.96V196.68C309.42,195.79 308.48,194.4 308.49,192.68C308.48,189.58 311.51,187.54 315.69,187.54C319.89,187.54 322.94,189.58 322.93,192.68C322.94,194.38 322.03,195.74 320.52,196.63V201.59H324.61ZM310.83,192.68C310.82,194.66 312.79,195.93 315.69,195.92C318.58,195.93 320.59,194.66 320.59,192.68C320.59,190.66 318.58,189.42 315.69,189.43C312.79,189.42 310.82,190.66 310.83,192.68ZM313.33,201.59H318.1V197.54C317.36,197.71 316.55,197.79 315.69,197.79C314.85,197.79 314.06,197.71 313.33,197.55V201.59ZM329.87,188.45L329.63,199.42H327.21L326.95,188.45H329.87ZM326.76,202.5C326.74,201.59 327.51,200.85 328.43,200.84C329.32,200.85 330.08,201.59 330.08,202.5C330.08,203.42 329.32,204.17 328.43,204.17C327.51,204.17 326.74,203.42 326.76,202.5Z"
android:fillColor="#ffffff"/>
</vector>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.teampatch.core.domain.fake

import com.teampatch.core.domain.model.Todo
import com.teampatch.core.domain.repository.DailyRepository
import javax.inject.Inject

class FakeDailyRepository @Inject constructor() : DailyRepository {
override suspend fun addDaily(todo: Todo): Result<Unit> {
println("새 일과 추가됨: ${todo.title}")
return Result.success(Unit)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ data class DailyComment(
val writerUid: String,
val writerName: String,
val content: String,
val imageUrl: String? = null,
val profileImageUrl: String? = null,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.teampatch.core.domain.repository

import com.teampatch.core.domain.model.Todo

interface DailyRepository {
suspend fun addDaily(todo: Todo): Result<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.teampatch.core.domain.repository

import java.time.LocalDateTime

interface NotificationRepository {
fun scheduleCertifyNotification(time: LocalDateTime)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.teampatch.core.domain.usecase.daily

import com.teampatch.core.domain.fake.FakeDailyRepository
import com.teampatch.core.domain.model.Todo
import javax.inject.Inject

class AddDailyRoutineUseCase @Inject constructor(
private val repository: FakeDailyRepository,
) {
suspend operator fun invoke(todo: Todo): Result<Unit> = repository.addDaily(todo)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.teampatch.core.domain.usecase.daily

import com.teampatch.core.domain.repository.NotificationRepository
import java.time.LocalDateTime
import javax.inject.Inject

class ScheduleCertifyNotificationUseCase @Inject constructor(
private val notificationRepository: NotificationRepository,
) {
operator fun invoke(time: LocalDateTime) {
notificationRepository.scheduleCertifyNotification(time)
}
}
1 change: 1 addition & 0 deletions feature/daily-certify/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
22 changes: 22 additions & 0 deletions feature/daily-certify/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
plugins {
id("teampatch.android.library")
id("teampatch.android.library.compose")
id("teampatch.android.hilt")
id("teampatch.android.feature")
}

android {
namespace = "com.teampatch.feature.daily.certify"
}

dependencies {

implementation(project(":core:domain"))
implementation(project(":core:designsystem"))

implementation("io.coil-kt:coil-compose:2.7.0")

testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
}
10 changes: 10 additions & 0 deletions feature/daily-certify/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.teampatch.feature.daily.certify">

<application>
<activity
android:name="com.teampatch.daily.certify.EditCertifyActivity"
android:exported="true" />
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.teampatch.daily.certify

enum class CertifyStatus {
BEFORE, // 인증 전
PENDING, // 인증 중 or 서버 처리 대기 (비활성화 상태 등)
CONFIRMED, // 인증 완료 (댓글 남기기 가능 상태)
}
Loading