core/features/roles/client/src/commonMain/kotlin/dev/inmo/postssystem/features/roles/client/WriteClientUsersRolesStorage.kt

52 lines
1.5 KiB
Kotlin
Raw Normal View History

2021-11-24 07:52:27 +00:00
package dev.inmo.postssystem.features.roles.client
import dev.inmo.postssystem.features.roles.common.*
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.serializer
2021-11-27 19:11:04 +00:00
class WriteClientRolesStorage<T : Role>(
2021-11-24 07:52:27 +00:00
private val baseUrl: String,
private val client: HttpClient,
2021-11-24 07:52:27 +00:00
private val serializer: KSerializer<T>
2021-11-27 19:11:04 +00:00
) : WriteRolesStorage<T> {
private val wrapperSerializer = RolesStorageIncludeExcludeWrapper.serializer(
2021-11-24 07:52:27 +00:00
serializer
)
private val userRolesFullUrl = buildStandardUrl(
baseUrl,
usersRolesRootPathPart
)
private val includeFullUrl = buildStandardUrl(
userRolesFullUrl,
usersRolesIncludePathPart
)
private val excludeFullUrl = buildStandardUrl(
userRolesFullUrl,
usersRolesExcludePathPart
)
override suspend fun include(
2021-11-27 19:11:04 +00:00
subject: RoleSubject,
role: T
2021-11-24 07:52:27 +00:00
): Boolean = unifiedRequester.unipost(
includeFullUrl,
2021-11-27 19:11:04 +00:00
wrapperSerializer to RolesStorageIncludeExcludeWrapper(
subject, role
2021-11-24 07:52:27 +00:00
),
Boolean.serializer()
)
override suspend fun exclude(
2021-11-27 19:11:04 +00:00
subject: RoleSubject,
role: T
2021-11-24 07:52:27 +00:00
): Boolean = unifiedRequester.unipost(
excludeFullUrl,
2021-11-27 19:11:04 +00:00
wrapperSerializer to RolesStorageIncludeExcludeWrapper(
subject, role
2021-11-24 07:52:27 +00:00
),
Boolean.serializer()
)
}