MicroUtils/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt

81 lines
3.3 KiB
Kotlin
Raw Normal View History

2020-09-22 01:47:01 +00:00
package dev.inmo.micro_utils.repos.ktor.client.crud
2020-11-02 15:34:49 +00:00
import dev.inmo.micro_utils.ktor.client.*
2020-11-27 08:35:00 +00:00
import dev.inmo.micro_utils.ktor.common.*
2020-09-22 01:47:01 +00:00
import dev.inmo.micro_utils.repos.UpdatedValuePair
import dev.inmo.micro_utils.repos.WriteCRUDRepo
2020-09-22 01:47:01 +00:00
import dev.inmo.micro_utils.repos.ktor.common.crud.*
import io.ktor.client.HttpClient
import kotlinx.coroutines.flow.Flow
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.*
@Deprecated("Use KtorWriteCRUDRepoClient instead")
2020-09-22 01:47:01 +00:00
class KtorWriteStandardCrudRepo<ObjectType, IdType, InputValue> (
private val baseUrl: String,
2020-11-27 07:30:02 +00:00
private val unifiedRequester: UnifiedRequester,
2020-09-22 01:47:01 +00:00
private val objectsSerializer: KSerializer<ObjectType>,
private val objectsNullableSerializer: KSerializer<ObjectType?>,
private val inputsSerializer: KSerializer<InputValue>,
private val idsSerializer: KSerializer<IdType>
) : WriteCRUDRepo<ObjectType, IdType, InputValue> {
2020-09-22 01:47:01 +00:00
private val listObjectsSerializer = ListSerializer(objectsSerializer)
private val listInputSerializer = ListSerializer(inputsSerializer)
private val listIdsSerializer = ListSerializer(idsSerializer)
private val inputUpdateSerializer = PairSerializer(
idsSerializer,
inputsSerializer
)
private val listInputUpdateSerializer = ListSerializer(inputUpdateSerializer)
2020-11-27 07:30:02 +00:00
constructor(
baseUrl: String,
client: HttpClient,
objectsSerializer: KSerializer<ObjectType>,
objectsSerializerNullable: KSerializer<ObjectType?>,
inputsSerializer: KSerializer<InputValue>,
idsSerializer: KSerializer<IdType>,
2020-11-27 08:35:00 +00:00
serialFormat: StandardKtorSerialFormat = standardKtorSerialFormat
2020-11-27 07:30:02 +00:00
) : this (
baseUrl, UnifiedRequester(client, serialFormat), objectsSerializer, objectsSerializerNullable, inputsSerializer, idsSerializer
)
override val newObjectsFlow: Flow<ObjectType> = unifiedRequester.createStandardWebsocketFlow(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, newObjectsFlowRouting),
deserializer = objectsSerializer
)
2020-11-27 07:30:02 +00:00
override val updatedObjectsFlow: Flow<ObjectType> = unifiedRequester.createStandardWebsocketFlow(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, updatedObjectsFlowRouting),
deserializer = objectsSerializer
)
2020-11-27 07:30:02 +00:00
override val deletedObjectsIdsFlow: Flow<IdType> = unifiedRequester.createStandardWebsocketFlow(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, deletedObjectsIdsFlowRouting),
deserializer = idsSerializer
)
2020-11-27 07:30:02 +00:00
override suspend fun create(values: List<InputValue>): List<ObjectType> = unifiedRequester.unipost(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, createRouting),
2022-06-30 07:15:19 +00:00
Pair(listInputSerializer, values),
2020-09-22 01:47:01 +00:00
listObjectsSerializer
)
2020-11-27 07:30:02 +00:00
override suspend fun update(id: IdType, value: InputValue): ObjectType? = unifiedRequester.unipost(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, updateRouting),
2022-06-30 07:15:19 +00:00
Pair(inputUpdateSerializer, id to value),
2020-09-22 01:47:01 +00:00
objectsNullableSerializer
)
2020-11-27 07:30:02 +00:00
override suspend fun update(values: List<UpdatedValuePair<IdType, InputValue>>): List<ObjectType> = unifiedRequester.unipost(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, updateManyRouting),
2022-06-30 07:15:19 +00:00
Pair(listInputUpdateSerializer, values),
2020-09-22 01:47:01 +00:00
listObjectsSerializer
)
2020-11-27 07:30:02 +00:00
override suspend fun deleteById(ids: List<IdType>) = unifiedRequester.unipost(
2020-09-22 01:47:01 +00:00
buildStandardUrl(baseUrl, deleteByIdRouting),
2022-06-30 07:15:19 +00:00
Pair(listIdsSerializer, ids),
2020-09-22 01:47:01 +00:00
Unit.serializer()
)
}