Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
546736690c | |||
e98a484c4d |
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())
|
||||||
}
|
}
|
||||||
|
@ -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"/>
|
|
@ -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,6 +1,6 @@
|
|||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.jvmargs=-Xmx2g
|
org.gradle.jvmargs=-Xmx4g
|
||||||
kotlin.js.generate.externals=true
|
kotlin.js.generate.externals=true
|
||||||
kotlin.incremental=true
|
kotlin.incremental=true
|
||||||
kotlin.incremental.js=true
|
kotlin.incremental.js=true
|
||||||
|
@ -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-dev731"
|
jsuikit = "0.7.6"
|
||||||
microutils = "0.11.12"
|
compose = "1.7.0-alpha02"
|
||||||
tgbotapi = "2.1.2"
|
microutils = "0.22.0"
|
||||||
ktor = "2.0.3"
|
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.4.1"
|
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")
|
|
||||||
|
Loading…
Reference in New Issue
Block a user