Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
546736690c | |||
e98a484c4d |
.gitignorebuild.gradlepublish.gradlesettings.gradle
client
defaultAndroidSettings.gradleextensions.gradlefeatures
auth
client
common
src
server
src
jvmMain
kotlin
dev
inmo
postssystem
features
auth
server
client
template
common
client
build.gradle
src
common
src
commonMain
kotlin
dev
inmo
postssystem
features
common
jsMain
kotlin
dev
inmo
postssystem
features
common
jvmMain
kotlin
dev
inmo
postssystem
features
common
linuxX64Main
kotlin
dev
inmo
postssystem
features
common
common
main
mingwX64Main
kotlin
dev
inmo
postssystem
features
common
common
content
binary
client
common
src
server
src
jvmMain
kotlin
dev
inmo
postssystem
features
content
binary
client
common
src
text
files
client
src
commonMain
kotlin
dev
inmo
postssystem
features
files
main
common
src
posts
client
src
common
src
server
src
jvmMain
kotlin
dev
inmo
postssystem
features
posts
publication
roles
client
src
commonMain
kotlin
dev
inmo
postssystem
features
main
common
src
manager
status
client
src
common
src
template
users
client
src
commonMain
kotlin
dev
inmo
postssystem
features
users
main
common
build.gradle
src
commonMain
kotlin
dev
inmo
postssystem
features
users
common
jvmMain
kotlin
dev
inmo
postssystem
features
users
common
main
gradle
mppAndroidProject.gradlemppJavaProject.gradlemppJsProject.gradlemppProjectWithSerialization.gradlepublicators
simple
client
src
androidMain
commonMain
kotlin
dev
inmo
postssystem
publicators
simple
common
src
androidMain
template
services
posts
client
src
androidMain
commonMain
kotlin
dev
inmo
postssystem
services
posts
common
src
androidMain
server
src
jvmMain
kotlin
dev
inmo
postssystem
services
posts
template
targets/telegram
content
polls
loader
template
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
.idea
|
.idea
|
||||||
|
.kotlin
|
||||||
out/*
|
out/*
|
||||||
*.iml
|
*.iml
|
||||||
target
|
target
|
||||||
|
@ -23,6 +23,7 @@ allprojects {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" }
|
maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" }
|
||||||
|
maven { url "https://nexus.inmo.dev/repository/maven-releases/" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,16 @@
|
|||||||
apply plugin: 'com.getkeepsafe.dexcount'
|
apply plugin: 'com.getkeepsafe.dexcount'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
ext {
|
|
||||||
jvmKotlinFolderFile = {
|
|
||||||
String sep = File.separator
|
|
||||||
return new File("${project.projectDir}${sep}src${sep}jvmMain${sep}kotlin")
|
|
||||||
}
|
|
||||||
|
|
||||||
enableIncludingJvmCodeInAndroidPart = {
|
|
||||||
File jvmKotlinFolder = jvmKotlinFolderFile()
|
|
||||||
if (jvmKotlinFolder.exists()) {
|
|
||||||
android.sourceSets.main.java.srcDirs += jvmKotlinFolder.path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
disableIncludingJvmCodeInAndroidPart = {
|
|
||||||
File jvmKotlinFolder = jvmKotlinFolderFile()
|
|
||||||
String[] oldDirs = android.sourceSets.main.java.srcDirs
|
|
||||||
android.sourceSets.main.java.srcDirs = []
|
|
||||||
for (oldDir in oldDirs) {
|
|
||||||
if (oldDir != jvmKotlinFolder.path) {
|
|
||||||
android.sourceSets.main.java.srcDirs += oldDir
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileSdkVersion libs.versions.android.props.compileSdk.get().toInteger()
|
compileSdkVersion libs.versions.android.props.compileSdk.get().toInteger()
|
||||||
buildToolsVersion libs.versions.android.props.buildTools.get()
|
buildToolsVersion libs.versions.android.props.buildTools.get()
|
||||||
|
|
||||||
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"
|
||||||
|
namespace "${project.group}.${project.name}"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
@ -51,18 +28,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = JavaVersion.VERSION_1_8.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
String sep = File.separator
|
|
||||||
main.java.srcDirs += "src${sep}main${sep}kotlin"
|
|
||||||
}
|
|
||||||
|
|
||||||
enableIncludingJvmCodeInAndroidPart()
|
|
||||||
}
|
}
|
||||||
|
@ -13,21 +13,6 @@ allprojects {
|
|||||||
projectByName(name)
|
projectByName(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
allTargetsConfiguration = { ->
|
|
||||||
kotlin {
|
|
||||||
targets.all {
|
|
||||||
compilations.all {
|
|
||||||
kotlinOptions {
|
|
||||||
freeCompilerArgs += [
|
|
||||||
"-P",
|
|
||||||
"plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mppProjectWithSerializationPresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerialization.gradle"
|
mppProjectWithSerializationPresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerialization.gradle"
|
||||||
mppJavaProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJavaProject.gradle"
|
mppJavaProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJavaProject.gradle"
|
||||||
mppJsProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJsProject.gradle"
|
mppJsProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJsProject.gradle"
|
||||||
|
@ -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,7 +1,6 @@
|
|||||||
package dev.inmo.postssystem.features.auth.client
|
package dev.inmo.postssystem.features.auth.client
|
||||||
|
|
||||||
import dev.inmo.micro_utils.common.Either
|
import dev.inmo.micro_utils.common.Either
|
||||||
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
|
|
||||||
import dev.inmo.postssystem.features.auth.common.AuthKey
|
import dev.inmo.postssystem.features.auth.common.AuthKey
|
||||||
import dev.inmo.postssystem.features.auth.common.AuthTokenInfo
|
import dev.inmo.postssystem.features.auth.common.AuthTokenInfo
|
||||||
import dev.inmo.postssystem.features.common.common.AdditionalModules
|
import dev.inmo.postssystem.features.common.common.AdditionalModules
|
||||||
@ -27,7 +26,6 @@ fun createAuthorizedFeaturesDIModule(
|
|||||||
installClientAuthenticator(serverUrl, get(), get(AuthorizedQualifiers.CredsQualifier), onAuthKeyUpdated, onUserRetrieved, onAuthKeyInvalidated)
|
installClientAuthenticator(serverUrl, get(), get(AuthorizedQualifiers.CredsQualifier), onAuthKeyUpdated, onUserRetrieved, onAuthKeyInvalidated)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
single { UnifiedRequester(get(), get()) }
|
|
||||||
single { StatusFeatureClient(get(AuthorizedQualifiers.ServerUrlQualifier), get()) }
|
single { StatusFeatureClient(get(AuthorizedQualifiers.ServerUrlQualifier), get()) }
|
||||||
|
|
||||||
AdditionalModules.Authorized.modules.forEach {
|
AdditionalModules.Authorized.modules.forEach {
|
||||||
|
@ -2,14 +2,14 @@ package dev.inmo.postssystem.features.auth.client
|
|||||||
|
|
||||||
import dev.inmo.postssystem.features.auth.common.*
|
import dev.inmo.postssystem.features.auth.common.*
|
||||||
import dev.inmo.postssystem.features.users.common.User
|
import dev.inmo.postssystem.features.users.common.User
|
||||||
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
|
import dev.inmo.micro_utils.ktor.client.bodyOrNull
|
||||||
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
|
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.request.HttpRequestBuilder
|
import io.ktor.client.request.*
|
||||||
import kotlinx.serialization.builtins.nullable
|
import kotlinx.serialization.builtins.nullable
|
||||||
|
|
||||||
class ClientAuthFeature(
|
class ClientAuthFeature(
|
||||||
private val requester: UnifiedRequester,
|
private val client: HttpClient,
|
||||||
baseUrl: String
|
baseUrl: String
|
||||||
) : AuthFeature {
|
) : AuthFeature {
|
||||||
private val rootUrl = buildStandardUrl(baseUrl.dropLastWhile { it == '/' }, authRootPathPart)
|
private val rootUrl = buildStandardUrl(baseUrl.dropLastWhile { it == '/' }, authRootPathPart)
|
||||||
@ -26,28 +26,23 @@ class ClientAuthFeature(
|
|||||||
authGetMePathPart
|
authGetMePathPart
|
||||||
)
|
)
|
||||||
|
|
||||||
constructor(client: HttpClient, rootUrl: String): this(
|
override suspend fun auth(creds: AuthCreds): AuthTokenInfo? = client.post(
|
||||||
UnifiedRequester(client),
|
fullAuthPath
|
||||||
rootUrl
|
) {
|
||||||
)
|
setBody(creds)
|
||||||
|
}.bodyOrNull()
|
||||||
|
|
||||||
override suspend fun auth(creds: AuthCreds): AuthTokenInfo? = requester.unipost(
|
override suspend fun refresh(refresh: RefreshToken): AuthTokenInfo? = client.post(
|
||||||
fullAuthPath,
|
fullRefreshPath
|
||||||
AuthCreds.serializer() to creds,
|
) {
|
||||||
AuthTokenInfo.serializer().nullable
|
setBody(refresh)
|
||||||
)
|
}.bodyOrNull()
|
||||||
|
|
||||||
override suspend fun refresh(refresh: RefreshToken): AuthTokenInfo? = requester.unipost(
|
override suspend fun getMe(authToken: AuthToken): User? = client.post(
|
||||||
fullRefreshPath,
|
fullGetMePath
|
||||||
RefreshToken.serializer() to refresh,
|
) {
|
||||||
AuthTokenInfo.serializer().nullable
|
setBody(authToken)
|
||||||
)
|
}.bodyOrNull()
|
||||||
|
|
||||||
override suspend fun getMe(authToken: AuthToken): User? = requester.unipost(
|
|
||||||
fullGetMePath,
|
|
||||||
AuthToken.serializer() to authToken,
|
|
||||||
User.serializer().nullable
|
|
||||||
)
|
|
||||||
|
|
||||||
fun isAuthRequest(builder: HttpRequestBuilder): Boolean = builder.url.buildString().let {
|
fun isAuthRequest(builder: HttpRequestBuilder): Boolean = builder.url.buildString().let {
|
||||||
it == fullAuthPath || it == fullRefreshPath
|
it == fullAuthPath || it == fullRefreshPath
|
||||||
|
@ -37,7 +37,7 @@ fun HttpClientConfig<*>.installClientAuthenticator(
|
|||||||
}.onSecond {
|
}.onSecond {
|
||||||
currentRefreshToken = it.refresh
|
currentRefreshToken = it.refresh
|
||||||
}
|
}
|
||||||
val creds = initialAuthKey.t1 as? AuthCreds
|
val creds = initialAuthKey.t1OrNull as? AuthCreds
|
||||||
var userRefreshJob: Job? = null
|
var userRefreshJob: Job? = null
|
||||||
|
|
||||||
install("Auth Token Refresher") {
|
install("Auth Token Refresher") {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.auth.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.auth.common"/>
|
|
@ -1,6 +1,6 @@
|
|||||||
package dev.inmo.postssystem.features.auth.server.tokens
|
package dev.inmo.postssystem.features.auth.server.tokens
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import korlibs.time.DateTime
|
||||||
import dev.inmo.postssystem.features.auth.common.AuthToken
|
import dev.inmo.postssystem.features.auth.common.AuthToken
|
||||||
import dev.inmo.postssystem.features.auth.common.RefreshToken
|
import dev.inmo.postssystem.features.auth.common.RefreshToken
|
||||||
import dev.inmo.postssystem.features.users.common.UserId
|
import dev.inmo.postssystem.features.users.common.UserId
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package dev.inmo.postssystem.features.auth.server.tokens
|
package dev.inmo.postssystem.features.auth.server.tokens
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import korlibs.time.DateTime
|
||||||
import com.soywiz.klock.milliseconds
|
import korlibs.time.milliseconds
|
||||||
import dev.inmo.postssystem.features.auth.common.*
|
import dev.inmo.postssystem.features.auth.common.*
|
||||||
import dev.inmo.postssystem.features.common.common.Milliseconds
|
import dev.inmo.postssystem.features.common.common.Milliseconds
|
||||||
import dev.inmo.postssystem.features.users.common.*
|
import dev.inmo.postssystem.features.users.common.*
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.client.template.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.client.template.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"
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package dev.inmo.postssystem.features.common.common.ui
|
package dev.inmo.postssystem.features.common.common.ui
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import com.soywiz.klock.DateTime
|
import korlibs.time.DateTime
|
||||||
import com.soywiz.klock.ISO8601
|
import korlibs.time.ISO8601
|
||||||
import org.jetbrains.compose.web.dom.Text
|
import org.jetbrains.compose.web.dom.Text
|
||||||
|
|
||||||
object DateTimeView {
|
object DateTimeView {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.common.client"/>
|
|
@ -1,6 +1,6 @@
|
|||||||
package dev.inmo.postssystem.features.common.common
|
package dev.inmo.postssystem.features.common.common
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import korlibs.time.DateTime
|
||||||
import kotlinx.serialization.KSerializer
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.Serializer
|
import kotlinx.serialization.Serializer
|
||||||
import kotlinx.serialization.builtins.serializer
|
import kotlinx.serialization.builtins.serializer
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package dev.inmo.postssystem.features.common.common
|
package dev.inmo.postssystem.features.common.common
|
||||||
|
|
||||||
import org.koin.core.definition.Definition
|
import org.koin.core.definition.Definition
|
||||||
|
import org.koin.core.definition.KoinDefinition
|
||||||
import org.koin.core.instance.InstanceFactory
|
import org.koin.core.instance.InstanceFactory
|
||||||
import org.koin.core.module.Module
|
import org.koin.core.module.Module
|
||||||
import org.koin.core.qualifier.Qualifier
|
import org.koin.core.qualifier.Qualifier
|
||||||
@ -11,6 +12,6 @@ inline fun <reified T : Any> Module.singleWithBinds(
|
|||||||
qualifier: Qualifier? = null,
|
qualifier: Qualifier? = null,
|
||||||
createdAtStart: Boolean = false,
|
createdAtStart: Boolean = false,
|
||||||
noinline definition: Definition<T>
|
noinline definition: Definition<T>
|
||||||
): Pair<Module, InstanceFactory<*>> {
|
): KoinDefinition<*> {
|
||||||
return single(qualifier, createdAtStart, definition) binds (T::class.allSuperclasses.toTypedArray())
|
return single(qualifier, createdAtStart, definition) binds (T::class.allSuperclasses.toTypedArray())
|
||||||
}
|
}
|
||||||
|
10
features/common/common/src/linuxX64Main/kotlin/dev/inmo/postssystem/features/common/common/FileMimeType.linuxX64.kt
Normal file
10
features/common/common/src/linuxX64Main/kotlin/dev/inmo/postssystem/features/common/common/FileMimeType.linuxX64.kt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package dev.inmo.postssystem.features.common.common
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.common.MPPFile
|
||||||
|
import dev.inmo.micro_utils.common.filename
|
||||||
|
import dev.inmo.micro_utils.mime_types.*
|
||||||
|
|
||||||
|
actual val MPPFile.mimeType: MimeType
|
||||||
|
get() {
|
||||||
|
return getMimeTypeOrAny(filename.extension)
|
||||||
|
}
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.common.common"/>
|
|
11
features/common/common/src/mingwX64Main/kotlin/dev/inmo/postssystem/features/common/common/FileMimeType.mingwX64.kt
Normal file
11
features/common/common/src/mingwX64Main/kotlin/dev/inmo/postssystem/features/common/common/FileMimeType.mingwX64.kt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package dev.inmo.postssystem.features.common.common
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.common.MPPFile
|
||||||
|
import dev.inmo.micro_utils.common.filename
|
||||||
|
import dev.inmo.micro_utils.mime_types.MimeType
|
||||||
|
import dev.inmo.micro_utils.mime_types.getMimeTypeOrAny
|
||||||
|
|
||||||
|
actual val MPPFile.mimeType: MimeType
|
||||||
|
get() {
|
||||||
|
return getMimeTypeOrAny(filename.extension)
|
||||||
|
}
|
@ -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 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.content.binary.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.content.binary.common"/>
|
|
@ -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"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.content.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.content.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"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.content.content.text.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.content.content.text.common"/>
|
|
@ -2,28 +2,28 @@ package dev.inmo.postssystem.features.files.client
|
|||||||
|
|
||||||
import dev.inmo.postssystem.features.files.common.*
|
import dev.inmo.postssystem.features.files.common.*
|
||||||
import dev.inmo.postssystem.features.files.common.storage.ReadFilesStorage
|
import dev.inmo.postssystem.features.files.common.storage.ReadFilesStorage
|
||||||
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
|
import dev.inmo.micro_utils.ktor.client.bodyOrNull
|
||||||
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 io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.request.post
|
import io.ktor.client.request.*
|
||||||
import io.ktor.client.request.setBody
|
|
||||||
import io.ktor.client.statement.HttpResponse
|
|
||||||
import io.ktor.client.statement.readBytes
|
import io.ktor.client.statement.readBytes
|
||||||
|
import io.ktor.http.ContentType
|
||||||
|
import io.ktor.http.encodeURLQueryComponent
|
||||||
import kotlinx.serialization.BinaryFormat
|
import kotlinx.serialization.BinaryFormat
|
||||||
import kotlinx.serialization.builtins.nullable
|
import kotlinx.serialization.builtins.nullable
|
||||||
|
|
||||||
class ClientReadFilesStorage(
|
class ClientReadFilesStorage(
|
||||||
baseUrl: String,
|
baseUrl: String,
|
||||||
private val client: HttpClient,
|
private val client: HttpClient,
|
||||||
private val serialFormat: BinaryFormat
|
private val serialFormat: BinaryFormat,
|
||||||
) : ReadFilesStorage, ReadCRUDRepo<MetaFileInfoStorageWrapper, FileId> by KtorReadStandardCrudRepo(
|
contentType: ContentType
|
||||||
|
) : ReadFilesStorage, ReadCRUDRepo<MetaFileInfoStorageWrapper, FileId> by KtorReadCRUDRepoClient<MetaFileInfoStorageWrapper, FileId>(
|
||||||
buildStandardUrl(baseUrl, filesRootPathPart),
|
buildStandardUrl(baseUrl, filesRootPathPart),
|
||||||
UnifiedRequester(client, serialFormat),
|
client,
|
||||||
MetaFileInfoStorageWrapper.serializer(),
|
contentType,
|
||||||
MetaFileInfoStorageWrapper.serializer().nullable,
|
{ it.string.encodeURLQueryComponent() }
|
||||||
FileId.serializer()
|
|
||||||
) {
|
) {
|
||||||
private val fullFilesPath = buildStandardUrl(baseUrl, filesRootPathPart)
|
private val fullFilesPath = buildStandardUrl(baseUrl, filesRootPathPart)
|
||||||
private val fullFilesGetBytesPath = buildStandardUrl(
|
private val fullFilesGetBytesPath = buildStandardUrl(
|
||||||
@ -37,12 +37,11 @@ class ClientReadFilesStorage(
|
|||||||
|
|
||||||
override suspend fun getFullFileInfo(
|
override suspend fun getFullFileInfo(
|
||||||
id: FileId
|
id: FileId
|
||||||
): FullFileInfoStorageWrapper? = unifiedRequester.uniget(
|
): FullFileInfoStorageWrapper? = client.get(
|
||||||
buildStandardUrl(
|
buildStandardUrl(
|
||||||
fullFilesPath,
|
fullFilesPath,
|
||||||
filesGetFullFileInfoPathPart,
|
filesGetFullFileInfoPathPart,
|
||||||
filesFileIdParameter to unifiedRequester.encodeUrlQueryValue(FileId.serializer(), id)
|
filesFileIdParameter to id.string.encodeURLQueryComponent()
|
||||||
),
|
)
|
||||||
FullFileInfoStorageWrapper.serializer().nullable
|
).bodyOrNull()
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@ -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 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.files.client"/>
|
|
@ -61,4 +61,8 @@ class DiskReadFilesStorage(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun getIdsByPagination(pagination: Pagination): PaginationResult<FileId> {
|
||||||
|
return metasKeyValueRepo.keys(pagination)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.files.common"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.posts.client"/>
|
|
@ -1,6 +1,6 @@
|
|||||||
package dev.inmo.postssystem.features.posts.common
|
package dev.inmo.postssystem.features.posts.common
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import korlibs.time.DateTime
|
||||||
import dev.inmo.postssystem.features.common.common.DateTimeSerializer
|
import dev.inmo.postssystem.features.common.common.DateTimeSerializer
|
||||||
import dev.inmo.postssystem.features.content.common.Content
|
import dev.inmo.postssystem.features.content.common.Content
|
||||||
import dev.inmo.postssystem.features.content.common.ContentId
|
import dev.inmo.postssystem.features.content.common.ContentId
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.posts.common"/>
|
|
@ -1,6 +1,6 @@
|
|||||||
package dev.inmo.postssystem.features.posts.server
|
package dev.inmo.postssystem.features.posts.server
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import korlibs.time.DateTime
|
||||||
import dev.inmo.micro_utils.repos.exposed.*
|
import dev.inmo.micro_utils.repos.exposed.*
|
||||||
import dev.inmo.postssystem.features.content.common.ContentId
|
import dev.inmo.postssystem.features.content.common.ContentId
|
||||||
import dev.inmo.postssystem.features.posts.common.*
|
import dev.inmo.postssystem.features.posts.common.*
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.publication.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.publication.common"/>
|
|
@ -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()
|
||||||
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.roles.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.roles.common"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.roles.manager.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.roles.manager.common"/>
|
|
@ -2,11 +2,9 @@ package dev.inmo.postssystem.features.status.client
|
|||||||
|
|
||||||
import dev.inmo.postssystem.features.status.common.statusAuthorisedPathPart
|
import dev.inmo.postssystem.features.status.common.statusAuthorisedPathPart
|
||||||
import dev.inmo.postssystem.features.status.common.statusRootPart
|
import dev.inmo.postssystem.features.status.common.statusRootPart
|
||||||
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 io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.request.get
|
import io.ktor.client.request.get
|
||||||
import io.ktor.client.statement.HttpResponse
|
|
||||||
import io.ktor.http.HttpStatusCode
|
import io.ktor.http.HttpStatusCode
|
||||||
|
|
||||||
class StatusFeatureClient(
|
class StatusFeatureClient(
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.status.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.status.common"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.template.client"/>
|
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.template.common"/>
|
|
@ -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()
|
|
||||||
)
|
)
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.users.client"/>
|
|
@ -21,7 +21,3 @@ kotlin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
|
||||||
disableIncludingJvmCodeInAndroidPart()
|
|
||||||
}
|
|
||||||
|
@ -31,7 +31,7 @@ sealed class User : NewUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class DefaultUser(
|
data class RegisteredUser(
|
||||||
override val id: UserId,
|
override val id: UserId,
|
||||||
override val firstName: String,
|
override val firstName: String,
|
||||||
override val lastName: String,
|
override val lastName: String,
|
||||||
|
@ -3,8 +3,7 @@ package dev.inmo.postssystem.features.users.common
|
|||||||
import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo
|
import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo
|
||||||
import dev.inmo.micro_utils.repos.exposed.initTable
|
import dev.inmo.micro_utils.repos.exposed.initTable
|
||||||
import org.jetbrains.exposed.sql.*
|
import org.jetbrains.exposed.sql.*
|
||||||
import org.jetbrains.exposed.sql.statements.InsertStatement
|
import org.jetbrains.exposed.sql.statements.*
|
||||||
import org.jetbrains.exposed.sql.statements.UpdateStatement
|
|
||||||
|
|
||||||
class ExposedUsersStorage(override val database: Database) : UsersStorage, AbstractExposedCRUDRepo<User, UserId, NewUser>(
|
class ExposedUsersStorage(override val database: Database) : UsersStorage, AbstractExposedCRUDRepo<User, UserId, NewUser>(
|
||||||
tableName = "Users"
|
tableName = "Users"
|
||||||
@ -15,11 +14,12 @@ class ExposedUsersStorage(override val database: Database) : UsersStorage, Abstr
|
|||||||
private val lastNameColumn = text("lastName")
|
private val lastNameColumn = text("lastName")
|
||||||
|
|
||||||
override val primaryKey: PrimaryKey = PrimaryKey(userIdColumn)
|
override val primaryKey: PrimaryKey = PrimaryKey(userIdColumn)
|
||||||
|
override val selectById: ISqlExpressionBuilder.(UserId) -> Op<Boolean> = { userIdColumn.eq(it.long) }
|
||||||
|
override val ResultRow.asId: UserId
|
||||||
|
get() = UserId(get(userIdColumn))
|
||||||
|
|
||||||
override val selectByIds: SqlExpressionBuilder.(List<UserId>) -> Op<Boolean> = { userIdColumn.inList(it.map { it.long }) }
|
|
||||||
override val selectById: SqlExpressionBuilder.(UserId) -> Op<Boolean> = { userIdColumn.eq(it.long) }
|
|
||||||
override val ResultRow.asObject: User
|
override val ResultRow.asObject: User
|
||||||
get() = DefaultUser(
|
get() = RegisteredUser(
|
||||||
get(userIdColumn).userId,
|
get(userIdColumn).userId,
|
||||||
get(firstNameColumn),
|
get(firstNameColumn),
|
||||||
get(lastNameColumn),
|
get(lastNameColumn),
|
||||||
@ -30,19 +30,19 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun update(id: UserId, value: NewUser, it: UpdateStatement) {
|
override fun update(id: UserId?, 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
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun InsertStatement<Number>.asObject(value: NewUser): User = DefaultUser(
|
override fun InsertStatement<Number>.asObject(value: NewUser): User = RegisteredUser(
|
||||||
get(userIdColumn).userId,
|
get(userIdColumn).userId,
|
||||||
get(firstNameColumn),
|
get(firstNameColumn),
|
||||||
get(lastNameColumn),
|
get(lastNameColumn),
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<manifest package="dev.inmo.postssystem.features.users.common"/>
|
|
@ -1,39 +1,42 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
kotlin = "1.6.21"
|
kotlin = "2.0.10"
|
||||||
kotlin-serialization = "1.3.3"
|
kotlin-serialization = "1.7.1"
|
||||||
jsuikit = "0.1.7"
|
kotlin-coroutines = "1.8.1"
|
||||||
compose = "1.2.0-alpha01-dev709"
|
jsuikit = "0.7.6"
|
||||||
microutils = "0.11.1"
|
compose = "1.7.0-alpha02"
|
||||||
tgbotapi = "2.0.2"
|
microutils = "0.22.0"
|
||||||
ktor = "2.0.2"
|
tgbotapi = "17.0.0"
|
||||||
klock = "2.7.0"
|
ktor = "2.3.11"
|
||||||
koin = "3.2.0"
|
korlibs = "5.4.0"
|
||||||
exposed = "0.38.2"
|
koin = "3.5.6"
|
||||||
|
exposed = "0.53.0"
|
||||||
psql = "42.3.6"
|
psql = "42.3.6"
|
||||||
scrimage = "4.0.31"
|
scrimage = "4.1.1"
|
||||||
dokka = "1.6.21"
|
dokka = "1.9.20"
|
||||||
logback = "1.2.10"
|
logback = "1.2.10"
|
||||||
uuid = "0.4.1"
|
uuid = "0.8.4"
|
||||||
|
|
||||||
android-junit = "4.12"
|
android-junit = "4.12"
|
||||||
android-test-junit = "1.1.2"
|
android-test-junit = "1.1.2"
|
||||||
android-espresso-core = "3.3.0"
|
android-espresso-core = "3.3.0"
|
||||||
|
|
||||||
gh-release = "2.3.7"
|
gh-release = "2.5.1"
|
||||||
|
|
||||||
android-gradle = "7.0.4"
|
android-gradle = "8.2.2"
|
||||||
dexcount = "3.1.0"
|
dexcount = "3.1.0"
|
||||||
|
|
||||||
android-coreKtx = "1.7.0"
|
android-coreKtx = "1.12.0"
|
||||||
android-recyclerView = "1.2.1"
|
android-recyclerView = "1.2.1"
|
||||||
android-appCompat = "1.4.1"
|
android-appCompat = "1.4.1"
|
||||||
|
android-fragment = "1.6.2"
|
||||||
|
android-compose-material3 = "1.1.2"
|
||||||
android-espresso = "3.3.0"
|
android-espresso = "3.3.0"
|
||||||
android-test = "1.1.2"
|
android-test = "1.1.2"
|
||||||
|
|
||||||
android-props-minSdk = "19"
|
android-props-minSdk = "21"
|
||||||
android-props-compileSdk = "32"
|
android-props-compileSdk = "35"
|
||||||
android-props-buildTools = "32.0.0"
|
android-props-buildTools = "35.0.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
|
||||||
@ -42,6 +45,10 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref =
|
|||||||
kotlin-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization" }
|
kotlin-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization" }
|
||||||
kotlin-serialization-properties = { module = "org.jetbrains.kotlinx:kotlinx-serialization-properties", version.ref = "kotlin-serialization" }
|
kotlin-serialization-properties = { module = "org.jetbrains.kotlinx:kotlinx-serialization-properties", version.ref = "kotlin-serialization" }
|
||||||
|
|
||||||
|
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" }
|
||||||
|
kotlin-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlin-coroutines" }
|
||||||
|
kotlin-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlin-coroutines" }
|
||||||
|
|
||||||
jsuikit = { module = "dev.inmo:kjsuikit", version.ref = "jsuikit" }
|
jsuikit = { module = "dev.inmo:kjsuikit", version.ref = "jsuikit" }
|
||||||
|
|
||||||
postgresql = { module = "org.postgresql:postgresql", version.ref = "psql" }
|
postgresql = { module = "org.postgresql:postgresql", version.ref = "psql" }
|
||||||
@ -81,12 +88,18 @@ microutils-serialization-typedserializer = { module = "dev.inmo:micro_utils.seri
|
|||||||
|
|
||||||
tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
|
tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
|
||||||
|
|
||||||
klock = { module = "com.soywiz.korlibs.klock:klock", version.ref = "klock" }
|
klock = { module = "com.soywiz.korge:korlibs-time", version.ref = "korlibs" }
|
||||||
|
krypto = { module = "com.soywiz.korge:korlibs-crypto", version.ref = "korlibs" }
|
||||||
|
|
||||||
scrimage = { module = "com.sksamuel.scrimage:scrimage-core", version.ref = "scrimage" }
|
scrimage = { module = "com.sksamuel.scrimage:scrimage-core", version.ref = "scrimage" }
|
||||||
|
|
||||||
androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "android-test-junit" }
|
android-coreKtx = { module = "androidx.core:core-ktx", version.ref = "android-coreKtx" }
|
||||||
androidx-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "android-espresso-core" }
|
android-recyclerView = { module = "androidx.recyclerview:recyclerview", version.ref = "android-recyclerView" }
|
||||||
|
android-appCompat-resources = { module = "androidx.appcompat:appcompat-resources", version.ref = "android-appCompat" }
|
||||||
|
android-compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "android-compose-material3" }
|
||||||
|
android-fragment = { module = "androidx.fragment:fragment", version.ref = "android-fragment" }
|
||||||
|
android-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "android-espresso" }
|
||||||
|
android-test-junit = { module = "androidx.test.ext:junit", version.ref = "android-test" }
|
||||||
|
|
||||||
# classpaths
|
# classpaths
|
||||||
|
|
||||||
@ -100,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" }
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -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-7.4-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
project.version = "$version"
|
project.version = "$version"
|
||||||
project.group = "$group"
|
project.group = "$group"
|
||||||
|
|
||||||
// apply from: "$publishGradlePath"
|
apply from: "$publishGradlePath"
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
android {
|
androidTarget {
|
||||||
publishAllLibraryVariants()
|
publishAllLibraryVariants()
|
||||||
|
compilations.all {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
@ -18,18 +23,15 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-common')
|
implementation kotlin('test-common')
|
||||||
implementation kotlin('test-annotations-common')
|
implementation kotlin('test-annotations-common')
|
||||||
}
|
implementation libs.kt.coroutines.test
|
||||||
}
|
|
||||||
androidTest {
|
|
||||||
dependencies {
|
|
||||||
implementation kotlin('test-junit')
|
|
||||||
implementation libs.androidx.test.junit
|
|
||||||
implementation libs.androidx.espresso
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
allTargetsConfiguration()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$defaultAndroidSettingsPresetPath"
|
apply from: "$defaultAndroidSettingsPresetPath"
|
||||||
|
|
||||||
|
java {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
}
|
||||||
|
@ -4,7 +4,13 @@ project.group = "$group"
|
|||||||
apply from: "$publishGradlePath"
|
apply from: "$publishGradlePath"
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvm()
|
jvm {
|
||||||
|
compilations.main {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain {
|
commonMain {
|
||||||
@ -16,6 +22,7 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-common')
|
implementation kotlin('test-common')
|
||||||
implementation kotlin('test-annotations-common')
|
implementation kotlin('test-annotations-common')
|
||||||
|
implementation libs.kotlin.coroutines.test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,11 +32,9 @@ kotlin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
allTargetsConfiguration()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
@ -13,21 +13,25 @@ kotlin {
|
|||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('stdlib')
|
implementation kotlin('stdlib')
|
||||||
|
api libs.kotlin.serialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commonTest {
|
commonTest {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-common')
|
implementation kotlin('test-common')
|
||||||
implementation kotlin('test-annotations-common')
|
implementation kotlin('test-annotations-common')
|
||||||
|
implementation libs.kotlin.coroutines.test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jsTest {
|
jsTest {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-js')
|
implementation kotlin('test-js')
|
||||||
implementation kotlin('test-junit')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
allTargetsConfiguration()
|
|
||||||
|
java {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
@ -4,19 +4,30 @@ project.group = "$group"
|
|||||||
apply from: "$publishGradlePath"
|
apply from: "$publishGradlePath"
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvm()
|
jvm {
|
||||||
|
compilations.main {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
js (IR) {
|
js (IR) {
|
||||||
browser()
|
browser()
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
android {
|
androidTarget {
|
||||||
publishAllLibraryVariants()
|
publishAllLibraryVariants()
|
||||||
|
compilations.all {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation libs.kotlin.std
|
implementation kotlin('stdlib')
|
||||||
api libs.kotlin.serialization
|
api libs.kotlin.serialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -24,6 +35,7 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-common')
|
implementation kotlin('test-common')
|
||||||
implementation kotlin('test-annotations-common')
|
implementation kotlin('test-annotations-common')
|
||||||
|
implementation libs.kotlin.coroutines.test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmTest {
|
jvmTest {
|
||||||
@ -34,24 +46,23 @@ kotlin {
|
|||||||
jsTest {
|
jsTest {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-js')
|
implementation kotlin('test-js')
|
||||||
implementation kotlin('test-junit')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
androidTest {
|
androidUnitTest {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-junit')
|
implementation kotlin('test-junit')
|
||||||
implementation libs.androidx.test.junit
|
implementation libs.android.test.junit
|
||||||
implementation libs.androidx.espresso
|
implementation libs.android.espresso
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
allTargetsConfiguration()
|
androidMain.dependsOn jvmMain
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$defaultAndroidSettingsPresetPath"
|
apply from: "$defaultAndroidSettingsPresetPath"
|
||||||
|
|
||||||
java {
|
java {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
@ -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>()
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
task javadocsJar(type: Jar) {
|
task javadocsJar(type: Jar) {
|
||||||
classifier = 'javadoc'
|
archiveClassifier = 'javadoc'
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
@ -49,12 +49,15 @@ publishing {
|
|||||||
maven {
|
maven {
|
||||||
name = "GitHubPackages"
|
name = "GitHubPackages"
|
||||||
url = uri("https://maven.pkg.github.com/PostsSystem/core")
|
url = uri("https://maven.pkg.github.com/PostsSystem/core")
|
||||||
|
|
||||||
credentials {
|
credentials {
|
||||||
username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER')
|
username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER')
|
||||||
password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD')
|
password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD')
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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.*
|
||||||
|
@ -83,5 +83,3 @@ includes.each { originalName ->
|
|||||||
project.projectDir = new File(projectDirectory)
|
project.projectDir = new File(projectDirectory)
|
||||||
println(project)
|
println(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
enableFeaturePreview("VERSION_CATALOGS")
|
|
||||||
|
Reference in New Issue
Block a user