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
client
build.gradle
src
commonMain
kotlin
dev
inmo
postssystem
client
features
auth
server
src
jvmMain
kotlin
dev
inmo
postssystem
common
common
src
commonMain
jvmMain
kotlin
dev
inmo
postssystem
features
content
files
server
src
jvmMain
kotlin
dev
inmo
postssystem
features
roles
manager
server
src
jvmMain
kotlin
dev
inmo
server
users
server
src
jvmMain
kotlin
dev
inmo
postssystem
server
build.gradle
src
main
java
dev
inmo
postssystem
server
settings.gradle

@ -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
)

@ -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() } }
}
}
}

@ -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())
}
}

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