continue reborn :(

This commit is contained in:
2024-08-26 23:58:53 +06:00
parent e98a484c4d
commit 546736690c
26 changed files with 65 additions and 53 deletions
.gitignore
client
defaultAndroidSettings.gradle
features
auth
common
client
common
src
commonMain
kotlin
dev
inmo
postssystem
features
jsMain
kotlin
dev
inmo
postssystem
features
jvmMain
kotlin
dev
inmo
postssystem
features
content
binary
client
server
src
jvmMain
kotlin
dev
inmo
postssystem
features
client
text
files
client
src
commonMain
kotlin
dev
inmo
postssystem
features
files
roles
client
src
commonMain
kotlin
users
client
src
commonMain
kotlin
dev
inmo
postssystem
common
src
jvmMain
kotlin
dev
inmo
postssystem
features
gradle
mppJsProject.gradlemppProjectWithSerialization.gradle
publicators/simple/client/src/commonMain/kotlin/dev/inmo/postssystem/publicators/simple/client
services/posts
client
src
commonMain
kotlin
dev
inmo
postssystem
services
server
src
jvmMain
kotlin
dev
inmo
postssystem

1
.gitignore vendored

@ -1,4 +1,5 @@
.idea .idea
.kotlin
out/* out/*
*.iml *.iml
target target

@ -3,6 +3,7 @@ plugins {
id "org.jetbrains.kotlin.plugin.serialization" id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library" id "com.android.library"
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kt.jb.compose)
} }
apply from: "$mppProjectWithSerializationPresetPath" apply from: "$mppProjectWithSerializationPresetPath"

@ -58,5 +58,6 @@
"semver": "^7.3.2", "semver": "^7.3.2",
"svgo": "^2.8.0", "svgo": "^2.8.0",
"watch-run": "^1.2.5" "watch-run": "^1.2.5"
} },
"packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
} }

@ -6,6 +6,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion libs.versions.android.props.minSdk.get().toInteger() minSdkVersion libs.versions.android.props.minSdk.get().toInteger()
compileSdkVersion libs.versions.android.props.compileSdk.get().toInteger()
targetSdkVersion libs.versions.android.props.compileSdk.get().toInteger() targetSdkVersion libs.versions.android.props.compileSdk.get().toInteger()
versionCode "${android_code_version}".toInteger() versionCode "${android_code_version}".toInteger()
versionName "$version" versionName "$version"

@ -3,6 +3,7 @@ plugins {
id "org.jetbrains.kotlin.plugin.serialization" id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library" id "com.android.library"
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kt.jb.compose)
} }
apply from: "$mppProjectWithSerializationPresetPath" apply from: "$mppProjectWithSerializationPresetPath"

@ -3,6 +3,7 @@ plugins {
id "org.jetbrains.kotlin.plugin.serialization" id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library" id "com.android.library"
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kt.jb.compose)
} }
apply from: "$mppProjectWithSerializationPresetPath" apply from: "$mppProjectWithSerializationPresetPath"

@ -1,6 +1,7 @@
package dev.inmo.postssystem.features.common.common package dev.inmo.postssystem.features.common.common
import dev.inmo.micro_utils.common.MPPFile import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.filesize
import io.ktor.utils.io.core.* import io.ktor.utils.io.core.*
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.ByteArraySerializer import kotlinx.serialization.builtins.ByteArraySerializer
@ -27,9 +28,18 @@ class BytesBasedInputProvider(
} }
} }
@Serializable(SimpleInputProviderSerializer::class) internal interface FileInputProvider : SimpleInputProvider {
expect class FileBasedInputProvider : SimpleInputProvider {
val file: MPPFile val file: MPPFile
override val contentBytes: Long?
get() = file.filesize
}
@Serializable(SimpleInputProviderSerializer::class)
expect class FileBasedInputProvider : FileInputProvider {
override val file: MPPFile
override fun invoke(): Input
} }
@Serializable(SimpleInputProviderSerializer::class) @Serializable(SimpleInputProviderSerializer::class)

@ -7,12 +7,9 @@ import kotlinx.serialization.Serializable
@Serializable(SimpleInputProviderSerializer::class) @Serializable(SimpleInputProviderSerializer::class)
actual class FileBasedInputProvider internal constructor( actual class FileBasedInputProvider internal constructor(
actual val file: MPPFile actual override val file: MPPFile
) : SimpleInputProvider { ) : FileInputProvider {
override val contentBytes: Long actual override fun invoke(): Input = error("Files inputs must not be used directly")
get() = file.filesize
override fun invoke(): Input = error("Files inputs must not be used directly")
} }
fun MPPFile.inputProvider() = FileBasedInputProvider(this) fun MPPFile.inputProvider() = FileBasedInputProvider(this)

@ -8,10 +8,8 @@ import kotlinx.serialization.Serializable
@Serializable(SimpleInputProviderSerializer::class) @Serializable(SimpleInputProviderSerializer::class)
actual class FileBasedInputProvider( actual class FileBasedInputProvider(
actual val file: MPPFile actual override val file: MPPFile
) : SimpleInputProvider { ) : FileInputProvider {
override val contentBytes: Long?
get() = file.filesize
override fun invoke(): Input = file.inputStream().asInput() actual override fun invoke(): Input = file.inputStream().asInput()
} }

@ -3,6 +3,7 @@ plugins {
id "org.jetbrains.kotlin.plugin.serialization" id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library" id "com.android.library"
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kt.jb.compose)
} }
apply from: "$mppProjectWithSerializationPresetPath" apply from: "$mppProjectWithSerializationPresetPath"

@ -6,7 +6,6 @@ import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
import dev.inmo.micro_utils.mime_types.KnownMimeTypes import dev.inmo.micro_utils.mime_types.KnownMimeTypes
import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.*
import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.*
import dev.inmo.postssystem.features.common.common.FileBasedInputProvider
import dev.inmo.postssystem.features.content.common.* import dev.inmo.postssystem.features.content.common.*
import dev.inmo.postssystem.features.content.server.storage.ServerContentStorage import dev.inmo.postssystem.features.content.server.storage.ServerContentStorage
import dev.inmo.postssystem.features.files.common.* import dev.inmo.postssystem.features.files.common.*

@ -3,6 +3,7 @@ plugins {
id "org.jetbrains.kotlin.plugin.serialization" id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library" id "com.android.library"
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kt.jb.compose)
} }
apply from: "$mppProjectWithSerializationPresetPath" apply from: "$mppProjectWithSerializationPresetPath"

@ -3,6 +3,7 @@ plugins {
id "org.jetbrains.kotlin.plugin.serialization" id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library" id "com.android.library"
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kt.jb.compose)
} }
apply from: "$mppProjectWithSerializationPresetPath" apply from: "$mppProjectWithSerializationPresetPath"

@ -5,5 +5,5 @@ import dev.inmo.postssystem.features.auth.client.AuthorizedQualifiers
import dev.inmo.postssystem.features.files.common.storage.ReadFilesStorage import dev.inmo.postssystem.features.files.common.storage.ReadFilesStorage
val loader = AuthorizedModuleLoader { val loader = AuthorizedModuleLoader {
single<ReadFilesStorage> { ClientReadFilesStorage(get(AuthorizedQualifiers.ServerUrlQualifier), get(), get()) } single<ReadFilesStorage> { ClientReadFilesStorage(get(AuthorizedQualifiers.ServerUrlQualifier), get(), get(), get()) }
} }

@ -1,7 +1,7 @@
package dev.inmo.postssystem.features.roles.client package dev.inmo.postssystem.features.roles.client
import dev.inmo.postssystem.features.roles.common.* import dev.inmo.postssystem.features.roles.common.*
import dev.inmo.micro_utils.ktor.client.UnifiedRequester import io.ktor.client.*
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
class ClientRolesStorage<T : Role>( class ClientRolesStorage<T : Role>(

@ -27,7 +27,7 @@ class ReadClientRolesStorage<T : Role>(
buildStandardUrl( buildStandardUrl(
userRolesFullUrl, userRolesFullUrl,
usersRolesGetSubjectsPathPart, usersRolesGetSubjectsPathPart,
usersRolesRoleQueryParameterName to unifiedRequester.encodeUrlQueryValue(serializer, role) usersRolesRoleQueryParameterName to role
) )
).body() ).body()

@ -5,5 +5,5 @@ import dev.inmo.postssystem.features.auth.client.AuthorizedQualifiers
import dev.inmo.postssystem.features.users.common.ReadUsersStorage import dev.inmo.postssystem.features.users.common.ReadUsersStorage
val loader = AuthorizedModuleLoader { val loader = AuthorizedModuleLoader {
single<ReadUsersStorage> { UsersStorageKtorClient(get(AuthorizedQualifiers.ServerUrlQualifier), get()) } single<ReadUsersStorage> { UsersStorageKtorClient(get(AuthorizedQualifiers.ServerUrlQualifier), get(), get()) }
} }

@ -1,19 +1,19 @@
package dev.inmo.postssystem.features.users.client package dev.inmo.postssystem.features.users.client
import dev.inmo.postssystem.features.users.common.* import dev.inmo.postssystem.features.users.common.*
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.common.buildStandardUrl import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import dev.inmo.micro_utils.repos.ReadCRUDRepo import dev.inmo.micro_utils.repos.ReadCRUDRepo
import dev.inmo.micro_utils.repos.ktor.client.crud.KtorReadStandardCrudRepo import dev.inmo.micro_utils.repos.ktor.client.crud.KtorReadCRUDRepoClient
import kotlinx.serialization.builtins.nullable import io.ktor.client.*
import io.ktor.http.*
class UsersStorageKtorClient( class UsersStorageKtorClient(
baseUrl: String, baseUrl: String,
client: HttpClient client: HttpClient,
) : ReadUsersStorage, ReadCRUDRepo<User, UserId> by KtorReadStandardCrudRepo( contentType: ContentType
) : ReadUsersStorage, ReadCRUDRepo<User, UserId> by KtorReadCRUDRepoClient(
buildStandardUrl(baseUrl, usersServerPathPart), buildStandardUrl(baseUrl, usersServerPathPart),
client, client,
User.serializer(), contentType,
User.serializer().nullable, { it.long.toString() }
UserId.serializer()
) )

@ -30,7 +30,7 @@ class ExposedUsersStorage(override val database: Database) : UsersStorage, Abstr
initTable() initTable()
} }
override fun insert(value: NewUser, it: InsertStatement<Number>) { override fun insert(value: NewUser, it: UpdateBuilder<Int>) {
it[usernameColumn] = value.username.string it[usernameColumn] = value.username.string
it[firstNameColumn] = value.firstName it[firstNameColumn] = value.firstName
it[lastNameColumn] = value.lastName it[lastNameColumn] = value.lastName

@ -1,21 +1,21 @@
[versions] [versions]
kotlin = "1.9.22" kotlin = "2.0.10"
kotlin-serialization = "1.6.2" kotlin-serialization = "1.7.1"
kotlin-coroutines = "1.7.3" kotlin-coroutines = "1.8.1"
jsuikit = "0.7.4" jsuikit = "0.7.6"
compose = "1.5.12" compose = "1.7.0-alpha02"
microutils = "0.20.34" microutils = "0.22.0"
tgbotapi = "10.0.1" tgbotapi = "17.0.0"
ktor = "2.3.8" ktor = "2.3.11"
korlibs = "5.3.1" korlibs = "5.4.0"
koin = "3.5.3" koin = "3.5.6"
exposed = "0.47.0" exposed = "0.53.0"
psql = "42.3.6" psql = "42.3.6"
scrimage = "4.1.1" scrimage = "4.1.1"
dokka = "1.9.10" dokka = "1.9.20"
logback = "1.2.10" logback = "1.2.10"
uuid = "0.8.2" uuid = "0.8.4"
android-junit = "4.12" android-junit = "4.12"
android-test-junit = "1.1.2" android-test-junit = "1.1.2"
@ -35,8 +35,8 @@ android-espresso = "3.3.0"
android-test = "1.1.2" android-test = "1.1.2"
android-props-minSdk = "21" android-props-minSdk = "21"
android-props-compileSdk = "34" android-props-compileSdk = "35"
android-props-buildTools = "34.0.0" android-props-buildTools = "35.0.0"
[libraries] [libraries]
@ -113,3 +113,4 @@ buildscript-android-dexcount = { module = "com.getkeepsafe.dexcount:dexcount-gra
[plugins] [plugins]
compose = { id = "org.jetbrains.compose", version.ref = "compose" } compose = { id = "org.jetbrains.compose", version.ref = "compose" }
kt-jb-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }

@ -1,4 +1,4 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

@ -26,7 +26,6 @@ kotlin {
jsTest { jsTest {
dependencies { dependencies {
implementation kotlin('test-js') implementation kotlin('test-js')
implementation kotlin('test-junit')
} }
} }
} }

@ -46,7 +46,6 @@ kotlin {
jsTest { jsTest {
dependencies { dependencies {
implementation kotlin('test-js') implementation kotlin('test-js')
implementation kotlin('test-junit')
} }
} }
androidUnitTest { androidUnitTest {

@ -1,11 +1,13 @@
package dev.inmo.postssystem.publicators.simple.client package dev.inmo.postssystem.publicators.simple.client
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.common.buildStandardUrl import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import dev.inmo.postssystem.features.posts.common.PostId import dev.inmo.postssystem.features.posts.common.PostId
import dev.inmo.postssystem.features.publication.common.publicatorsRootPath import dev.inmo.postssystem.features.publication.common.publicatorsRootPath
import dev.inmo.postssystem.publicators.simple.common.simplePublicatorPublishPathPart import dev.inmo.postssystem.publicators.simple.common.simplePublicatorPublishPathPart
import dev.inmo.postssystem.publicators.simple.common.simplePublicatorRootPath import dev.inmo.postssystem.publicators.simple.common.simplePublicatorRootPath
import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.request.*
import kotlinx.serialization.builtins.serializer import kotlinx.serialization.builtins.serializer
class SimplePublicatorServiceClient( class SimplePublicatorServiceClient(
@ -25,9 +27,9 @@ class SimplePublicatorServiceClient(
simplePublicatorPublishPathPart simplePublicatorPublishPathPart
) )
override suspend fun publish(postId: PostId) = unifiedRequester.unipost( override suspend fun publish(postId: PostId) = client.post(
publishFullUrl, publishFullUrl,
PostId.serializer() to postId, ) {
Unit.serializer() setBody(postId)
) }.body<Unit>()
} }

@ -8,7 +8,6 @@ import dev.inmo.micro_utils.ktor.common.encodeHex
import dev.inmo.micro_utils.repos.ktor.common.crud.createRouting import dev.inmo.micro_utils.repos.ktor.common.crud.createRouting
import dev.inmo.micro_utils.repos.ktor.common.crud.updateRouting import dev.inmo.micro_utils.repos.ktor.common.crud.updateRouting
import dev.inmo.micro_utils.repos.ktor.common.one_to_many.removeRoute import dev.inmo.micro_utils.repos.ktor.common.one_to_many.removeRoute
import dev.inmo.postssystem.features.common.common.FileBasedInputProvider
import dev.inmo.postssystem.features.common.common.SimpleInputProvider import dev.inmo.postssystem.features.common.common.SimpleInputProvider
import dev.inmo.postssystem.features.content.common.* import dev.inmo.postssystem.features.content.common.*
import dev.inmo.postssystem.features.files.common.FileId import dev.inmo.postssystem.features.files.common.FileId

@ -11,7 +11,6 @@ import dev.inmo.micro_utils.repos.ktor.common.crud.createRouting
import dev.inmo.micro_utils.repos.ktor.common.crud.updateRouting import dev.inmo.micro_utils.repos.ktor.common.crud.updateRouting
import dev.inmo.micro_utils.repos.ktor.common.one_to_many.removeRoute import dev.inmo.micro_utils.repos.ktor.common.one_to_many.removeRoute
import dev.inmo.micro_utils.repos.ktor.server.crud.configureReadCRUDRepoRoutes import dev.inmo.micro_utils.repos.ktor.server.crud.configureReadCRUDRepoRoutes
import dev.inmo.postssystem.features.common.common.FileBasedInputProvider
import dev.inmo.postssystem.features.content.common.* import dev.inmo.postssystem.features.content.common.*
import dev.inmo.postssystem.features.files.common.FileId import dev.inmo.postssystem.features.files.common.FileId
import dev.inmo.postssystem.features.posts.common.* import dev.inmo.postssystem.features.posts.common.*