Merge pull request #26 from msfjarvis/leaky-abstractions

Cure a case of leaky abstractions with sad indirection
This commit is contained in:
probot-auto-merge[bot] 2020-09-27 05:02:55 +00:00 committed by GitHub
commit a510565324
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 38 additions and 12 deletions

View file

@ -71,3 +71,10 @@ subprojects {
task clean(type: Delete) {
delete rootProject.buildDir
}
tasks {
wrapper {
gradleVersion = "6.7-rc-2"
distributionType = Wrapper.DistributionType.ALL
}
}

View file

@ -0,0 +1,14 @@
package dev.msfjarvis.lobsters.data.model
import androidx.room.Embedded
import androidx.room.Entity
import dev.msfjarvis.lobsters.model.LobstersPost
@Entity(
tableName = "lobsters_posts",
primaryKeys = ["shortId"],
)
data class LobstersEntity(
@Embedded
val post: LobstersPost
)

View file

@ -4,6 +4,8 @@ import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Transaction
import dev.msfjarvis.lobsters.data.model.LobstersEntity
import dev.msfjarvis.lobsters.model.LobstersPost
import kotlinx.coroutines.flow.Flow
@ -12,11 +14,21 @@ abstract class PostsDao {
@Query("SELECT * FROM lobsters_posts")
abstract fun loadPosts(): Flow<List<LobstersPost>>
@Transaction
open suspend fun insertPosts(vararg posts: LobstersPost) {
insertPosts(posts.map { LobstersEntity(it) })
}
@Insert
abstract suspend fun insertPosts(vararg posts: LobstersPost)
protected abstract suspend fun insertPosts(posts: List<LobstersEntity>)
@Transaction
open suspend fun deletePosts(vararg posts: LobstersPost) {
deletePosts(posts.map { LobstersEntity(it) })
}
@Delete
abstract suspend fun deletePosts(vararg posts: LobstersPost)
protected abstract suspend fun deletePosts(posts: List<LobstersEntity>)
@Query("DELETE FROM lobsters_posts")
abstract suspend fun deleteAllPosts()

View file

@ -3,11 +3,12 @@ package dev.msfjarvis.lobsters.data.source
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import dev.msfjarvis.lobsters.data.model.LobstersEntity
import dev.msfjarvis.lobsters.model.LobstersPost
@Database(
entities = [
LobstersPost::class,
LobstersEntity::class,
],
version = 1,
exportSchema = false,

View file

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-rc-1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-rc-2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View file

@ -3,8 +3,6 @@ plugins {
}
dependencies {
api "androidx.room:room-runtime:$room_version"
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
implementation "com.squareup.moshi:moshi:$moshi_version"
implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"
}

View file

@ -1,17 +1,11 @@
package dev.msfjarvis.lobsters.model
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@Entity(
tableName = "lobsters_posts"
)
@JsonClass(generateAdapter = true)
class LobstersPost(
@Json(name = "short_id")
@PrimaryKey
val shortId: String,
@Json(name = "short_id_url")
val shortIdUrl: String,