一個 use case 只做一件事,符合單一原則
class GetCategoriesUseCase @Inject constructor(
private val repository: NoteRepository
) {
operator fun invoke(): Flow<List<Category>> {
return repository.getAllCategories()
}
}
class SaveNoteUseCase @Inject constructor(
private val repository: NoteRepository
) {
suspend operator fun invoke(note: Note) {
val currentTime = System.currentTimeMillis()
val noteToSave = note.copy(
updatedAt = currentTime,
// 如果是新筆記,createdAt 也一併設定
createdAt = if (note.id == 0L) currentTime else note.createdAt
)
repository.saveNote(noteToSave)
}
}
data class NoteUseCases @Inject constructor(
val getNotes: GetNotesUseCase,
val getCategories: GetCategoriesUseCase,
val saveNote: SaveNoteUseCase,
val deleteNote: DeleteNoteUseCase,
val saveCategory: SaveCategoryUseCase
)
class DeleteNoteUseCase @Inject constructor(
private val repository: NoteRepository
) {
suspend operator fun invoke(note: Note) {
repository.deleteNote(note)
}
}
class SaveCategoryUseCase @Inject constructor(
private val repository: NoteRepository
) {
suspend operator fun invoke(category: Category) {
repository.saveCategory(category)
}
}