mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 06:47:02 +05:30
Merge pull request #26 from msfjarvis/leaky-abstractions
Cure a case of leaky abstractions with sad indirection
This commit is contained in:
commit
a510565324
7 changed files with 38 additions and 12 deletions
|
@ -71,3 +71,10 @@ subprojects {
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
delete rootProject.buildDir
|
delete rootProject.buildDir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
wrapper {
|
||||||
|
gradleVersion = "6.7-rc-2"
|
||||||
|
distributionType = Wrapper.DistributionType.ALL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
)
|
|
@ -4,6 +4,8 @@ import androidx.room.Dao
|
||||||
import androidx.room.Delete
|
import androidx.room.Delete
|
||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
|
import androidx.room.Transaction
|
||||||
|
import dev.msfjarvis.lobsters.data.model.LobstersEntity
|
||||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
|
@ -12,11 +14,21 @@ abstract class PostsDao {
|
||||||
@Query("SELECT * FROM lobsters_posts")
|
@Query("SELECT * FROM lobsters_posts")
|
||||||
abstract fun loadPosts(): Flow<List<LobstersPost>>
|
abstract fun loadPosts(): Flow<List<LobstersPost>>
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
open suspend fun insertPosts(vararg posts: LobstersPost) {
|
||||||
|
insertPosts(posts.map { LobstersEntity(it) })
|
||||||
|
}
|
||||||
|
|
||||||
@Insert
|
@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
|
@Delete
|
||||||
abstract suspend fun deletePosts(vararg posts: LobstersPost)
|
protected abstract suspend fun deletePosts(posts: List<LobstersEntity>)
|
||||||
|
|
||||||
@Query("DELETE FROM lobsters_posts")
|
@Query("DELETE FROM lobsters_posts")
|
||||||
abstract suspend fun deleteAllPosts()
|
abstract suspend fun deleteAllPosts()
|
||||||
|
|
|
@ -3,11 +3,12 @@ package dev.msfjarvis.lobsters.data.source
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
import androidx.room.TypeConverters
|
import androidx.room.TypeConverters
|
||||||
|
import dev.msfjarvis.lobsters.data.model.LobstersEntity
|
||||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
entities = [
|
entities = [
|
||||||
LobstersPost::class,
|
LobstersEntity::class,
|
||||||
],
|
],
|
||||||
version = 1,
|
version = 1,
|
||||||
exportSchema = false,
|
exportSchema = false,
|
||||||
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,5 +1,5 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
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
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
@ -3,8 +3,6 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api "androidx.room:room-runtime:$room_version"
|
|
||||||
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
||||||
implementation "com.squareup.moshi:moshi:$moshi_version"
|
implementation "com.squareup.moshi:moshi:$moshi_version"
|
||||||
implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,11 @@
|
||||||
package dev.msfjarvis.lobsters.model
|
package dev.msfjarvis.lobsters.model
|
||||||
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
@Entity(
|
|
||||||
tableName = "lobsters_posts"
|
|
||||||
)
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
class LobstersPost(
|
class LobstersPost(
|
||||||
@Json(name = "short_id")
|
@Json(name = "short_id")
|
||||||
@PrimaryKey
|
|
||||||
val shortId: String,
|
val shortId: String,
|
||||||
@Json(name = "short_id_url")
|
@Json(name = "short_id_url")
|
||||||
val shortIdUrl: String,
|
val shortIdUrl: String,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue