一個 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)
    }
}