Test openapi schema of /follow/*

This commit is contained in:
2021-03-20 02:43:53 +01:00
parent 46cc61fc25
commit 0e5943864d
3 changed files with 87 additions and 2 deletions

View File

@@ -59,7 +59,7 @@ sealed class FollowRepository<IN : TargetRef, OUT : TargetRef>(override var requ
open fun findFollow( open fun findFollow(
citizen: CitizenI, citizen: CitizenI,
target: TargetRef target: TargetRef
): FollowForView<OUT>? = ): FollowForView<TargetRef>? =
requester requester
.getFunction("find_follow") .getFunction("find_follow")
.selectOne( .selectOne(

View File

@@ -1,5 +1,6 @@
package fr.dcproject.component.follow.routes.article package fr.dcproject.component.follow.routes.article
import fr.dcproject.common.response.toOutput
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.database.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
@@ -13,6 +14,7 @@ import io.ktor.locations.Location
import io.ktor.locations.get import io.ktor.locations.get
import io.ktor.response.respond import io.ktor.response.respond
import io.ktor.routing.Route import io.ktor.routing.Route
import org.joda.time.DateTime
import java.util.UUID import java.util.UUID
@KtorExperimentalLocationsAPI @KtorExperimentalLocationsAPI
@@ -26,7 +28,22 @@ object GetFollowArticle {
get<ArticleFollowRequest> { get<ArticleFollowRequest> {
repo.findFollow(citizen, it.article)?.let { follow -> repo.findFollow(citizen, it.article)?.let { follow ->
ac.assert { canView(follow, citizenOrNull) } ac.assert { canView(follow, citizenOrNull) }
call.respond(follow) call.respond(
HttpStatusCode.OK,
follow.let { f ->
object {
val id: UUID = f.id
val createdBy: Any = f.createdBy.toOutput()
val target: Any = f.target.let { t ->
object {
val id: UUID = t.id
val reference: String = f.target.reference
}
}
val createdAt: DateTime = f.createdAt
}
}
)
} ?: call.respond(HttpStatusCode.NoContent) } ?: call.respond(HttpStatusCode.NoContent)
} }
} }

View File

@@ -729,6 +729,48 @@ paths:
schema: schema:
$ref: '#/components/schemas/ConstitutionResponse' $ref: '#/components/schemas/ConstitutionResponse'
/articles/{article}/follows:
parameters:
- $ref: '#/components/parameters/article'
get:
security:
- JWTAuth: [ ]
summary: Return Follow or nothing if you not follow
tags:
- follow
- article
responses:
200:
description: Return your follow
content:
application/json:
schema:
$ref: '#/components/schemas/FollowResponse'
404:
description: You not follow this article
post:
security:
- JWTAuth: [ ]
summary: Follow one article
tags:
- follow
- article
responses:
201:
description: Return only http status 201 on success
delete:
security:
- JWTAuth: [ ]
summary: Unfollow one article
tags:
- follow
- article
responses:
204:
description: Return only http status 204 on success
401:
$ref: '#/components/responses/401'
components: components:
parameters: parameters:
page: page:
@@ -1343,6 +1385,32 @@ components:
type: string type: string
format: 'date-time' format: 'date-time'
FollowResponse:
additionalProperties: false
required:
- id
- createdBy
- createdAt
- target
properties:
id:
$ref: '#/components/schemas/UUID'
createdBy:
$ref: '#/components/schemas/CitizenCreator'
createdAt:
type: string
format: 'date-time'
target:
required:
- id
- reference
additionalProperties: false
properties:
id:
$ref: '#/components/schemas/UUID'
reference:
type: string
securitySchemes: securitySchemes:
JWTAuth: JWTAuth:
type: http type: http