108 lines
4.6 KiB
Kotlin
108 lines
4.6 KiB
Kotlin
package dev.inmo.postssystem.features.content.binary.server
|
|
|
|
import dev.inmo.micro_utils.repos.exposed.keyvalue.ExposedKeyValueRepo
|
|
import dev.inmo.postssystem.features.common.common.singleWithBinds
|
|
import dev.inmo.postssystem.features.common.common.singleWithRandomQualifier
|
|
import dev.inmo.postssystem.features.common.server.Qualifiers
|
|
import dev.inmo.postssystem.features.common.server.ServerModuleLoader
|
|
import dev.inmo.postssystem.features.content.common.BinaryContent
|
|
import dev.inmo.postssystem.features.content.server.ServerContentStorageWrapper
|
|
import dev.inmo.postssystem.features.files.common.*
|
|
import dev.inmo.postssystem.features.files.common.storage.DefaultFilesStorage
|
|
import dev.inmo.postssystem.features.files.common.storage.FilesStorage
|
|
import kotlinx.serialization.json.*
|
|
import org.koin.core.module.Module
|
|
import org.koin.core.qualifier.StringQualifier
|
|
import java.io.File
|
|
|
|
/**
|
|
* This provider is declaring one additional optional section: "previewDimensions". This section is an object with two
|
|
* fields:
|
|
*
|
|
* * maxWidth
|
|
* * maxHeight
|
|
*
|
|
* for preview images
|
|
*/
|
|
class BinaryContentServerModuleLoader : ServerModuleLoader {
|
|
override fun Module.load(config: JsonObject) {
|
|
val binaryFilesFolderQualifier = StringQualifier("binaryFilesFolder")
|
|
val binaryStorageFilesQualifier = StringQualifier("binaryContentFiles")
|
|
val binaryPreviewStorageFilesQualifier = StringQualifier("binaryPreviewContentFiles")
|
|
val binaryPreviewFilesFolderQualifier = StringQualifier("binaryPreviewFilesFolder")
|
|
val binaryFilesMetasKeyValueRepoQualifier = StringQualifier("BinaryFilesMetaKV")
|
|
val binaryPreviewFilesMetasKeyValueRepoQualifier = StringQualifier("BinaryPreviewFilesMetaKV")
|
|
val binaryOriginalFilesMetasKeyValueRepoQualifier = StringQualifier("BinaryOriginalFilesMetaKV")
|
|
val binaryOriginalPreviewFilesMetasKeyValueRepoQualifier = StringQualifier("BinaryPreviewOriginalFilesMetaKV")
|
|
|
|
singleWithBinds(binaryFilesFolderQualifier) {
|
|
File(get<File>(Qualifiers.filesFolderQualifier), "binary_content").apply {
|
|
mkdirs()
|
|
}
|
|
}
|
|
|
|
single {
|
|
val dimensionsSection = config["previewDimensions"] ?: return@single PreviewImageDimensionsConfig()
|
|
get<Json>().decodeFromJsonElement(
|
|
PreviewImageDimensionsConfig.serializer(),
|
|
dimensionsSection
|
|
)
|
|
}
|
|
|
|
single<ImagesCropper> {
|
|
ScrimageBasedImagesCropper(get())
|
|
}
|
|
|
|
singleWithBinds(binaryPreviewFilesFolderQualifier) {
|
|
File(get<File>(binaryFilesFolderQualifier), "preview").apply {
|
|
mkdirs()
|
|
}
|
|
}
|
|
|
|
singleWithBinds(binaryOriginalFilesMetasKeyValueRepoQualifier) {
|
|
ExposedKeyValueRepo(get(), { text("fileid") }, { text("metaInfo") }, "BinaryContentFileIdsToMetas")
|
|
}
|
|
|
|
singleWithBinds(binaryOriginalPreviewFilesMetasKeyValueRepoQualifier) {
|
|
ExposedKeyValueRepo(get(), { text("fileid") }, { text("metaInfo") }, "BinaryPreviewContentFileIdsToMetas")
|
|
}
|
|
|
|
singleWithBinds(binaryFilesMetasKeyValueRepoQualifier) {
|
|
MetasKeyValueRepo(
|
|
get(),
|
|
get(binaryOriginalFilesMetasKeyValueRepoQualifier)
|
|
)
|
|
}
|
|
singleWithBinds(binaryPreviewFilesMetasKeyValueRepoQualifier) {
|
|
MetasKeyValueRepo(
|
|
get(),
|
|
get(binaryOriginalPreviewFilesMetasKeyValueRepoQualifier)
|
|
)
|
|
}
|
|
single<FilesStorage>(binaryStorageFilesQualifier) {
|
|
DefaultFilesStorage(
|
|
DiskReadFilesStorage(get(binaryFilesFolderQualifier), get(binaryFilesMetasKeyValueRepoQualifier)),
|
|
WriteDistFilesStorage(get(binaryFilesFolderQualifier), get(binaryFilesMetasKeyValueRepoQualifier))
|
|
)
|
|
}
|
|
single<FilesStorage>(binaryPreviewStorageFilesQualifier) {
|
|
DefaultFilesStorage(
|
|
DiskReadFilesStorage(get(binaryPreviewFilesFolderQualifier), get(binaryPreviewFilesMetasKeyValueRepoQualifier)),
|
|
WriteDistFilesStorage(get(binaryPreviewFilesFolderQualifier), get(binaryPreviewFilesMetasKeyValueRepoQualifier))
|
|
)
|
|
}
|
|
|
|
singleWithRandomQualifier {
|
|
ServerContentStorageWrapper(
|
|
BinaryServerContentStorage(
|
|
get(binaryStorageFilesQualifier),
|
|
get(binaryPreviewStorageFilesQualifier),
|
|
get(),
|
|
get()
|
|
),
|
|
BinaryContent::class
|
|
)
|
|
}
|
|
}
|
|
}
|