diff --git a/src/main/kotlin/fr/dcproject/Application.kt b/src/main/kotlin/fr/dcproject/Application.kt index 6ed335d..eb37ef9 100644 --- a/src/main/kotlin/fr/dcproject/Application.kt +++ b/src/main/kotlin/fr/dcproject/Application.kt @@ -78,7 +78,8 @@ fun Application.module(env: Env = PROD) { convert
{ decode { values, _ -> values.singleOrNull()?.let { - get().findById(UUID.fromString(it)) ?: throw InternalError("Article $values not found") + get().findById(UUID.fromString(it)) + ?: throw InternalError("Article $values not found") } ?: throw NotFoundException("Article $values not found") } } @@ -157,7 +158,7 @@ fun Application.module(env: Env = PROD) { } install(Routing) { -// trace { application.log.trace(it.buildText()) } + // trace { application.log.trace(it.buildText()) } authenticate(optional = true) { article(get()) auth(get(), get(), get()) diff --git a/src/main/kotlin/fr/dcproject/ApplicationContext.kt b/src/main/kotlin/fr/dcproject/ApplicationContext.kt index 8d10d1c..349ce2d 100644 --- a/src/main/kotlin/fr/dcproject/ApplicationContext.kt +++ b/src/main/kotlin/fr/dcproject/ApplicationContext.kt @@ -17,7 +17,8 @@ val ApplicationCall.citizen: CitizenEntity get() = attributes.computeIfAbsent(citizenAttributeKey) { runBlocking { val user = authentication.principal() ?: throw ForbiddenException() - GlobalContext.get().koin.get().findByUser(user) ?: throw ForbiddenException("Citizen not found for this user id \"${user.id}\"") + GlobalContext.get().koin.get().findByUser(user) + ?: throw ForbiddenException("Citizen not found for this user id \"${user.id}\"") } } diff --git a/src/main/kotlin/fr/dcproject/Module.kt b/src/main/kotlin/fr/dcproject/Module.kt index 77bec4e..b73234b 100644 --- a/src/main/kotlin/fr/dcproject/Module.kt +++ b/src/main/kotlin/fr/dcproject/Module.kt @@ -27,12 +27,22 @@ val Module = module { single { config } - single { Connection(host = config.host, port = config.port, database = config.database, username = config.username, password = config.password) } + single { + Connection( + host = config.host, + port = config.port, + database = config.database, + username = config.username, + password = config.password + ) + } - single { Requester.RequesterFactory( - connection = get(), - functionsDirectory = config.sqlFiles.resolve("functions") - ).createRequester() } + single { + Requester.RequesterFactory( + connection = get(), + functionsDirectory = config.sqlFiles.resolve("functions") + ).createRequester() + } // TODO: create generic declaration single { UserRepository(get()) } diff --git a/src/main/kotlin/fr/dcproject/entity/Article.kt b/src/main/kotlin/fr/dcproject/entity/Article.kt index ca8346b..8d55a43 100644 --- a/src/main/kotlin/fr/dcproject/entity/Article.kt +++ b/src/main/kotlin/fr/dcproject/entity/Article.kt @@ -1,4 +1,5 @@ package fr.dcproject.entity + import fr.postgresjson.entity.immutable.* import fr.postgresjson.entity.mutable.EntityDeletedAt import fr.postgresjson.entity.mutable.EntityDeletedAtImp @@ -62,6 +63,7 @@ interface ArticleSimpleI : Votable { var title: String } + interface ArticleBasicI : ArticleSimpleI { var anonymous: Boolean diff --git a/src/main/kotlin/fr/dcproject/entity/Follow.kt b/src/main/kotlin/fr/dcproject/entity/Follow.kt index e2d88a6..8b3ea4f 100644 --- a/src/main/kotlin/fr/dcproject/entity/Follow.kt +++ b/src/main/kotlin/fr/dcproject/entity/Follow.kt @@ -1,7 +1,8 @@ package fr.dcproject.entity + import java.util.* -class Follow ( +class Follow( id: UUID = UUID.randomUUID(), override val createdBy: CitizenBasic, target: T diff --git a/src/main/kotlin/fr/dcproject/entity/Vote.kt b/src/main/kotlin/fr/dcproject/entity/Vote.kt index 8b952c8..e026cc3 100644 --- a/src/main/kotlin/fr/dcproject/entity/Vote.kt +++ b/src/main/kotlin/fr/dcproject/entity/Vote.kt @@ -4,7 +4,7 @@ import fr.postgresjson.entity.immutable.EntityUpdatedAt import fr.postgresjson.entity.immutable.EntityUpdatedAtImp import java.util.* -open class Vote ( +open class Vote( id: UUID = UUID.randomUUID(), override val createdBy: CitizenBasic, target: T, diff --git a/src/main/kotlin/fr/dcproject/messages/SsoManager.kt b/src/main/kotlin/fr/dcproject/messages/SsoManager.kt index c950a2b..94e0200 100644 --- a/src/main/kotlin/fr/dcproject/messages/SsoManager.kt +++ b/src/main/kotlin/fr/dcproject/messages/SsoManager.kt @@ -46,5 +46,6 @@ class SsoManager( class EmailNotFound(val email: String) : Exception() { override val message: String = "No Citizen with this email : $email" } + private fun noEmail(email: String): Nothing = throw EmailNotFound(email) } \ No newline at end of file diff --git a/src/main/kotlin/fr/dcproject/repository/Comment.kt b/src/main/kotlin/fr/dcproject/repository/Comment.kt index f5b6b5b..e31d3ee 100644 --- a/src/main/kotlin/fr/dcproject/repository/Comment.kt +++ b/src/main/kotlin/fr/dcproject/repository/Comment.kt @@ -12,7 +12,7 @@ import fr.dcproject.entity.Citizen as CitizenEntity import fr.dcproject.entity.Comment as CommentEntity import fr.dcproject.entity.Constitution as ConstitutionEntity -abstract class Comment (override var requester: Requester) : RepositoryI { +abstract class Comment(override var requester: Requester) : RepositoryI { abstract fun findById(id: UUID): CommentEntity? abstract fun findByCitizen( @@ -36,9 +36,10 @@ abstract class Comment (override var requester: Requester) : Reposi ): Paginated> { return requester.run { getFunction("find_comments_by_parent") - .select(page, limit, - "parent_id" to parentId - ) + .select( + page, limit, + "parent_id" to parentId + ) } } @@ -57,9 +58,10 @@ abstract class Comment (override var requester: Requester) : Reposi ): Paginated> { return requester.run { getFunction("find_comments_by_target") - .select(page, limit, - "target_id" to targetId - ) + .select( + page, limit, + "target_id" to targetId + ) } } @@ -96,7 +98,8 @@ class CommentGeneric(requester: Requester) : Comment(requester) { ): Paginated> { return requester.run { getFunction("find_comments_by_citizen") - .select(page, limit, + .select( + page, limit, "created_by_id" to citizen.id ) } @@ -117,7 +120,8 @@ class CommentArticle(requester: Requester) : Comment(requester) { ): Paginated> { return requester.run { getFunction("find_comments_by_citizen") - .select(page, limit, + .select( + page, limit, "created_by_id" to citizen.id, "reference" to TargetI.getReference(ArticleRef::class) ) @@ -139,7 +143,8 @@ class CommentConstitution(requester: Requester) : Comment(re ): Paginated> { return requester.run { getFunction("find_comments_by_citizen") - .select(page, limit, + .select( + page, limit, "created_by_id" to citizen.id, "reference" to TargetI.getReference(ConstitutionEntity::class) ) diff --git a/src/main/kotlin/fr/dcproject/repository/Follow.kt b/src/main/kotlin/fr/dcproject/repository/Follow.kt index 7b6a0b1..475e70f 100644 --- a/src/main/kotlin/fr/dcproject/repository/Follow.kt +++ b/src/main/kotlin/fr/dcproject/repository/Follow.kt @@ -10,7 +10,7 @@ import fr.dcproject.entity.Article as ArticleEntity import fr.dcproject.entity.Constitution as ConstitutionEntity import fr.dcproject.entity.Follow as FollowEntity -open class Follow (override var requester: Requester) : RepositoryI { +open class Follow(override var requester: Requester) : RepositoryI { open fun findByCitizen( citizen: CitizenI, page: Int = 1, @@ -25,9 +25,10 @@ open class Follow (override var requester: Requester) : RepositoryI ): Paginated> { return requester.run { getFunction("find_follows_by_citizen") - .select(page, limit, - "created_by_id" to citizenId - ) + .select( + page, limit, + "created_by_id" to citizenId + ) } } @@ -60,7 +61,8 @@ class FollowArticle(requester: Requester) : Follow(requester) { ): Paginated> { return requester.run { getFunction("find_follows_article_by_citizen") - .select(page, limit, + .select( + page, limit, "created_by_id" to citizenId ) } @@ -75,7 +77,8 @@ class FollowConstitution(requester: Requester) : Follow(requ ): Paginated> { return requester.run { getFunction("find_follows_constitution_by_citizen") - .select(page, limit, + .select( + page, limit, "created_by_id" to citizenId ) } diff --git a/src/main/kotlin/fr/dcproject/repository/Vote.kt b/src/main/kotlin/fr/dcproject/repository/Vote.kt index 7307cbd..79f0dcf 100644 --- a/src/main/kotlin/fr/dcproject/repository/Vote.kt +++ b/src/main/kotlin/fr/dcproject/repository/Vote.kt @@ -12,7 +12,7 @@ import java.util.* import fr.dcproject.entity.Citizen as CitizenEntity import fr.dcproject.entity.Vote as VoteEntity -open class Vote (override var requester: Requester) : RepositoryI { +open class Vote(override var requester: Requester) : RepositoryI { fun vote(vote: VoteEntity): VoteAggregation { val author = vote.createdBy val anonymous = author.voteAnonymous @@ -36,10 +36,12 @@ open class Vote (override var requester: Requester) : RepositoryI { ): Paginated> { return requester.run { getFunction("find_votes_by_citizen") - .select(page, limit, typeReference, mapOf( - "created_by_id" to citizenId, - "reference" to target - )) + .select( + page, limit, typeReference, mapOf( + "created_by_id" to citizenId, + "reference" to target + ) + ) } } @@ -50,10 +52,12 @@ open class Vote (override var requester: Requester) : RepositoryI { val typeReference = object : TypeReference>>() {} return requester.run { getFunction("find_citizen_votes_by_target_ids") - .select(typeReference, mapOf( - "citizen_id" to citizen.id, - "ids" to targets - )) + .select( + typeReference, mapOf( + "citizen_id" to citizen.id, + "ids" to targets + ) + ) } } } diff --git a/src/main/kotlin/fr/dcproject/routes/Article.kt b/src/main/kotlin/fr/dcproject/routes/Article.kt index 4b66d65..a16b07d 100644 --- a/src/main/kotlin/fr/dcproject/routes/Article.kt +++ b/src/main/kotlin/fr/dcproject/routes/Article.kt @@ -20,22 +20,44 @@ import fr.dcproject.repository.Article as ArticleRepository @KtorExperimentalLocationsAPI object ArticlesPaths { - @Location("/articles") class ArticlesRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: RepositoryI.Direction? = null, val search: String? = null, val createdBy: String? = null) { + @Location("/articles") + class ArticlesRequest( + page: Int = 1, + limit: Int = 50, + val sort: String? = null, + val direction: RepositoryI.Direction? = null, + val search: String? = null, + val createdBy: String? = null + ) { val page: Int = if (page < 1) 1 else page val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit } - @Location("/articles/{article}") class ArticleRequest(val article: ArticleEntity) - @Location("/articles/{article}/versions") class ArticleVersionsRequest(val article: ArticleEntity, page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: RepositoryI.Direction? = null, val search: String? = null) { + + @Location("/articles/{article}") + class ArticleRequest(val article: ArticleEntity) + + @Location("/articles/{article}/versions") + class ArticleVersionsRequest( + val article: ArticleEntity, + page: Int = 1, + limit: Int = 50, + val sort: String? = null, + val direction: RepositoryI.Direction? = null, + val search: String? = null + ) { val page: Int = if (page < 1) 1 else page val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit } - @Location("/articles") class PostArticleRequest + + @Location("/articles") + class PostArticleRequest } @KtorExperimentalLocationsAPI fun Route.article(repo: ArticleRepository) { get { - val articles = repo.find(it.page, it.limit, it.sort, it.direction, it.search, Filter(createdById = it.createdBy)) + val articles = + repo.find(it.page, it.limit, it.sort, it.direction, it.search, Filter(createdById = it.createdBy)) assertCan(VIEW, articles.result) call.respond(articles) } diff --git a/src/main/kotlin/fr/dcproject/routes/Auth.kt b/src/main/kotlin/fr/dcproject/routes/Auth.kt index ad10b76..6ae9466 100644 --- a/src/main/kotlin/fr/dcproject/routes/Auth.kt +++ b/src/main/kotlin/fr/dcproject/routes/Auth.kt @@ -26,9 +26,14 @@ import fr.dcproject.repository.User as UserRepository @KtorExperimentalLocationsAPI object AuthPaths { - @Location("/login") class LoginRequest - @Location("/register") class RegisterRequest - @Location("/sso") class SsoRequest { + @Location("/login") + class LoginRequest + + @Location("/register") + class RegisterRequest + + @Location("/sso") + class SsoRequest { data class Content(val email: String, val url: String) } } @@ -40,7 +45,7 @@ fun Route.auth( citizenRepo: CitizenRepository, ssoManager: SsoManager ) { - post { + post { try { val credentials = call.receive() val user = userRepo.findByCredentials(credentials) ?: throw WrongLoginOrPassword() @@ -52,7 +57,7 @@ fun Route.auth( } } - post { + post { try { val citizen = call.receive() citizen.user.roles = listOf(ROLE_USER) diff --git a/src/main/kotlin/fr/dcproject/routes/Citizen.kt b/src/main/kotlin/fr/dcproject/routes/Citizen.kt index c4644d2..ff43722 100644 --- a/src/main/kotlin/fr/dcproject/routes/Citizen.kt +++ b/src/main/kotlin/fr/dcproject/routes/Citizen.kt @@ -24,13 +24,26 @@ import fr.dcproject.repository.User as UserRepository @KtorExperimentalLocationsAPI object CitizenPaths { - @Location("/citizens") class CitizensRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: Direction? = null, val search: String? = null) { + @Location("/citizens") + class CitizensRequest( + page: Int = 1, + limit: Int = 50, + val sort: String? = null, + val direction: Direction? = null, + val search: String? = null + ) { val page: Int = if (page < 1) 1 else page val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit } - @Location("/citizens/{citizen}") class CitizenRequest(val citizen: Citizen) - @Location("/citizens/current") class CurrentCitizenRequest - @Location("/citizens/{citizen}/password/change") class ChangePasswordCitizenRequest(val citizen: Citizen) { + + @Location("/citizens/{citizen}") + class CitizenRequest(val citizen: Citizen) + + @Location("/citizens/current") + class CurrentCitizenRequest + + @Location("/citizens/{citizen}/password/change") + class ChangePasswordCitizenRequest(val citizen: Citizen) { data class Content(val password: String) } } diff --git a/src/main/kotlin/fr/dcproject/routes/Comment.kt b/src/main/kotlin/fr/dcproject/routes/Comment.kt index beeaefb..3c8d246 100644 --- a/src/main/kotlin/fr/dcproject/routes/Comment.kt +++ b/src/main/kotlin/fr/dcproject/routes/Comment.kt @@ -20,7 +20,8 @@ import fr.dcproject.repository.CommentGeneric as CommentRepository @KtorExperimentalLocationsAPI object CommentPaths { // TODO: change UUID by entity converter - @Location("/comments/{comment}") class CommentRequest(val comment: UUID) + @Location("/comments/{comment}") + class CommentRequest(val comment: UUID) @Location("/comments/{comment}/children") class CommentChildrenRequest( diff --git a/src/main/kotlin/fr/dcproject/routes/CommentArticle.kt b/src/main/kotlin/fr/dcproject/routes/CommentArticle.kt index 8dc12d9..befb1d2 100644 --- a/src/main/kotlin/fr/dcproject/routes/CommentArticle.kt +++ b/src/main/kotlin/fr/dcproject/routes/CommentArticle.kt @@ -31,7 +31,9 @@ object CommentArticlePaths { val page: Int = if (page < 1) 1 else page val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit } - @Location("/citizens/{citizen}/comments/articles") class CitizenCommentArticleRequest(val citizen: Citizen) + + @Location("/citizens/{citizen}/comments/articles") + class CitizenCommentArticleRequest(val citizen: Citizen) } @KtorExperimentalLocationsAPI diff --git a/src/main/kotlin/fr/dcproject/routes/CommentConstitution.kt b/src/main/kotlin/fr/dcproject/routes/CommentConstitution.kt index e53a716..6890aae 100644 --- a/src/main/kotlin/fr/dcproject/routes/CommentConstitution.kt +++ b/src/main/kotlin/fr/dcproject/routes/CommentConstitution.kt @@ -20,8 +20,11 @@ import fr.dcproject.repository.CommentConstitution as CommentConstitutionReposit @KtorExperimentalLocationsAPI object CommentConstitutionPaths { - @Location("/constitutions/{constitution}/comments") class ConstitutionCommentRequest(val constitution: ConstitutionEntity) - @Location("/citizens/{citizen}/comments/constitutions") class CitizenCommentConstitutionRequest(val citizen: Citizen) + @Location("/constitutions/{constitution}/comments") + class ConstitutionCommentRequest(val constitution: ConstitutionEntity) + + @Location("/citizens/{citizen}/comments/constitutions") + class CitizenCommentConstitutionRequest(val citizen: Citizen) } @KtorExperimentalLocationsAPI diff --git a/src/main/kotlin/fr/dcproject/routes/Constitution.kt b/src/main/kotlin/fr/dcproject/routes/Constitution.kt index 3996a03..2204430 100644 --- a/src/main/kotlin/fr/dcproject/routes/Constitution.kt +++ b/src/main/kotlin/fr/dcproject/routes/Constitution.kt @@ -19,13 +19,26 @@ import fr.dcproject.repository.Constitution as ConstitutionRepository @KtorExperimentalLocationsAPI object ConstitutionPaths { - @Location("/constitutions") class ConstitutionsRequest(page: Int = 1, limit: Int = 50, val sort: String? = null, val direction: RepositoryI.Direction? = null, val search: String? = null) { + @Location("/constitutions") + class ConstitutionsRequest( + page: Int = 1, + limit: Int = 50, + val sort: String? = null, + val direction: RepositoryI.Direction? = null, + val search: String? = null + ) { val page: Int = if (page < 1) 1 else page val limit: Int = if (limit > 50) 50 else if (limit < 1) 1 else limit } - @Location("/constitutions/{constitution}") class ConstitutionRequest(val constitution: ConstitutionEntity) - @Location("/constitutions/{constitution}/follow") class ConstitutionFollowRequest(val constitution: ConstitutionEntity) - @Location("/constitutions") class PostConstitutionRequest + + @Location("/constitutions/{constitution}") + class ConstitutionRequest(val constitution: ConstitutionEntity) + + @Location("/constitutions/{constitution}/follow") + class ConstitutionFollowRequest(val constitution: ConstitutionEntity) + + @Location("/constitutions") + class PostConstitutionRequest } @KtorExperimentalLocationsAPI diff --git a/src/main/kotlin/fr/dcproject/routes/FollowArticle.kt b/src/main/kotlin/fr/dcproject/routes/FollowArticle.kt index 3aed049..90675b3 100644 --- a/src/main/kotlin/fr/dcproject/routes/FollowArticle.kt +++ b/src/main/kotlin/fr/dcproject/routes/FollowArticle.kt @@ -15,8 +15,11 @@ import fr.dcproject.repository.FollowArticle as FollowArticleRepository @KtorExperimentalLocationsAPI object FollowArticlePaths { - @Location("/articles/{article}/follows") class ArticleFollowRequest(val article: ArticleEntity) - @Location("/citizens/{citizen}/follows/articles") class CitizenFollowArticleRequest(val citizen: Citizen) + @Location("/articles/{article}/follows") + class ArticleFollowRequest(val article: ArticleEntity) + + @Location("/citizens/{citizen}/follows/articles") + class CitizenFollowArticleRequest(val citizen: Citizen) } @KtorExperimentalLocationsAPI diff --git a/src/main/kotlin/fr/dcproject/routes/FollowConstitution.kt b/src/main/kotlin/fr/dcproject/routes/FollowConstitution.kt index 68bd7d0..dcde0e8 100644 --- a/src/main/kotlin/fr/dcproject/routes/FollowConstitution.kt +++ b/src/main/kotlin/fr/dcproject/routes/FollowConstitution.kt @@ -15,8 +15,11 @@ import fr.dcproject.repository.FollowConstitution as FollowConstitutionRepositor @KtorExperimentalLocationsAPI object FollowConstitutionPaths { - @Location("/constitutions/{constitution}/follow") class ConstitutionFollowRequest(val constitution: ConstitutionEntity) - @Location("/citizens/{citizen}/follows/constitutions") class CitizenFollowConstitutionRequest(val citizen: Citizen) + @Location("/constitutions/{constitution}/follow") + class ConstitutionFollowRequest(val constitution: ConstitutionEntity) + + @Location("/citizens/{citizen}/follows/constitutions") + class CitizenFollowConstitutionRequest(val citizen: Citizen) } @KtorExperimentalLocationsAPI diff --git a/src/main/kotlin/fr/dcproject/routes/VoteConstitution.kt b/src/main/kotlin/fr/dcproject/routes/VoteConstitution.kt index 00fe66f..fde707d 100644 --- a/src/main/kotlin/fr/dcproject/routes/VoteConstitution.kt +++ b/src/main/kotlin/fr/dcproject/routes/VoteConstitution.kt @@ -19,10 +19,13 @@ import fr.dcproject.repository.VoteConstitution as VoteConstitutionRepository @KtorExperimentalLocationsAPI object VoteConstitutionPaths { - @Location("/constitutions/{constitution}/vote") class ConstitutionVoteRequest(val constitution: ConstitutionEntity) { + @Location("/constitutions/{constitution}/vote") + class ConstitutionVoteRequest(val constitution: ConstitutionEntity) { data class Content(var note: Int) } - @Location("/citizens/{citizen}/votes/constitutions") class CitizenVoteConstitutionRequest(val citizen: Citizen) + + @Location("/citizens/{citizen}/votes/constitutions") + class CitizenVoteConstitutionRequest(val citizen: Citizen) } @KtorExperimentalLocationsAPI diff --git a/src/main/kotlin/fr/dcproject/security/voter/CitizenVoter.kt b/src/main/kotlin/fr/dcproject/security/voter/CitizenVoter.kt index 1f8e89f..fb38671 100644 --- a/src/main/kotlin/fr/dcproject/security/voter/CitizenVoter.kt +++ b/src/main/kotlin/fr/dcproject/security/voter/CitizenVoter.kt @@ -50,7 +50,8 @@ class CitizenVoter : Voter { if (action == Action.UPDATE && user is UserI && subject is CitizenBasicI && - subject.user.id == user.id) { + subject.user.id == user.id + ) { return Vote.GRANTED } diff --git a/src/main/kotlin/fr/dcproject/security/voter/VoteVoter.kt b/src/main/kotlin/fr/dcproject/security/voter/VoteVoter.kt index 69b0712..7f9bcf9 100644 --- a/src/main/kotlin/fr/dcproject/security/voter/VoteVoter.kt +++ b/src/main/kotlin/fr/dcproject/security/voter/VoteVoter.kt @@ -11,9 +11,9 @@ class VoteVoter : Voter { override fun supports(action: ActionI, call: ApplicationCall, subject: Any?): Boolean { return action is Action && ( - subject is VoteEntity<*>? || - subject is List<*> - ) + subject is VoteEntity<*>? || + subject is List<*> + ) } override fun vote(action: ActionI, call: ApplicationCall, subject: Any?): Vote { diff --git a/src/main/kotlin/fr/dcproject/security/voter/Voter.kt b/src/main/kotlin/fr/dcproject/security/voter/Voter.kt index c25c67f..c49a8b8 100644 --- a/src/main/kotlin/fr/dcproject/security/voter/Voter.kt +++ b/src/main/kotlin/fr/dcproject/security/voter/Voter.kt @@ -78,7 +78,10 @@ class AuthorizationVoter { override val key = AttributeKey("Voter") @KtorExperimentalAPI - override fun install(pipeline: ApplicationCallPipeline, configure: Configuration.() -> Unit): AuthorizationVoter { + override fun install( + pipeline: ApplicationCallPipeline, + configure: Configuration.() -> Unit + ): AuthorizationVoter { val configuration = Configuration().apply(configure) pipeline.intercept(ApplicationCallPipeline.Features) { diff --git a/src/main/resources/openApi.yaml b/src/main/resources/openApi.yaml index f92524d..0adc48c 100644 --- a/src/main/resources/openApi.yaml +++ b/src/main/resources/openApi.yaml @@ -1009,7 +1009,7 @@ components: - $ref: '#/components/schemas/Votable' ArticleRequest: - $ref: '#/components/schemas/ArticleBase' + $ref: '#/components/schemas/ArticleBase' ConstitutionBase: type: object