add content

This commit is contained in:
2021-11-24 20:25:05 +06:00
parent fffe99adaa
commit 58b7e973be
24 changed files with 398 additions and 176 deletions

View File

@@ -0,0 +1,18 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library"
}
apply from: "$mppProjectWithSerializationPresetPath"
kotlin {
sourceSets {
commonMain {
dependencies {
api project(":postssystem.features.content.common")
api project(":postssystem.features.common.client")
}
}
}
}

View File

@@ -0,0 +1 @@
<manifest package="dev.inmo.postssystem.features.content.client"/>

View File

@@ -0,0 +1,17 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library"
}
apply from: "$mppProjectWithSerializationPresetPath"
kotlin {
sourceSets {
commonMain {
dependencies {
api project(":postssystem.features.common.common")
}
}
}
}

View File

@@ -0,0 +1,24 @@
package dev.inmo.postssystem.features.content.common
import kotlinx.serialization.Serializable
typealias ContentId = String
/**
* Content which is planned to be registered in database
*
* @see ContentSerializersModuleConfigurator.Element
* @see ContentSerializersModuleConfigurator
*/
interface Content
/**
* Content which is already registered in database. Using its [id] you can retrieve all known
* [dev.inmo.postssystem.core.post.RegisteredPost]s by using
* [dev.inmo.postssystem.core.post.repo.ReadPostsRepo.getPostsByContent]
*/
@Serializable
data class RegisteredContent(
val id: ContentId,
val content: Content
)

View File

@@ -0,0 +1,18 @@
package dev.inmo.postssystem.features.content.common
import dev.inmo.postssystem.features.common.common.SerializersModuleConfigurator
import kotlinx.serialization.modules.*
class ContentSerializersModuleConfigurator(
private val subconfigurators: List<Element>
) : SerializersModuleConfigurator.Element {
fun interface Element {
operator fun PolymorphicModuleBuilder<Content>.invoke()
}
override fun SerializersModuleBuilder.invoke() {
polymorphic(Content::class) {
subconfigurators.forEach { it.apply { invoke() } }
}
}
}

View File

@@ -0,0 +1,19 @@
package dev.inmo.postssystem.features.content.common
import kotlinx.serialization.Serializable
import kotlinx.serialization.modules.PolymorphicModuleBuilder
/**
* That is a content which in fact just a link to another content. It would be useful in case when user wish to reuse
* some content
*/
@Serializable
data class OtherContentLinkContent(
val otherId: ContentId
) : Content
object OtherContentSerializerModuleConfigurator : ContentSerializersModuleConfigurator.Element {
override fun PolymorphicModuleBuilder<Content>.invoke() {
subclass(OtherContentLinkContent::class, OtherContentLinkContent.serializer())
}
}

View File

@@ -0,0 +1 @@
<manifest package="dev.inmo.postssystem.features.content.common"/>

View File

@@ -0,0 +1,17 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
}
apply from: "$mppJavaProjectPresetPath"
kotlin {
sourceSets {
commonMain {
dependencies {
api project(":postssystem.features.content.common")
api project(":postssystem.features.common.server")
}
}
}
}