mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-11-26 03:58:45 +00:00
complete swagger templates
This commit is contained in:
parent
f705020aaa
commit
0a8e0f6178
@ -1,6 +1,6 @@
|
|||||||
swagger: "2.0"
|
swagger: "2.0"
|
||||||
info:
|
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)"
|
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"
|
version: "0.11.0"
|
||||||
title: "KeyValue Repo"
|
title: "KeyValue Repo"
|
||||||
contact:
|
contact:
|
||||||
|
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"
|
@ -8,22 +8,22 @@ import kotlinx.serialization.*
|
|||||||
|
|
||||||
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes (
|
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes (
|
||||||
originalRepo: KeyValuesRepo<Key, Value>,
|
originalRepo: KeyValuesRepo<Key, Value>,
|
||||||
noinline idDeserializer: suspend (String) -> Key,
|
noinline keyDeserializer: suspend (String) -> Key,
|
||||||
noinline valueDeserializer: suspend (String) -> Value
|
noinline valueDeserializer: suspend (String) -> Value
|
||||||
) {
|
) {
|
||||||
configureReadKeyValuesRepoRoutes(originalRepo, idDeserializer, valueDeserializer)
|
configureReadKeyValuesRepoRoutes(originalRepo, keyDeserializer, valueDeserializer)
|
||||||
configureWriteKeyValuesRepoRoutes(originalRepo)
|
configureWriteKeyValuesRepoRoutes(originalRepo)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes(
|
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes(
|
||||||
originalRepo: KeyValuesRepo<Key, Value>,
|
originalRepo: KeyValuesRepo<Key, Value>,
|
||||||
idsSerializer: DeserializationStrategy<Key>,
|
keySerializer: DeserializationStrategy<Key>,
|
||||||
valueSerializer: DeserializationStrategy<Value>,
|
valueSerializer: DeserializationStrategy<Value>,
|
||||||
serialFormat: StringFormat
|
serialFormat: StringFormat
|
||||||
) = configureKeyValuesRepoRoutes(
|
) = configureKeyValuesRepoRoutes(
|
||||||
originalRepo,
|
originalRepo,
|
||||||
{
|
{
|
||||||
serialFormat.decodeFromString(idsSerializer, it.decodeURLQueryComponent())
|
serialFormat.decodeFromString(keySerializer, it.decodeURLQueryComponent())
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
serialFormat.decodeFromString(valueSerializer, 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(
|
inline fun <reified Key : Any, reified Value : Any> Route.configureKeyValuesRepoRoutes(
|
||||||
originalRepo: KeyValuesRepo<Key, Value>,
|
originalRepo: KeyValuesRepo<Key, Value>,
|
||||||
idsSerializer: DeserializationStrategy<Key>,
|
keySerializer: DeserializationStrategy<Key>,
|
||||||
valueSerializer: DeserializationStrategy<Value>,
|
valueSerializer: DeserializationStrategy<Value>,
|
||||||
serialFormat: BinaryFormat
|
serialFormat: BinaryFormat
|
||||||
) = configureKeyValuesRepoRoutes(
|
) = configureKeyValuesRepoRoutes(
|
||||||
originalRepo,
|
originalRepo,
|
||||||
{
|
{
|
||||||
serialFormat.decodeHex(idsSerializer, it)
|
serialFormat.decodeHex(keySerializer, it)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
serialFormat.decodeHex(valueSerializer, it)
|
serialFormat.decodeHex(valueSerializer, it)
|
||||||
|
@ -7,6 +7,7 @@ import dev.inmo.micro_utils.pagination.extractPagination
|
|||||||
import dev.inmo.micro_utils.repos.ReadKeyValuesRepo
|
import dev.inmo.micro_utils.repos.ReadKeyValuesRepo
|
||||||
import dev.inmo.micro_utils.repos.ktor.common.*
|
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.containsRoute
|
||||||
|
import dev.inmo.micro_utils.repos.ktor.common.countRoute
|
||||||
import dev.inmo.micro_utils.repos.ktor.common.one_to_many.*
|
import dev.inmo.micro_utils.repos.ktor.common.one_to_many.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.server.application.call
|
import io.ktor.server.application.call
|
||||||
@ -20,14 +21,14 @@ import kotlinx.serialization.*
|
|||||||
@OptIn(InternalAPI::class)
|
@OptIn(InternalAPI::class)
|
||||||
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
||||||
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
||||||
noinline idDeserializer: suspend (String) -> Key,
|
noinline keyDeserializer: suspend (String) -> Key,
|
||||||
noinline valueDeserializer: suspend (String) -> Value
|
noinline valueDeserializer: suspend (String) -> Value
|
||||||
) {
|
) {
|
||||||
val paginationWithValuesTypeInfo = typeInfo<PaginationResult<Value>>()
|
val paginationWithValuesTypeInfo = typeInfo<PaginationResult<Value>>()
|
||||||
val paginationWithKeysTypeInfo = typeInfo<PaginationResult<Key>>()
|
val paginationWithKeysTypeInfo = typeInfo<PaginationResult<Key>>()
|
||||||
|
|
||||||
get(getRoute) {
|
get(getRoute) {
|
||||||
val key = idDeserializer(
|
val key = keyDeserializer(
|
||||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||||
)
|
)
|
||||||
val pagination = call.request.queryParameters.extractPagination
|
val pagination = call.request.queryParameters.extractPagination
|
||||||
@ -53,7 +54,7 @@ inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes (
|
|||||||
}
|
}
|
||||||
|
|
||||||
get(containsRoute) {
|
get(containsRoute) {
|
||||||
val key = idDeserializer(
|
val key = keyDeserializer(
|
||||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||||
)
|
)
|
||||||
val value = call.getQueryParameter(valueParameterName) ?.let {
|
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 {
|
val id = call.getQueryParameter(keyParameterName) ?.let {
|
||||||
idDeserializer(it)
|
keyDeserializer(it)
|
||||||
}
|
}
|
||||||
call.respond(
|
call.respond(
|
||||||
id ?.let { originalRepo.count(it) } ?: originalRepo.count()
|
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(
|
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes(
|
||||||
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
||||||
idsSerializer: DeserializationStrategy<Key>,
|
keySerializer: DeserializationStrategy<Key>,
|
||||||
valueSerializer: DeserializationStrategy<Value>,
|
valueSerializer: DeserializationStrategy<Value>,
|
||||||
serialFormat: StringFormat
|
serialFormat: StringFormat
|
||||||
) = configureReadKeyValuesRepoRoutes(
|
) = configureReadKeyValuesRepoRoutes(
|
||||||
originalRepo,
|
originalRepo,
|
||||||
{
|
{
|
||||||
serialFormat.decodeFromString(idsSerializer, it.decodeURLQueryComponent())
|
serialFormat.decodeFromString(keySerializer, it.decodeURLQueryComponent())
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
serialFormat.decodeFromString(valueSerializer, 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(
|
inline fun <reified Key, reified Value> Route.configureReadKeyValuesRepoRoutes(
|
||||||
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
originalRepo: ReadKeyValuesRepo<Key, Value>,
|
||||||
idsSerializer: DeserializationStrategy<Key>,
|
keySerializer: DeserializationStrategy<Key>,
|
||||||
valueSerializer: DeserializationStrategy<Value>,
|
valueSerializer: DeserializationStrategy<Value>,
|
||||||
serialFormat: BinaryFormat
|
serialFormat: BinaryFormat
|
||||||
) = configureReadKeyValuesRepoRoutes(
|
) = configureReadKeyValuesRepoRoutes(
|
||||||
originalRepo,
|
originalRepo,
|
||||||
{
|
{
|
||||||
serialFormat.decodeHex(idsSerializer, it)
|
serialFormat.decodeHex(keySerializer, it)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
serialFormat.decodeHex(valueSerializer, it)
|
serialFormat.decodeHex(valueSerializer, it)
|
||||||
|
Loading…
Reference in New Issue
Block a user