add kv swagger template

This commit is contained in:
InsanusMokrassar 2022-06-04 16:47:22 +06:00
parent 8fc1ff1d59
commit 992b283597
4 changed files with 203 additions and 14 deletions

View File

@ -5,6 +5,7 @@ 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)

View File

@ -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
View 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"

View File

@ -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))