Skip to content

Instantly share code, notes, and snippets.

View ngallazzi's full-sized avatar
🎓
Learning by repetition

Nicola Gallazzi ngallazzi

🎓
Learning by repetition
View GitHub Profile
@ngallazzi
ngallazzi / Volume.kt
Last active January 8, 2021 14:56
A simple data class for a volume entity
data class Volume(val id: String, val volumeInfo: VolumeInfo)
data class VolumeInfo(
val title: String,
val authors: List<String>,
val imageUrl: String?
)
interface BooksRepository {
suspend fun getRemoteBooks(author: String): Result<List<Volume>>
suspend fun getBookmarks(): Flow<List<Volume>>
suspend fun bookmark(book: Volume)
suspend fun unbookmark(book: Volume)
}
class GetBooksUseCase(private val booksRepository: BooksRepository) {
suspend operator fun invoke(author: String) = booksRepository.getRemoteBooks(author)
}
class BooksRepositoryImpl(
private val localDataSource: BooksLocalDataSource,
private val remoteDataSource: BooksRemoteDataSource
) : BooksRepository {
override suspend fun getRemoteBooks(author: String): Result<List<Volume>> {
return remoteDataSource.getBooks(author)
}
override suspend fun getBookmarks(): Flow<List<Volume>> {
class BookEntityMapper {
fun toBookEntity(volume: Volume): BookEntity {
return BookEntity(
id = volume.id,
title = volume.volumeInfo.title,
authors = volume.volumeInfo.authors,
imageUrl = volume.volumeInfo.imageUrl
)
}
@Entity(tableName = "book")
data class BookEntity(
@PrimaryKey
val id: String,
val title: String,
val authors: List<String>,
val imageUrl: String?
)
class BooksViewModel(
private val getBooksUseCase: GetBooksUseCase,
private val getBookmarksUseCase: GetBookmarksUseCase,
private val bookmarkBookUseCase: BookmarkBookUseCase,
private val unbookmarkBookUseCase: UnbookmarkBookUseCase,
private val mapper: BookWithStatusMapper
) : ViewModel() {
private val _dataLoading = MutableLiveData(true)
val dataLoading: LiveData<Boolean> = _dataLoading
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
booksAdapter = BookAdapter(requireContext(), object : BookAdapter.ActionClickListener {
override fun bookmark(book: BookWithStatus) {
booksViewModel.bookmark(book)
}
override fun unbookmark(book: BookWithStatus) {
booksViewModel.unbookmark(book)
}
@ngallazzi
ngallazzi / inline_function_starting.kt
Last active February 3, 2022 17:41
Mastering refactoring - Inline function, starting code
private fun printInvoiceSheet(invoice: Invoice) {
printInvoiceHeader(invoice)
val fullName = getFullName(invoice)
binding.tvInvoicePreview.append(fullName)
val address = getAddress(invoice)
binding.tvInvoicePreview.append(address)
}
private fun getFullName(invoice: Invoice): String {
val fullName =