diff --git a/src/main/kotlin/Application.kt b/src/main/kotlin/Application.kt index 1bd0367..a00759c 100644 --- a/src/main/kotlin/Application.kt +++ b/src/main/kotlin/Application.kt @@ -16,7 +16,11 @@ import fr.dcproject.component.citizen.routes.changeMyPassword import fr.dcproject.component.citizen.routes.findCitizen import fr.dcproject.component.citizen.routes.getCurrentCitizen import fr.dcproject.component.citizen.routes.getOneCitizen -import fr.dcproject.component.comment.routes.comment +import fr.dcproject.component.comment.generic.CommentVoter +import fr.dcproject.component.comment.generic.routes.createCommentChildren +import fr.dcproject.component.comment.generic.routes.editComment +import fr.dcproject.component.comment.generic.routes.getChildrenComments +import fr.dcproject.component.comment.generic.routes.getOneComment import fr.dcproject.elasticsearch.configElasticIndexes import fr.dcproject.entity.User import fr.dcproject.event.EventNotification @@ -165,12 +169,16 @@ fun Application.module(env: Env = PROD) { getOneCitizen(get()) getCurrentCitizen(get()) changeMyPassword(get(), get()) - + /* Comment */ + editComment(get()) + getOneComment(get()) + createCommentChildren(get()) + getChildrenComments(get()) + /* TODO */ auth(get(), get(), get()) constitution(get()) followArticle(get()) followConstitution(get()) - comment(get()) commentArticle(get()) commentConstitution(get()) voteArticle(get(), get(), get()) diff --git a/src/main/kotlin/Converters.kt b/src/main/kotlin/Converters.kt index aa5fc44..d78ce7c 100644 --- a/src/main/kotlin/Converters.kt +++ b/src/main/kotlin/Converters.kt @@ -6,7 +6,7 @@ import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenRef -import fr.dcproject.entity.CommentRef +import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.entity.Constitution import fr.dcproject.entity.ConstitutionRef import fr.dcproject.entity.WorkgroupRef diff --git a/src/main/kotlin/KoinModule.kt b/src/main/kotlin/KoinModule.kt index 51f8eb2..c030e27 100644 --- a/src/main/kotlin/KoinModule.kt +++ b/src/main/kotlin/KoinModule.kt @@ -13,10 +13,12 @@ import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.article.ArticleVoter import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenVoter +import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.event.publisher.Publisher import fr.dcproject.messages.Mailer import fr.dcproject.messages.NotificationEmailSender import fr.dcproject.messages.SsoManager +import fr.dcproject.repository.CommentConstitutionRepository import fr.postgresjson.connexion.Connection import fr.postgresjson.connexion.Requester import fr.postgresjson.migration.Migrations @@ -29,9 +31,7 @@ import org.apache.http.HttpHost import org.elasticsearch.client.RestClient import org.koin.core.qualifier.named import org.koin.dsl.module -import fr.dcproject.repository.CommentArticle as CommentArticleRepository -import fr.dcproject.repository.CommentConstitution as CommentConstitutionRepository -import fr.dcproject.repository.CommentGeneric as CommentGenericRepository +import fr.dcproject.component.comment.generic.CommentRepository as CommentGenericRepository import fr.dcproject.repository.Constitution as ConstitutionRepository import fr.dcproject.repository.FollowArticle as FollowArticleRepository import fr.dcproject.repository.FollowConstitution as FollowConstitutionRepository diff --git a/src/main/kotlin/component/comment/article/CommentArticleRepository.kt b/src/main/kotlin/component/comment/article/CommentArticleRepository.kt new file mode 100644 index 0000000..27ff7f9 --- /dev/null +++ b/src/main/kotlin/component/comment/article/CommentArticleRepository.kt @@ -0,0 +1,59 @@ +package fr.dcproject.component.comment.article + +import fr.dcproject.component.article.ArticleForView +import fr.dcproject.component.article.ArticleRef +import fr.dcproject.component.citizen.CitizenI +import fr.dcproject.component.citizen.CitizenRef +import fr.dcproject.component.comment.generic.CommentForView +import fr.dcproject.component.comment.generic.CommentRepositoryAbs +import fr.dcproject.entity.TargetI +import fr.postgresjson.connexion.Paginated +import fr.postgresjson.connexion.Requester +import fr.postgresjson.entity.UuidEntityI +import java.util.* + +class CommentArticleRepository(requester: Requester) : CommentRepositoryAbs(requester) { + override fun findById(id: UUID): CommentForView? { + return requester + .getFunction("find_comment_by_id") + .selectOne(mapOf("id" to id)) + } + + override fun findByCitizen( + citizen: CitizenI, + page: Int, + limit: Int + ): Paginated> { + return requester.run { + getFunction("find_comments_by_citizen") + .select( + page, limit, + "created_by_id" to citizen.id, + "reference" to TargetI.getReference(ArticleRef::class) + ) + } + } + + override fun findByTarget( + target: UuidEntityI, + page: Int, + limit: Int, + sort: Sort + ): Paginated> = requester + .getFunction("find_comments_by_target") + .select( + page, limit, + "target_id" to target.id, + "sort" to sort.sql + ) + + enum class Sort(val sql: String) { + CREATED_AT("created_at"), VOTES("votes"); + + companion object { + fun fromString(string: String): Sort? { + return values().firstOrNull { it.sql == string } + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/entity/Comment.kt b/src/main/kotlin/component/comment/generic/Comment.kt similarity index 95% rename from src/main/kotlin/entity/Comment.kt rename to src/main/kotlin/component/comment/generic/Comment.kt index 793bf32..3d0c929 100644 --- a/src/main/kotlin/entity/Comment.kt +++ b/src/main/kotlin/component/comment/generic/Comment.kt @@ -1,6 +1,8 @@ -package fr.dcproject.entity +package fr.dcproject.component.comment.generic import fr.dcproject.component.citizen.CitizenRef +import fr.dcproject.entity.* +import fr.dcproject.entity.EntityI import fr.postgresjson.entity.* import org.joda.time.DateTime import java.util.* diff --git a/src/main/kotlin/repository/Comment.kt b/src/main/kotlin/component/comment/generic/CommentRepository.kt similarity index 51% rename from src/main/kotlin/repository/Comment.kt rename to src/main/kotlin/component/comment/generic/CommentRepository.kt index 7d44867..00104d9 100644 --- a/src/main/kotlin/repository/Comment.kt +++ b/src/main/kotlin/component/comment/generic/CommentRepository.kt @@ -1,17 +1,17 @@ -package fr.dcproject.repository +package fr.dcproject.component.comment.generic -import fr.dcproject.component.article.ArticleForView -import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRef -import fr.dcproject.entity.* +import fr.dcproject.component.comment.article.CommentArticleRepository +import fr.dcproject.entity.TargetI +import fr.dcproject.entity.TargetRef import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.entity.UuidEntityI import fr.postgresjson.repository.RepositoryI import java.util.* -abstract class Comment(override var requester: Requester) : RepositoryI { +abstract class CommentRepositoryAbs(override var requester: Requester) : RepositoryI { abstract fun findById(id: UUID): CommentForView? abstract fun findByCitizen( @@ -46,7 +46,7 @@ abstract class Comment(override var requester: Requester) : Reposit target: UuidEntityI, page: Int = 1, limit: Int = 50, - sort: CommentArticle.Sort = CommentArticle.Sort.CREATED_AT + sort: CommentArticleRepository.Sort = CommentArticleRepository.Sort.CREATED_AT ): Paginated> { return findByTarget(target.id, page, limit, sort) } @@ -55,7 +55,7 @@ abstract class Comment(override var requester: Requester) : Reposit targetId: UUID, page: Int = 1, limit: Int = 50, - sort: CommentArticle.Sort = CommentArticle.Sort.CREATED_AT + sort: CommentArticleRepository.Sort = CommentArticleRepository.Sort.CREATED_AT ): Paginated> { return requester.run { getFunction("find_comments_by_target") @@ -86,7 +86,7 @@ abstract class Comment(override var requester: Requester) : Reposit } } -class CommentGeneric(requester: Requester) : Comment(requester) { +class CommentRepository(requester: Requester) : CommentRepositoryAbs(requester) { override fun findById(id: UUID): CommentForView? { return requester .getFunction("find_comment_by_id") @@ -121,88 +121,3 @@ class CommentGeneric(requester: Requester) : Comment(requester) { } } } - -class CommentArticle(requester: Requester) : Comment(requester) { - override fun findById(id: UUID): CommentForView? { - return requester - .getFunction("find_comment_by_id") - .selectOne(mapOf("id" to id)) - } - - override fun findByCitizen( - citizen: CitizenI, - page: Int, - limit: Int - ): Paginated> { - return requester.run { - getFunction("find_comments_by_citizen") - .select( - page, limit, - "created_by_id" to citizen.id, - "reference" to TargetI.getReference(ArticleRef::class) - ) - } - } - - override fun findByTarget( - target: UuidEntityI, - page: Int, - limit: Int, - sort: Sort - ): Paginated> = requester - .getFunction("find_comments_by_target") - .select( - page, limit, - "target_id" to target.id, - "sort" to sort.sql - ) - - enum class Sort(val sql: String) { - CREATED_AT("created_at"), VOTES("votes"); - - companion object { - fun fromString(string: String): Sort? { - return values().firstOrNull { it.sql == string } - } - } - } -} - -class CommentConstitution(requester: Requester) : Comment(requester) { - override fun findById(id: UUID): CommentForView? { - return requester - .getFunction("find_comment_by_id") - .selectOne(mapOf("id" to id)) - } - - override fun findByCitizen( - citizen: CitizenI, - page: Int, - limit: Int - ): Paginated> { - return requester.run { - getFunction("find_comments_by_citizen") - .select( - page, limit, - "created_by_id" to citizen.id, - "reference" to TargetI.getReference(ConstitutionRef::class) - ) - } - } - - override fun findByTarget( - target: UuidEntityI, - page: Int, - limit: Int, - sort: CommentArticle.Sort - ): Paginated> { - return requester.run { - getFunction("find_comments_by_target") - .select( - page, limit, - "target_id" to target.id, - "sort" to sort.sql - ) - } - } -} diff --git a/src/main/kotlin/voter/CommentVoter.kt b/src/main/kotlin/component/comment/generic/CommentVoter.kt similarity index 93% rename from src/main/kotlin/voter/CommentVoter.kt rename to src/main/kotlin/component/comment/generic/CommentVoter.kt index b913dd0..42d6584 100644 --- a/src/main/kotlin/voter/CommentVoter.kt +++ b/src/main/kotlin/component/comment/generic/CommentVoter.kt @@ -1,9 +1,6 @@ -package fr.dcproject.security.voter +package fr.dcproject.component.comment.generic import fr.dcproject.citizenOrNull -import fr.dcproject.entity.CommentForUpdate -import fr.dcproject.entity.CommentForView -import fr.dcproject.entity.CommentI import fr.dcproject.voter.NoRuleDefinedException import fr.dcproject.voter.NoSubjectDefinedException import fr.ktorVoter.* diff --git a/src/main/kotlin/component/comment/generic/routes/CreateCommentChildrenRequest.kt b/src/main/kotlin/component/comment/generic/routes/CreateCommentChildrenRequest.kt new file mode 100644 index 0000000..ca7101e --- /dev/null +++ b/src/main/kotlin/component/comment/generic/routes/CreateCommentChildrenRequest.kt @@ -0,0 +1,40 @@ +package fr.dcproject.component.comment.generic.routes + +import fr.dcproject.citizen +import fr.dcproject.component.comment.generic.CommentForUpdate +import fr.dcproject.component.comment.generic.CommentRef +import fr.dcproject.component.comment.generic.CommentRepository +import fr.dcproject.component.comment.generic.CommentVoter +import fr.ktorVoter.assertCan +import io.ktor.application.* +import io.ktor.features.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.request.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* + +@KtorExperimentalLocationsAPI +@Location("/comments/{comment}/children") +class CreateCommentChildrenRequest(val comment: CommentRef) { + class Input(val content: String) +} + +@KtorExperimentalAPI +@KtorExperimentalLocationsAPI +fun Route.createCommentChildren(repo: CommentRepository) { + post { + val parent = repo.findById(it.comment.id) ?: throw NotFoundException("Comment not found") + val newComment = CommentForUpdate( + content = call.receive().content, + createdBy = citizen, + parent = parent + ) + + assertCan(CommentVoter.Action.CREATE, newComment) + repo.comment(newComment) + + call.respond(HttpStatusCode.Created, newComment) + } +} diff --git a/src/main/kotlin/component/comment/generic/routes/EditComment.kt b/src/main/kotlin/component/comment/generic/routes/EditComment.kt new file mode 100644 index 0000000..42d0150 --- /dev/null +++ b/src/main/kotlin/component/comment/generic/routes/EditComment.kt @@ -0,0 +1,31 @@ +package fr.dcproject.component.comment.generic.routes + +import fr.dcproject.component.comment.generic.CommentRef +import fr.dcproject.component.comment.generic.CommentRepository +import fr.dcproject.component.comment.generic.CommentVoter +import fr.ktorVoter.assertCan +import io.ktor.application.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.request.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* + +@KtorExperimentalLocationsAPI +@Location("/comments/{comment}") +class EditCommentRequest(val comment: CommentRef) + +@KtorExperimentalAPI +@KtorExperimentalLocationsAPI +fun Route.editComment(repo: CommentRepository) { + put { + val comment = repo.findById(it.comment.id)!! + assertCan(CommentVoter.Action.UPDATE, comment) + + comment.content = call.receiveText() + repo.edit(comment) + + call.respond(HttpStatusCode.OK, comment) + } +} \ No newline at end of file diff --git a/src/main/kotlin/component/comment/generic/routes/GetCommentChildrenRequest.kt b/src/main/kotlin/component/comment/generic/routes/GetCommentChildrenRequest.kt new file mode 100644 index 0000000..78e1ac7 --- /dev/null +++ b/src/main/kotlin/component/comment/generic/routes/GetCommentChildrenRequest.kt @@ -0,0 +1,42 @@ +package fr.dcproject.component.comment.generic.routes + +import fr.dcproject.component.comment.generic.CommentRepository +import fr.dcproject.component.comment.generic.CommentVoter +import fr.ktorVoter.assertCanAll +import io.ktor.application.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* +import java.util.* + +@KtorExperimentalLocationsAPI +@Location("/comments/{comment}/children") +class CommentChildrenRequest( + val comment: UUID, + page: Int = 1, + limit: Int = 50, + 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 +} + + +@KtorExperimentalAPI +@KtorExperimentalLocationsAPI +fun Route.getChildrenComments(repo: CommentRepository) { + get { + val comments = + repo.findByParent( + it.comment, + it.page, + it.limit + ) + + assertCanAll(CommentVoter.Action.VIEW, comments.result) + + call.respond(HttpStatusCode.OK, comments) + } +} \ No newline at end of file diff --git a/src/main/kotlin/component/comment/generic/routes/GetOneComment.kt b/src/main/kotlin/component/comment/generic/routes/GetOneComment.kt new file mode 100644 index 0000000..2cd1da6 --- /dev/null +++ b/src/main/kotlin/component/comment/generic/routes/GetOneComment.kt @@ -0,0 +1,29 @@ +package fr.dcproject.component.comment.generic.routes + +import fr.dcproject.component.comment.generic.CommentRef +import fr.dcproject.component.comment.generic.CommentRepository +import fr.dcproject.component.comment.generic.CommentVoter +import fr.ktorVoter.assertCan +import io.ktor.application.* +import io.ktor.features.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* + +@KtorExperimentalLocationsAPI +@Location("/comments/{comment}") +class CommentRequest(val comment: CommentRef) + + +@KtorExperimentalAPI +@KtorExperimentalLocationsAPI +fun Route.getOneComment(repo: CommentRepository) { + get { + val comment = repo.findById(it.comment.id) ?: NotFoundException("Comment ${it.comment.id} not found") + assertCan(CommentVoter.Action.VIEW, comment) + + call.respond(HttpStatusCode.OK, comment) + } +} \ No newline at end of file diff --git a/src/main/kotlin/entity/Extra.kt b/src/main/kotlin/entity/Extra.kt index 9b5daeb..e7dfa65 100644 --- a/src/main/kotlin/entity/Extra.kt +++ b/src/main/kotlin/entity/Extra.kt @@ -2,6 +2,7 @@ package fr.dcproject.entity import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.citizen.CitizenI +import fr.dcproject.component.comment.generic.CommentRef import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedBy import fr.postgresjson.entity.UuidEntity diff --git a/src/main/kotlin/repository/CommentConstitutionRepository.kt b/src/main/kotlin/repository/CommentConstitutionRepository.kt new file mode 100644 index 0000000..5c00639 --- /dev/null +++ b/src/main/kotlin/repository/CommentConstitutionRepository.kt @@ -0,0 +1,52 @@ +package fr.dcproject.repository + +import fr.dcproject.component.citizen.CitizenI +import fr.dcproject.component.citizen.CitizenRef +import fr.dcproject.component.comment.article.CommentArticleRepository +import fr.dcproject.component.comment.generic.CommentForView +import fr.dcproject.component.comment.generic.CommentRepositoryAbs +import fr.dcproject.entity.ConstitutionRef +import fr.dcproject.entity.TargetI +import fr.postgresjson.connexion.Paginated +import fr.postgresjson.connexion.Requester +import fr.postgresjson.entity.UuidEntityI +import java.util.* + +class CommentConstitutionRepository(requester: Requester) : CommentRepositoryAbs(requester) { + override fun findById(id: UUID): CommentForView? { + return requester + .getFunction("find_comment_by_id") + .selectOne(mapOf("id" to id)) + } + + override fun findByCitizen( + citizen: CitizenI, + page: Int, + limit: Int + ): Paginated> { + return requester.run { + getFunction("find_comments_by_citizen") + .select( + page, limit, + "created_by_id" to citizen.id, + "reference" to TargetI.getReference(ConstitutionRef::class) + ) + } + } + + override fun findByTarget( + target: UuidEntityI, + page: Int, + limit: Int, + sort: CommentArticleRepository.Sort + ): Paginated> { + return requester.run { + getFunction("find_comments_by_target") + .select( + page, limit, + "target_id" to target.id, + "sort" to sort.sql + ) + } + } +} diff --git a/src/main/kotlin/repository/Vote.kt b/src/main/kotlin/repository/Vote.kt index 534329f..d842579 100644 --- a/src/main/kotlin/repository/Vote.kt +++ b/src/main/kotlin/repository/Vote.kt @@ -3,6 +3,7 @@ package fr.dcproject.repository import com.fasterxml.jackson.core.type.TypeReference import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.citizen.CitizenRef +import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.entity.* import fr.dcproject.entity.Constitution import fr.postgresjson.connexion.Paginated diff --git a/src/main/kotlin/routes/Comment.kt b/src/main/kotlin/routes/Comment.kt deleted file mode 100644 index 6172d16..0000000 --- a/src/main/kotlin/routes/Comment.kt +++ /dev/null @@ -1,90 +0,0 @@ -package fr.dcproject.routes - -import fr.dcproject.citizen -import fr.dcproject.entity.CommentForUpdate -import fr.dcproject.entity.CommentRef -import fr.dcproject.routes.CommentPaths.CreateCommentRequest.Content -import fr.dcproject.security.voter.CommentVoter.Action.* -import fr.ktorVoter.assertCan -import fr.ktorVoter.assertCanAll -import io.ktor.application.* -import io.ktor.features.* -import io.ktor.http.* -import io.ktor.locations.* -import io.ktor.request.* -import io.ktor.response.* -import io.ktor.routing.* -import io.ktor.util.* -import java.util.* -import fr.dcproject.repository.CommentGeneric as CommentRepository - -@KtorExperimentalLocationsAPI -object CommentPaths { - @Location("/comments/{comment}") - class CommentRequest(val comment: CommentRef) - - @Location("/comments/{comment}/children") - class CommentChildrenRequest( - val comment: UUID, - page: Int = 1, - limit: Int = 50, - 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("/comments/{comment}/children") - class CreateCommentRequest(val comment: CommentRef) { - class Content(val content: String) - } -} - -@KtorExperimentalAPI -@KtorExperimentalLocationsAPI -fun Route.comment(repo: CommentRepository) { - get { - val comment = repo.findById(it.comment.id)!! - assertCan(VIEW, comment) - - call.respond(HttpStatusCode.OK, comment) - } - - get { - val comments = - repo.findByParent( - it.comment, - it.page, - it.limit - ) - - assertCanAll(VIEW, comments.result) - - call.respond(HttpStatusCode.OK, comments) - } - - post { - val parent = repo.findById(it.comment.id) ?: throw NotFoundException("Comment not found") - val newComment = CommentForUpdate( - content = call.receive().content, - createdBy = citizen, - parent = parent - ) - - assertCan(CREATE, newComment) - repo.comment(newComment) - - call.respond(HttpStatusCode.Created, newComment) - } - - put { - val comment = repo.findById(it.comment.id)!! - assertCan(UPDATE, comment) - - - comment.content = call.receiveText() - repo.edit(comment) - - call.respond(HttpStatusCode.OK, comment) - } -} diff --git a/src/main/kotlin/routes/CommentArticle.kt b/src/main/kotlin/routes/CommentArticle.kt index a916591..3bb9d26 100644 --- a/src/main/kotlin/routes/CommentArticle.kt +++ b/src/main/kotlin/routes/CommentArticle.kt @@ -4,10 +4,11 @@ import fr.dcproject.citizen import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.citizen.Citizen -import fr.dcproject.entity.CommentForUpdate -import fr.dcproject.repository.CommentArticle.Sort -import fr.dcproject.security.voter.CommentVoter.Action.CREATE -import fr.dcproject.security.voter.CommentVoter.Action.VIEW +import fr.dcproject.component.comment.article.CommentArticleRepository +import fr.dcproject.component.comment.article.CommentArticleRepository.Sort +import fr.dcproject.component.comment.generic.CommentForUpdate +import fr.dcproject.component.comment.generic.CommentVoter.Action.CREATE +import fr.dcproject.component.comment.generic.CommentVoter.Action.VIEW import fr.ktorVoter.assertCan import fr.ktorVoter.assertCanAll import io.ktor.application.* @@ -16,7 +17,6 @@ import io.ktor.locations.* import io.ktor.request.* import io.ktor.response.* import io.ktor.routing.* -import fr.dcproject.repository.CommentArticle as CommentArticleRepository @KtorExperimentalLocationsAPI object CommentArticlePaths { diff --git a/src/main/kotlin/routes/CommentConstitution.kt b/src/main/kotlin/routes/CommentConstitution.kt index d47dad4..03e1847 100644 --- a/src/main/kotlin/routes/CommentConstitution.kt +++ b/src/main/kotlin/routes/CommentConstitution.kt @@ -2,10 +2,11 @@ package fr.dcproject.routes import fr.dcproject.citizen import fr.dcproject.component.citizen.Citizen -import fr.dcproject.entity.CommentForUpdate +import fr.dcproject.component.comment.generic.CommentForUpdate +import fr.dcproject.component.comment.generic.CommentVoter.Action.CREATE +import fr.dcproject.component.comment.generic.CommentVoter.Action.VIEW import fr.dcproject.entity.ConstitutionRef -import fr.dcproject.security.voter.CommentVoter.Action.CREATE -import fr.dcproject.security.voter.CommentVoter.Action.VIEW +import fr.dcproject.repository.CommentConstitutionRepository import fr.ktorVoter.assertCan import fr.ktorVoter.assertCanAll import io.ktor.application.* @@ -14,7 +15,6 @@ import io.ktor.locations.* import io.ktor.request.* import io.ktor.response.* import io.ktor.routing.* -import fr.dcproject.repository.CommentConstitution as CommentConstitutionRepository @KtorExperimentalLocationsAPI object CommentConstitutionPaths { diff --git a/src/main/kotlin/routes/VoteArticle.kt b/src/main/kotlin/routes/VoteArticle.kt index 28c3e9c..b7bd6e4 100644 --- a/src/main/kotlin/routes/VoteArticle.kt +++ b/src/main/kotlin/routes/VoteArticle.kt @@ -3,8 +3,8 @@ package fr.dcproject.routes import fr.dcproject.citizen import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.citizen.Citizen +import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.entity.VoteForUpdate -import fr.dcproject.repository.CommentGeneric import fr.dcproject.repository.VoteComment import fr.dcproject.routes.VoteArticlePaths.ArticleVoteRequest import fr.dcproject.routes.VoteArticlePaths.CommentVoteRequest @@ -49,7 +49,7 @@ object VoteArticlePaths { } @KtorExperimentalLocationsAPI -fun Route.voteArticle(repo: VoteArticleRepository, voteCommentRepo: VoteComment, commentRepo: CommentGeneric) { +fun Route.voteArticle(repo: VoteArticleRepository, voteCommentRepo: VoteComment, commentRepo: CommentRepository) { put { val content = call.receive() val vote = VoteForUpdate( diff --git a/src/main/kotlin/voter/ConstitutionVoter.kt b/src/main/kotlin/voter/ConstitutionVoter.kt index 40889e7..84399dc 100644 --- a/src/main/kotlin/voter/ConstitutionVoter.kt +++ b/src/main/kotlin/voter/ConstitutionVoter.kt @@ -1,6 +1,7 @@ package fr.dcproject.security.voter -import fr.dcproject.entity.CommentForView +import fr.dcproject.component.comment.generic.CommentForView +import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.entity.ConstitutionSimple import fr.dcproject.entity.UserI import fr.dcproject.user diff --git a/src/test/kotlin/feature/ArticleSteps.kt b/src/test/kotlin/feature/ArticleSteps.kt index 2fad5a4..cb8b417 100644 --- a/src/test/kotlin/feature/ArticleSteps.kt +++ b/src/test/kotlin/feature/ArticleSteps.kt @@ -6,9 +6,9 @@ import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRepository -import fr.dcproject.entity.CommentForUpdate +import fr.dcproject.component.comment.article.CommentArticleRepository +import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.entity.WorkgroupRef -import fr.dcproject.repository.CommentArticle import fr.dcproject.utils.toUUID import io.cucumber.datatable.DataTable import io.cucumber.java8.En @@ -97,6 +97,6 @@ class ArticleSteps : En, KoinTest { target = article, content = params?.get("content") ?: "hello" ) - get().comment(comment) + get().comment(comment) } } \ No newline at end of file diff --git a/src/test/kotlin/feature/ConstitutionSteps.kt b/src/test/kotlin/feature/ConstitutionSteps.kt index 0f19225..655573c 100644 --- a/src/test/kotlin/feature/ConstitutionSteps.kt +++ b/src/test/kotlin/feature/ConstitutionSteps.kt @@ -5,10 +5,10 @@ import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenWithUserI -import fr.dcproject.entity.CommentForUpdate +import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.entity.ConstitutionRef import fr.dcproject.entity.ConstitutionSimple -import fr.dcproject.repository.CommentConstitution +import fr.dcproject.repository.CommentConstitutionRepository import fr.dcproject.utils.toUUID import io.cucumber.datatable.DataTable import io.cucumber.java8.En @@ -102,6 +102,6 @@ class ConstitutionSteps : En, KoinTest { target = constitution, content = params?.get("content") ?: "hello" ) - get().comment(comment) + get().comment(comment) } } \ No newline at end of file diff --git a/src/test/kotlin/security/voter/CommentVoterTest.kt b/src/test/kotlin/security/voter/CommentVoterTest.kt index 949de64..de1cbde 100644 --- a/src/test/kotlin/security/voter/CommentVoterTest.kt +++ b/src/test/kotlin/security/voter/CommentVoterTest.kt @@ -6,8 +6,9 @@ import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI -import fr.dcproject.entity.CommentForUpdate -import fr.dcproject.entity.CommentForView +import fr.dcproject.component.comment.generic.CommentForUpdate +import fr.dcproject.component.comment.generic.CommentForView +import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.entity.User import fr.dcproject.entity.UserI import fr.dcproject.voter.NoSubjectDefinedException