mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-12-02 15:00:08 +00:00
Compare commits
5 Commits
8fc1ff1d59
...
62df81bb4e
Author | SHA1 | Date | |
---|---|---|---|
62df81bb4e | |||
0a8e0f6178 | |||
f705020aaa | |||
78bd3b9853 | |||
992b283597 |
@ -2,11 +2,18 @@
|
||||
|
||||
## 0.11.0
|
||||
|
||||
* `Versions`
|
||||
* `UUID`: `0.4.0` -> `0.4.1`
|
||||
* `Ktor`
|
||||
*
|
||||
* `Client`:
|
||||
* New extension fun `HttpResponse#throwOnUnsuccess`
|
||||
* All old functions, classes and extensions has been rewritten with new ktor-way with types info and keeping `ContentNegotiation` in mind
|
||||
* `Server`:
|
||||
* All old functions, classes and extensions has been rewritten with new ktor-way with types info and keeping `ContentNegotiation` in mind
|
||||
* `Repos`
|
||||
* `Ktor`:
|
||||
* Fully rewritten work with all declared repositories
|
||||
* All old functions, classes and extensions has been rewritten with new ktor-way with types info and keeping `ContentNegotiation` in mind
|
||||
|
||||
## 0.10.8
|
||||
|
||||
|
@ -9,7 +9,7 @@ jb-exposed = "0.38.2"
|
||||
jb-dokka = "1.6.21"
|
||||
|
||||
klock = "2.7.0"
|
||||
uuid = "0.4.0"
|
||||
uuid = "0.4.1"
|
||||
|
||||
ktor = "2.0.2"
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key_value
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key.value
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.*
|
@ -1,10 +1,11 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key_value
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key.value
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.pagination.*
|
||||
import dev.inmo.micro_utils.repos.ReadKeyValueRepo
|
||||
import dev.inmo.micro_utils.repos.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.ktor.common.containsRoute
|
||||
import dev.inmo.micro_utils.repos.ktor.common.keyParameterName
|
||||
import dev.inmo.micro_utils.repos.ktor.common.key_value.*
|
||||
import dev.inmo.micro_utils.repos.ktor.common.reversedParameterName
|
||||
import io.ktor.client.HttpClient
|
||||
@ -30,7 +31,7 @@ class KtorReadKeyValueRepoClient<Key, Value>(
|
||||
baseUrl,
|
||||
getRoute,
|
||||
mapOf(
|
||||
idParameterName to idSerializer(k)
|
||||
keyParameterName to idSerializer(k)
|
||||
)
|
||||
)
|
||||
) {
|
||||
@ -41,7 +42,7 @@ class KtorReadKeyValueRepoClient<Key, Value>(
|
||||
buildStandardUrl(
|
||||
baseUrl,
|
||||
containsRoute,
|
||||
idParameterName to idSerializer(key)
|
||||
keyParameterName to idSerializer(key)
|
||||
)
|
||||
) {
|
||||
contentType(contentType)
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key_value
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key.value
|
||||
|
||||
import dev.inmo.micro_utils.ktor.client.createStandardWebsocketFlow
|
||||
import dev.inmo.micro_utils.ktor.client.throwOnUnsuccess
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.client.one_to_many
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key.values
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.*
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.client.one_to_many
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key.values
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.pagination.*
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.client.one_to_many
|
||||
package dev.inmo.micro_utils.repos.ktor.client.key.values
|
||||
|
||||
import dev.inmo.micro_utils.ktor.client.createStandardWebsocketFlow
|
||||
import dev.inmo.micro_utils.ktor.client.throwOnUnsuccess
|
@ -1,8 +1,8 @@
|
||||
import dev.inmo.micro_utils.pagination.firstPageWithOneElementPagination
|
||||
import dev.inmo.micro_utils.pagination.utils.getAllWithNextPaging
|
||||
import dev.inmo.micro_utils.repos.*
|
||||
import dev.inmo.micro_utils.repos.ktor.client.key_value.KtorKeyValueRepoClient
|
||||
import dev.inmo.micro_utils.repos.ktor.server.key_value.configureKeyValueRepoRoutes
|
||||
import dev.inmo.micro_utils.repos.ktor.client.key.value.KtorKeyValueRepoClient
|
||||
import dev.inmo.micro_utils.repos.ktor.server.key.value.configureKeyValueRepoRoutes
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.logging.Logging
|
||||
import io.ktor.http.ContentType
|
||||
|
@ -1,8 +1,8 @@
|
||||
import dev.inmo.micro_utils.pagination.firstPageWithOneElementPagination
|
||||
import dev.inmo.micro_utils.pagination.utils.getAllWithNextPaging
|
||||
import dev.inmo.micro_utils.repos.*
|
||||
import dev.inmo.micro_utils.repos.ktor.client.one_to_many.KtorKeyValuesRepoClient
|
||||
import dev.inmo.micro_utils.repos.ktor.server.one_to_many.configureKeyValuesRepoRoutes
|
||||
import dev.inmo.micro_utils.repos.ktor.client.key.values.KtorKeyValuesRepoClient
|
||||
import dev.inmo.micro_utils.repos.ktor.server.key.values.configureKeyValuesRepoRoutes
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.logging.Logging
|
||||
import io.ktor.http.ContentType
|
||||
|
@ -79,15 +79,6 @@ definitions:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/definitions/NewValue"
|
||||
Pagination:
|
||||
type: object
|
||||
properties:
|
||||
page:
|
||||
type: integer
|
||||
description: "Page of pagination"
|
||||
size:
|
||||
type: integer
|
||||
description: "Size of each page in pagination"
|
||||
PaginationResult:
|
||||
type: object
|
||||
properties:
|
||||
@ -116,7 +107,7 @@ paths:
|
||||
- $ref: "#/parameters/PaginationInQuerySize"
|
||||
responses:
|
||||
"200":
|
||||
description: "Pagination of elements"
|
||||
description: "Pagination with elements"
|
||||
schema:
|
||||
allOf:
|
||||
- $ref: "#/definitions/PaginationResult"
|
196
repos/ktor/kv.yml
Normal file
196
repos/ktor/kv.yml
Normal file
@ -0,0 +1,196 @@
|
||||
swagger: "2.0"
|
||||
info:
|
||||
description: "This is a template for the KeyValue repositories from [microutils](https://github.com/InsanusMokrassar/MicroUtils/tree/master/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value)"
|
||||
version: "0.11.0"
|
||||
title: "KeyValue Repo"
|
||||
contact:
|
||||
email: "ovsyannikov.alexey95@gmail.com"
|
||||
tags:
|
||||
- name: "Read"
|
||||
description: "Operations with `get` request in most cases"
|
||||
- name: "Write"
|
||||
description: "Operations with `post` request in most cases"
|
||||
|
||||
parameters:
|
||||
KeyInQuery:
|
||||
in: "query"
|
||||
name: "key"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Key"
|
||||
KeysInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/definitions/Key"
|
||||
ValuesInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/definitions/Value"
|
||||
PaginationInQueryPage:
|
||||
in: "query"
|
||||
type: integer
|
||||
name: "ppage"
|
||||
description: "Page of pagination"
|
||||
required: false
|
||||
PaginationInQuerySize:
|
||||
in: "query"
|
||||
type: integer
|
||||
name: "psize"
|
||||
description: "Size of each page in pagination"
|
||||
required: false
|
||||
ReversedInQuery:
|
||||
in: "query"
|
||||
type: boolean
|
||||
name: "reversed"
|
||||
description: "If passed, will tell to reverse the result pages"
|
||||
required: false
|
||||
ValueInQuery:
|
||||
in: "query"
|
||||
name: "value"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Value"
|
||||
MapInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Map"
|
||||
|
||||
|
||||
definitions:
|
||||
Key:
|
||||
type: integer
|
||||
description: "REWRITE THIS TYPE AS KEY IN SWAGGER FILE"
|
||||
Value:
|
||||
type: integer
|
||||
description: "REWRITE THIS TYPE AS VALUE IN SWAGGER FILE"
|
||||
Map:
|
||||
type: object
|
||||
description: "Map of objects"
|
||||
PaginationResult:
|
||||
type: object
|
||||
properties:
|
||||
page:
|
||||
type: integer
|
||||
description: "Page of pagination"
|
||||
pagesNumber:
|
||||
type: integer
|
||||
description: "Count of pages with the size from this pagination"
|
||||
size:
|
||||
type: integer
|
||||
description: "Size of each page in pagination"
|
||||
results:
|
||||
type: array
|
||||
description: "Array of all elements on that page. Size of pagination and size of array can be different and it can be interpreted like current page is the last one"
|
||||
items:
|
||||
type: object
|
||||
|
||||
paths:
|
||||
/get:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/KeyInQuery"
|
||||
required: true
|
||||
responses:
|
||||
"200":
|
||||
description: "Element by key"
|
||||
schema:
|
||||
$ref: "#/definitions/Value"
|
||||
"204":
|
||||
description: "No value by id"
|
||||
/values:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/PaginationInQueryPage"
|
||||
- $ref: "#/parameters/PaginationInQuerySize"
|
||||
- $ref: "#/parameters/ReversedInQuery"
|
||||
responses:
|
||||
"200":
|
||||
description: "Pagination with elements"
|
||||
schema:
|
||||
allOf:
|
||||
- $ref: "#/definitions/PaginationResult"
|
||||
- properties:
|
||||
results:
|
||||
items:
|
||||
$ref: "#/definitions/Value"
|
||||
/keys:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/PaginationInQueryPage"
|
||||
- $ref: "#/parameters/PaginationInQuerySize"
|
||||
- $ref: "#/parameters/ReversedInQuery"
|
||||
- $ref: "#/parameters/ValueInQuery"
|
||||
required: false
|
||||
responses:
|
||||
"200":
|
||||
description: "Pagination with elements"
|
||||
schema:
|
||||
allOf:
|
||||
- $ref: "#/definitions/PaginationResult"
|
||||
- properties:
|
||||
results:
|
||||
items:
|
||||
$ref: "#/definitions/Key"
|
||||
/contains:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/KeyInQuery"
|
||||
required: true
|
||||
responses:
|
||||
"200":
|
||||
description: "Object with id availability in repo"
|
||||
schema:
|
||||
type: boolean
|
||||
/count:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
responses:
|
||||
"200":
|
||||
description: "Amount of objects in repo"
|
||||
schema:
|
||||
type: integer
|
||||
|
||||
|
||||
/set:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- allOf:
|
||||
- $ref: "#/parameters/MapInBody"
|
||||
- additionalProperties:
|
||||
$ref: "#/definitions/Value"
|
||||
description: "Map with new elements to set. Use keys as a keys of this map"
|
||||
responses:
|
||||
"200":
|
||||
description: "Will return 200 if everything has been completed ok"
|
||||
/unset:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- $ref: "#/parameters/KeysInBody"
|
||||
responses:
|
||||
"200":
|
||||
description: "Objects with keys from body has been unset"
|
||||
/unsetWithValues:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- $ref: "#/parameters/ValuesInBody"
|
||||
responses:
|
||||
"200":
|
||||
description: "Objects with values from body has been unset"
|
222
repos/ktor/kvs.yml
Normal file
222
repos/ktor/kvs.yml
Normal file
@ -0,0 +1,222 @@
|
||||
swagger: "2.0"
|
||||
info:
|
||||
description: "This is a template for the KeyValues repositories from [microutils](https://github.com/InsanusMokrassar/MicroUtils/tree/master/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values)"
|
||||
version: "0.11.0"
|
||||
title: "KeyValues Repo"
|
||||
contact:
|
||||
email: "ovsyannikov.alexey95@gmail.com"
|
||||
tags:
|
||||
- name: "Read"
|
||||
description: "Operations with `get` request in most cases"
|
||||
- name: "Write"
|
||||
description: "Operations with `post` request in most cases"
|
||||
|
||||
parameters:
|
||||
KeyInQuery:
|
||||
in: "query"
|
||||
name: "key"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Key"
|
||||
KeyInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Key"
|
||||
KeysInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/definitions/Key"
|
||||
ValuesInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/definitions/Value"
|
||||
PaginationInQueryPage:
|
||||
in: "query"
|
||||
type: integer
|
||||
name: "ppage"
|
||||
description: "Page of pagination"
|
||||
required: false
|
||||
PaginationInQuerySize:
|
||||
in: "query"
|
||||
type: integer
|
||||
name: "psize"
|
||||
description: "Size of each page in pagination"
|
||||
required: false
|
||||
ReversedInQuery:
|
||||
in: "query"
|
||||
type: boolean
|
||||
name: "reversed"
|
||||
description: "If passed, will tell to reverse the result pages"
|
||||
required: false
|
||||
ValueInQuery:
|
||||
in: "query"
|
||||
name: "value"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Value"
|
||||
ValueInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Value"
|
||||
MapInBody:
|
||||
in: "body"
|
||||
name: "body"
|
||||
allOf:
|
||||
- $ref: "#/definitions/Map"
|
||||
|
||||
|
||||
definitions:
|
||||
Key:
|
||||
type: integer
|
||||
description: "REWRITE THIS TYPE AS KEY IN SWAGGER FILE"
|
||||
Value:
|
||||
type: integer
|
||||
description: "REWRITE THIS TYPE AS VALUE IN SWAGGER FILE"
|
||||
Map:
|
||||
type: object
|
||||
description: "Map of objects"
|
||||
PaginationResult:
|
||||
type: object
|
||||
properties:
|
||||
page:
|
||||
type: integer
|
||||
description: "Page of pagination"
|
||||
pagesNumber:
|
||||
type: integer
|
||||
description: "Count of pages with the size from this pagination"
|
||||
size:
|
||||
type: integer
|
||||
description: "Size of each page in pagination"
|
||||
results:
|
||||
type: array
|
||||
description: "Array of all elements on that page. Size of pagination and size of array can be different and it can be interpreted like current page is the last one"
|
||||
items:
|
||||
type: object
|
||||
|
||||
paths:
|
||||
/get:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/KeyInQuery"
|
||||
required: true
|
||||
- $ref: "#/parameters/PaginationInQueryPage"
|
||||
- $ref: "#/parameters/PaginationInQuerySize"
|
||||
- $ref: "#/parameters/ReversedInQuery"
|
||||
responses:
|
||||
"200":
|
||||
description: "Elements by query"
|
||||
schema:
|
||||
allOf:
|
||||
- $ref: "#/definitions/PaginationResult"
|
||||
- properties:
|
||||
results:
|
||||
items:
|
||||
$ref: "#/definitions/Value"
|
||||
/keys:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/PaginationInQueryPage"
|
||||
- $ref: "#/parameters/PaginationInQuerySize"
|
||||
- $ref: "#/parameters/ReversedInQuery"
|
||||
- $ref: "#/parameters/ValueInQuery"
|
||||
required: false
|
||||
responses:
|
||||
"200":
|
||||
description: "Pagination with elements"
|
||||
schema:
|
||||
allOf:
|
||||
- $ref: "#/definitions/PaginationResult"
|
||||
- properties:
|
||||
results:
|
||||
items:
|
||||
$ref: "#/definitions/Key"
|
||||
/contains:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
parameters:
|
||||
- $ref: "#/parameters/KeyInQuery"
|
||||
required: true
|
||||
- $ref: "#/parameters/ValueInQuery"
|
||||
required: false
|
||||
responses:
|
||||
"200":
|
||||
description: "Object with key and optionally availability in repo"
|
||||
schema:
|
||||
type: boolean
|
||||
/count:
|
||||
get:
|
||||
tags:
|
||||
- "Read"
|
||||
responses:
|
||||
"200":
|
||||
description: "Amount of objects in repo"
|
||||
schema:
|
||||
type: integer
|
||||
|
||||
|
||||
/add:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- allOf:
|
||||
- $ref: "#/parameters/MapInBody"
|
||||
- additionalProperties:
|
||||
$ref: "#/definitions/Value"
|
||||
description: "Map with new elements to add. Use keys as a keys of this map. That values will be added to the end of current data by their keys"
|
||||
responses:
|
||||
"200":
|
||||
description: "Will return 200 if everything has been completed ok"
|
||||
/set:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- allOf:
|
||||
- $ref: "#/parameters/MapInBody"
|
||||
- additionalProperties:
|
||||
$ref: "#/definitions/Value"
|
||||
description: "Map with new elements to set. Use keys as a keys of this map. That values will overwrite all exists data by their keys"
|
||||
responses:
|
||||
"200":
|
||||
description: "Will return 200 if everything has been completed ok"
|
||||
/remove:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- allOf:
|
||||
- $ref: "#/parameters/MapInBody"
|
||||
- additionalProperties:
|
||||
$ref: "#/definitions/Value"
|
||||
description: "Map with data to remove. Removing will be processed by each value for its key"
|
||||
responses:
|
||||
"200":
|
||||
description: "Objects with keys and values from body has been unset"
|
||||
/clear:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- $ref: "#/parameters/KeyInBody"
|
||||
responses:
|
||||
"200":
|
||||
description: "Data with corresponding key has been removed"
|
||||
/clearWithValues:
|
||||
post:
|
||||
tags:
|
||||
- "Write"
|
||||
parameters:
|
||||
- $ref: "#/parameters/ValueInBody"
|
||||
responses:
|
||||
"200":
|
||||
description: "Will remove value from all keys data"
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key_value
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key.value
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.KeyValueRepo
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key_value
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key.value
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.ktor.server.*
|
||||
@ -8,6 +8,7 @@ import dev.inmo.micro_utils.repos.ReadKeyValueRepo
|
||||
import dev.inmo.micro_utils.repos.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.ktor.common.containsRoute
|
||||
import dev.inmo.micro_utils.repos.ktor.common.countRoute
|
||||
import dev.inmo.micro_utils.repos.ktor.common.keyParameterName
|
||||
import dev.inmo.micro_utils.repos.ktor.common.key_value.*
|
||||
import dev.inmo.micro_utils.repos.ktor.common.reversedParameterName
|
||||
import io.ktor.http.*
|
||||
@ -30,7 +31,7 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValueRepoRoutes (
|
||||
|
||||
get(getRoute) {
|
||||
val key = idDeserializer(
|
||||
call.getQueryParameterOrSendError(idParameterName) ?: return@get
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
|
||||
originalRepo.get(key) ?.let {
|
||||
@ -63,7 +64,7 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValueRepoRoutes (
|
||||
|
||||
get(containsRoute) {
|
||||
val key = idDeserializer(
|
||||
call.getQueryParameterOrSendError(idParameterName) ?: return@get
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
|
||||
call.respond(originalRepo.contains(key))
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key_value
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key.value
|
||||
|
||||
import dev.inmo.micro_utils.ktor.server.*
|
||||
import dev.inmo.micro_utils.repos.WriteKeyValueRepo
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.server.one_to_many
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key.values
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.*
|
||||
@ -8,22 +8,22 @@ import kotlinx.serialization.*
|
||||
|
||||
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes (
|
||||
originalRepo: KeyValuesRepo<Key, Value>,
|
||||
noinline idDeserializer: suspend (String) -> Key,
|
||||
noinline keyDeserializer: suspend (String) -> Key,
|
||||
noinline valueDeserializer: suspend (String) -> Value
|
||||
) {
|
||||
configureReadKeyValuesRepoRoutes(originalRepo, idDeserializer, valueDeserializer)
|
||||
configureReadKeyValuesRepoRoutes(originalRepo, keyDeserializer, valueDeserializer)
|
||||
configureWriteKeyValuesRepoRoutes(originalRepo)
|
||||
}
|
||||
|
||||
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes(
|
||||
originalRepo: KeyValuesRepo<Key, Value>,
|
||||
idsSerializer: DeserializationStrategy<Key>,
|
||||
keySerializer: DeserializationStrategy<Key>,
|
||||
valueSerializer: DeserializationStrategy<Value>,
|
||||
serialFormat: StringFormat
|
||||
) = configureKeyValuesRepoRoutes(
|
||||
originalRepo,
|
||||
{
|
||||
serialFormat.decodeFromString(idsSerializer, it.decodeURLQueryComponent())
|
||||
serialFormat.decodeFromString(keySerializer, it.decodeURLQueryComponent())
|
||||
},
|
||||
{
|
||||
serialFormat.decodeFromString(valueSerializer, it.decodeURLQueryComponent())
|
||||
@ -32,13 +32,13 @@ inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepo
|
||||
|
||||
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes(
|
||||
originalRepo: KeyValuesRepo<Key, Value>,
|
||||
idsSerializer: DeserializationStrategy<Key>,
|
||||
keySerializer: DeserializationStrategy<Key>,
|
||||
valueSerializer: DeserializationStrategy<Value>,
|
||||
serialFormat: BinaryFormat
|
||||
) = configureKeyValuesRepoRoutes(
|
||||
originalRepo,
|
||||
{
|
||||
serialFormat.decodeHex(idsSerializer, it)
|
||||
serialFormat.decodeHex(keySerializer, it)
|
||||
},
|
||||
{
|
||||
serialFormat.decodeHex(valueSerializer, it)
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.server.one_to_many
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key.values
|
||||
|
||||
import dev.inmo.micro_utils.ktor.common.*
|
||||
import dev.inmo.micro_utils.ktor.server.*
|
||||
@ -7,6 +7,7 @@ import dev.inmo.micro_utils.pagination.extractPagination
|
||||
import dev.inmo.micro_utils.repos.ReadKeyValuesRepo
|
||||
import dev.inmo.micro_utils.repos.ktor.common.*
|
||||
import dev.inmo.micro_utils.repos.ktor.common.containsRoute
|
||||
import dev.inmo.micro_utils.repos.ktor.common.countRoute
|
||||
import dev.inmo.micro_utils.repos.ktor.common.one_to_many.*
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.application.call
|
||||
@ -20,14 +21,14 @@ import kotlinx.serialization.*
|
||||
@OptIn(InternalAPI::class)
|
||||
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
||||
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
||||
noinline idDeserializer: suspend (String) -> Key,
|
||||
noinline keyDeserializer: suspend (String) -> Key,
|
||||
noinline valueDeserializer: suspend (String) -> Value
|
||||
) {
|
||||
val paginationWithValuesTypeInfo = typeInfo<PaginationResult<Value>>()
|
||||
val paginationWithKeysTypeInfo = typeInfo<PaginationResult<Key>>()
|
||||
|
||||
get(getRoute) {
|
||||
val key = idDeserializer(
|
||||
val key = keyDeserializer(
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
val pagination = call.request.queryParameters.extractPagination
|
||||
@ -53,7 +54,7 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
||||
}
|
||||
|
||||
get(containsRoute) {
|
||||
val key = idDeserializer(
|
||||
val key = keyDeserializer(
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
val value = call.getQueryParameter(valueParameterName) ?.let {
|
||||
@ -65,9 +66,9 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
||||
)
|
||||
}
|
||||
|
||||
get(dev.inmo.micro_utils.repos.ktor.common.countRoute) {
|
||||
get(countRoute) {
|
||||
val id = call.getQueryParameter(keyParameterName) ?.let {
|
||||
idDeserializer(it)
|
||||
keyDeserializer(it)
|
||||
}
|
||||
call.respond(
|
||||
id ?.let { originalRepo.count(it) } ?: originalRepo.count()
|
||||
@ -77,13 +78,13 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
||||
|
||||
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes(
|
||||
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
||||
idsSerializer: DeserializationStrategy<Key>,
|
||||
keySerializer: DeserializationStrategy<Key>,
|
||||
valueSerializer: DeserializationStrategy<Value>,
|
||||
serialFormat: StringFormat
|
||||
) = configureReadKeyValuesRepoRoutes(
|
||||
originalRepo,
|
||||
{
|
||||
serialFormat.decodeFromString(idsSerializer, it.decodeURLQueryComponent())
|
||||
serialFormat.decodeFromString(keySerializer, it.decodeURLQueryComponent())
|
||||
},
|
||||
{
|
||||
serialFormat.decodeFromString(valueSerializer, it.decodeURLQueryComponent())
|
||||
@ -92,13 +93,13 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes(
|
||||
|
||||
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes(
|
||||
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
||||
idsSerializer: DeserializationStrategy<Key>,
|
||||
keySerializer: DeserializationStrategy<Key>,
|
||||
valueSerializer: DeserializationStrategy<Value>,
|
||||
serialFormat: BinaryFormat
|
||||
) = configureReadKeyValuesRepoRoutes(
|
||||
originalRepo,
|
||||
{
|
||||
serialFormat.decodeHex(idsSerializer, it)
|
||||
serialFormat.decodeHex(keySerializer, it)
|
||||
},
|
||||
{
|
||||
serialFormat.decodeHex(valueSerializer, it)
|
@ -1,4 +1,4 @@
|
||||
package dev.inmo.micro_utils.repos.ktor.server.one_to_many
|
||||
package dev.inmo.micro_utils.repos.ktor.server.key.values
|
||||
|
||||
import dev.inmo.micro_utils.ktor.server.*
|
||||
import dev.inmo.micro_utils.repos.WriteKeyValuesRepo
|
Loading…
Reference in New Issue
Block a user