diff --git a/src/main/kotlin/application/Application.kt b/src/main/kotlin/application/Application.kt index f64a675..eb6bf50 100644 --- a/src/main/kotlin/application/Application.kt +++ b/src/main/kotlin/application/Application.kt @@ -15,6 +15,7 @@ import fr.dcproject.component.auth.routes.installAuthRoutes import fr.dcproject.component.auth.user import fr.dcproject.component.citizen.routes.installCitizenRoutes import fr.dcproject.component.comment.article.routes.installCommentArticleRoutes +import fr.dcproject.component.comment.constitution.routes.installCommentConstitutionRoutes import fr.dcproject.component.comment.generic.routes.installCommentRoutes import fr.dcproject.component.constitution.routes.installConstitutionRoutes import fr.dcproject.component.follow.routes.article.installFollowArticleRoutes @@ -25,7 +26,6 @@ import fr.dcproject.component.vote.routes.installVoteRoutes import fr.dcproject.component.workgroup.routes.installWorkgroupRoutes import fr.dcproject.event.EventNotification import fr.dcproject.event.EventSubscriber -import fr.dcproject.routes.commentConstitution import fr.dcproject.routes.definition import fr.dcproject.routes.notificationArticle import fr.dcproject.security.AccessDeniedException @@ -141,10 +141,10 @@ fun Application.module(env: Env = PROD) { installOpinionRoutes() installVoteRoutes() installConstitutionRoutes() + installCommentConstitutionRoutes() authenticate(optional = true) { /* TODO */ - commentConstitution(get(), get()) definition() } diff --git a/src/main/kotlin/application/KoinModule.kt b/src/main/kotlin/application/KoinModule.kt index 9a509a9..f0ecafd 100644 --- a/src/main/kotlin/application/KoinModule.kt +++ b/src/main/kotlin/application/KoinModule.kt @@ -17,6 +17,7 @@ import fr.dcproject.component.auth.UserRepository import fr.dcproject.component.citizen.CitizenAccessControl import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.comment.article.CommentArticleRepository +import fr.dcproject.component.comment.constitution.CommentConstitutionRepository import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.constitution.ConstitutionAccessControl import fr.dcproject.component.constitution.ConstitutionRepository @@ -34,7 +35,6 @@ import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.event.publisher.Publisher import fr.dcproject.messages.Mailer import fr.dcproject.messages.NotificationEmailSender -import fr.dcproject.repository.CommentConstitutionRepository import fr.postgresjson.connexion.Connection import fr.postgresjson.connexion.Requester import fr.postgresjson.migration.Migrations diff --git a/src/main/kotlin/component/article/Article.kt b/src/main/kotlin/component/article/Article.kt index 627fdcb..bc77fe3 100644 --- a/src/main/kotlin/component/article/Article.kt +++ b/src/main/kotlin/component/article/Article.kt @@ -1,5 +1,9 @@ package fr.dcproject.component.article +import fr.dcproject.common.entity.CreatedBy +import fr.dcproject.common.entity.TargetI +import fr.dcproject.common.entity.TargetRef +import fr.dcproject.common.entity.VersionableRef import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenCartI import fr.dcproject.component.citizen.CitizenI @@ -12,10 +16,6 @@ import fr.dcproject.component.workgroup.WorkgroupCart import fr.dcproject.component.workgroup.WorkgroupCartI import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.WorkgroupSimple -import fr.dcproject.common.entity.CreatedBy -import fr.dcproject.common.entity.TargetI -import fr.dcproject.common.entity.TargetRef -import fr.dcproject.common.entity.VersionableRef import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityDeletedAt diff --git a/src/main/kotlin/component/article/ArticleAccessControl.kt b/src/main/kotlin/component/article/ArticleAccessControl.kt index b11be2b..e6d00b1 100644 --- a/src/main/kotlin/component/article/ArticleAccessControl.kt +++ b/src/main/kotlin/component/article/ArticleAccessControl.kt @@ -1,8 +1,8 @@ package fr.dcproject.component.article -import fr.dcproject.component.citizen.CitizenI import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.VersionableRef +import fr.dcproject.component.citizen.CitizenI import fr.dcproject.security.AccessControl import fr.dcproject.security.AccessResponse diff --git a/src/main/kotlin/component/article/ArticleViewManager.kt b/src/main/kotlin/component/article/ArticleViewManager.kt index e8591f1..c9c6c4c 100644 --- a/src/main/kotlin/component/article/ArticleViewManager.kt +++ b/src/main/kotlin/component/article/ArticleViewManager.kt @@ -1,9 +1,9 @@ package fr.dcproject.component.article +import fr.dcproject.common.entity.VersionableRef import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.views.ViewManager import fr.dcproject.component.views.entity.ViewAggregation -import fr.dcproject.common.entity.VersionableRef import fr.dcproject.utils.contentToString import fr.dcproject.utils.getJsonField import fr.dcproject.utils.toIso diff --git a/src/main/kotlin/component/comment/article/CommentArticleRepository.kt b/src/main/kotlin/component/comment/article/CommentArticleRepository.kt index df2e39b..fc71b0b 100644 --- a/src/main/kotlin/component/comment/article/CommentArticleRepository.kt +++ b/src/main/kotlin/component/comment/article/CommentArticleRepository.kt @@ -1,12 +1,12 @@ package fr.dcproject.component.comment.article +import fr.dcproject.common.entity.TargetI 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.common.entity.TargetI import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.entity.UuidEntityI diff --git a/src/main/kotlin/repository/CommentConstitutionRepository.kt b/src/main/kotlin/component/comment/constitution/CommentConstitutionRepository.kt similarity index 97% rename from src/main/kotlin/repository/CommentConstitutionRepository.kt rename to src/main/kotlin/component/comment/constitution/CommentConstitutionRepository.kt index d3d79bf..b270af8 100644 --- a/src/main/kotlin/repository/CommentConstitutionRepository.kt +++ b/src/main/kotlin/component/comment/constitution/CommentConstitutionRepository.kt @@ -1,12 +1,12 @@ -package fr.dcproject.repository +package fr.dcproject.component.comment.constitution +import fr.dcproject.common.entity.TargetI 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.component.constitution.ConstitutionRef -import fr.dcproject.common.entity.TargetI import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.entity.UuidEntityI diff --git a/src/main/kotlin/component/comment/constitution/routes/CreateConstitutionComment.kt b/src/main/kotlin/component/comment/constitution/routes/CreateConstitutionComment.kt new file mode 100644 index 0000000..6b9c76c --- /dev/null +++ b/src/main/kotlin/component/comment/constitution/routes/CreateConstitutionComment.kt @@ -0,0 +1,39 @@ +package fr.dcproject.component.comment.constitution.routes + +import fr.dcproject.component.auth.citizen +import fr.dcproject.component.auth.citizenOrNull +import fr.dcproject.component.comment.constitution.CommentConstitutionRepository +import fr.dcproject.component.comment.generic.CommentAccessControl +import fr.dcproject.component.comment.generic.CommentForUpdate +import fr.dcproject.component.constitution.ConstitutionRef +import fr.dcproject.security.assert +import io.ktor.application.call +import io.ktor.http.HttpStatusCode +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Location +import io.ktor.locations.get +import io.ktor.locations.post +import io.ktor.request.receiveText +import io.ktor.response.respond +import io.ktor.routing.Route + +@KtorExperimentalLocationsAPI +object CreateConstitutionComment { + @Location("/constitutions/{constitution}/comments") + class CreateConstitutionCommentRequest(val constitution: ConstitutionRef) + + fun Route.createConstitutionComment(repo: CommentConstitutionRepository, ac: CommentAccessControl) { + post { + val content = call.receiveText() + val comment = CommentForUpdate( + target = it.constitution, + createdBy = citizen, + content = content + ) + ac.assert { canCreate(comment, citizenOrNull) } + repo.comment(comment) + + call.respond(HttpStatusCode.Created, comment) + } + } +} diff --git a/src/main/kotlin/component/comment/constitution/routes/GetCitizenCommentConstitution.kt b/src/main/kotlin/component/comment/constitution/routes/GetCitizenCommentConstitution.kt new file mode 100644 index 0000000..afd1cd1 --- /dev/null +++ b/src/main/kotlin/component/comment/constitution/routes/GetCitizenCommentConstitution.kt @@ -0,0 +1,27 @@ +package fr.dcproject.component.comment.constitution.routes + +import fr.dcproject.component.auth.citizenOrNull +import fr.dcproject.component.citizen.Citizen +import fr.dcproject.component.comment.constitution.CommentConstitutionRepository +import fr.dcproject.component.comment.generic.CommentAccessControl +import fr.dcproject.security.assert +import io.ktor.application.call +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Location +import io.ktor.locations.get +import io.ktor.response.respond +import io.ktor.routing.Route + +@KtorExperimentalLocationsAPI +object GetCitizenCommentConstitution { + @Location("/citizens/{citizen}/comments/constitutions") + class GetCitizenCommentConstitutionRequest(val citizen: Citizen) + + fun Route.getCitizenCommentConstitution(repo: CommentConstitutionRepository, ac: CommentAccessControl) { + get { + val comments = repo.findByCitizen(it.citizen) + ac.assert { canView(comments.result, citizenOrNull) } + call.respond(comments) + } + } +} diff --git a/src/main/kotlin/component/comment/constitution/routes/GetConstitutionComment.kt b/src/main/kotlin/component/comment/constitution/routes/GetConstitutionComment.kt new file mode 100644 index 0000000..b235589 --- /dev/null +++ b/src/main/kotlin/component/comment/constitution/routes/GetConstitutionComment.kt @@ -0,0 +1,28 @@ +package fr.dcproject.component.comment.constitution.routes + +import fr.dcproject.component.auth.citizenOrNull +import fr.dcproject.component.comment.constitution.CommentConstitutionRepository +import fr.dcproject.component.comment.generic.CommentAccessControl +import fr.dcproject.component.constitution.ConstitutionRef +import fr.dcproject.security.assert +import io.ktor.application.call +import io.ktor.http.HttpStatusCode +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Location +import io.ktor.locations.get +import io.ktor.response.respond +import io.ktor.routing.Route + +@KtorExperimentalLocationsAPI +object GetConstitutionComment { + @Location("/constitutions/{constitution}/comments") + class GetConstitutionCommentRequest(val constitution: ConstitutionRef) + + fun Route.getConstitutionComment(repo: CommentConstitutionRepository, ac: CommentAccessControl) { + get { + val comments = repo.findByTarget(it.constitution) + ac.assert { canView(comments.result, citizenOrNull) } + call.respond(HttpStatusCode.OK, comments) + } + } +} diff --git a/src/main/kotlin/component/comment/constitution/routes/install.kt b/src/main/kotlin/component/comment/constitution/routes/install.kt new file mode 100644 index 0000000..8ffc5b6 --- /dev/null +++ b/src/main/kotlin/component/comment/constitution/routes/install.kt @@ -0,0 +1,18 @@ +package fr.dcproject.component.comment.constitution.routes + +import fr.dcproject.component.comment.constitution.routes.CreateConstitutionComment.createConstitutionComment +import fr.dcproject.component.comment.constitution.routes.GetCitizenCommentConstitution.getCitizenCommentConstitution +import fr.dcproject.component.comment.constitution.routes.GetConstitutionComment.getConstitutionComment +import io.ktor.auth.authenticate +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.routing.Routing +import org.koin.ktor.ext.get + +@KtorExperimentalLocationsAPI +fun Routing.installCommentConstitutionRoutes() { + authenticate(optional = true) { + createConstitutionComment(get(), get()) + getCitizenCommentConstitution(get(), get()) + getConstitutionComment(get(), get()) + } +} diff --git a/src/main/kotlin/component/comment/generic/Comment.kt b/src/main/kotlin/component/comment/generic/Comment.kt index 158735a..2eb73a4 100644 --- a/src/main/kotlin/component/comment/generic/Comment.kt +++ b/src/main/kotlin/component/comment/generic/Comment.kt @@ -1,13 +1,13 @@ package fr.dcproject.component.comment.generic -import fr.dcproject.component.citizen.CitizenRef -import fr.dcproject.component.vote.entity.Votable -import fr.dcproject.component.vote.entity.VotableImp import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.ExtraI import fr.dcproject.common.entity.HasTarget import fr.dcproject.common.entity.TargetI import fr.dcproject.common.entity.TargetRef +import fr.dcproject.component.citizen.CitizenRef +import fr.dcproject.component.vote.entity.Votable +import fr.dcproject.component.vote.entity.VotableImp import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/component/comment/generic/CommentAccessControl.kt b/src/main/kotlin/component/comment/generic/CommentAccessControl.kt index 30c6cd0..c009b56 100644 --- a/src/main/kotlin/component/comment/generic/CommentAccessControl.kt +++ b/src/main/kotlin/component/comment/generic/CommentAccessControl.kt @@ -1,7 +1,7 @@ package fr.dcproject.component.comment.generic -import fr.dcproject.component.citizen.CitizenI import fr.dcproject.common.entity.HasTarget +import fr.dcproject.component.citizen.CitizenI import fr.dcproject.security.AccessControl import fr.dcproject.security.AccessResponse import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/component/comment/generic/CommentRepository.kt b/src/main/kotlin/component/comment/generic/CommentRepository.kt index 5e424ac..768ba42 100644 --- a/src/main/kotlin/component/comment/generic/CommentRepository.kt +++ b/src/main/kotlin/component/comment/generic/CommentRepository.kt @@ -1,10 +1,10 @@ package fr.dcproject.component.comment.generic +import fr.dcproject.common.entity.TargetI +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.comment.article.CommentArticleRepository -import fr.dcproject.common.entity.TargetI -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.entity.UuidEntityI diff --git a/src/main/kotlin/component/constitution/Constitution.kt b/src/main/kotlin/component/constitution/Constitution.kt index a29351f..bbb6439 100644 --- a/src/main/kotlin/component/constitution/Constitution.kt +++ b/src/main/kotlin/component/constitution/Constitution.kt @@ -1,12 +1,12 @@ package fr.dcproject.component.constitution +import fr.dcproject.common.entity.TargetI +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.article.ArticleForListing import fr.dcproject.component.article.ArticleI import fr.dcproject.component.citizen.CitizenSimple import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple -import fr.dcproject.common.entity.TargetI -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/component/follow/Follow.kt b/src/main/kotlin/component/follow/Follow.kt index 085dcae..4ff4944 100644 --- a/src/main/kotlin/component/follow/Follow.kt +++ b/src/main/kotlin/component/follow/Follow.kt @@ -1,11 +1,11 @@ package fr.dcproject.component.follow -import fr.dcproject.component.citizen.CitizenBasic -import fr.dcproject.component.citizen.CitizenBasicI -import fr.dcproject.component.citizen.CitizenI import fr.dcproject.common.entity.ExtraI import fr.dcproject.common.entity.HasTarget import fr.dcproject.common.entity.TargetI +import fr.dcproject.component.citizen.CitizenBasic +import fr.dcproject.component.citizen.CitizenBasicI +import fr.dcproject.component.citizen.CitizenI import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/component/follow/FollowRepository.kt b/src/main/kotlin/component/follow/FollowRepository.kt index aef6448..1914885 100644 --- a/src/main/kotlin/component/follow/FollowRepository.kt +++ b/src/main/kotlin/component/follow/FollowRepository.kt @@ -1,11 +1,11 @@ package fr.dcproject.component.follow +import fr.dcproject.common.entity.TargetRef 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.constitution.ConstitutionRef -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.entity.UuidEntity diff --git a/src/main/kotlin/component/opinion/OpinionAccessControl.kt b/src/main/kotlin/component/opinion/OpinionAccessControl.kt index cea067d..c8dcc92 100644 --- a/src/main/kotlin/component/opinion/OpinionAccessControl.kt +++ b/src/main/kotlin/component/opinion/OpinionAccessControl.kt @@ -1,8 +1,8 @@ package fr.dcproject.component.opinion +import fr.dcproject.common.entity.HasTarget import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.opinion.entity.OpinionI -import fr.dcproject.common.entity.HasTarget import fr.dcproject.security.AccessControl import fr.dcproject.security.AccessResponse import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/component/opinion/OpinionRepository.kt b/src/main/kotlin/component/opinion/OpinionRepository.kt index d39d96e..5f1ea11 100644 --- a/src/main/kotlin/component/opinion/OpinionRepository.kt +++ b/src/main/kotlin/component/opinion/OpinionRepository.kt @@ -1,9 +1,9 @@ package fr.dcproject.component.opinion import com.fasterxml.jackson.core.type.TypeReference +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.opinion.entity.OpinionForUpdate -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.repository.RepositoryI diff --git a/src/main/kotlin/component/opinion/entity/Opinion.kt b/src/main/kotlin/component/opinion/entity/Opinion.kt index 38d3ffb..da8bf86 100644 --- a/src/main/kotlin/component/opinion/entity/Opinion.kt +++ b/src/main/kotlin/component/opinion/entity/Opinion.kt @@ -1,14 +1,14 @@ package fr.dcproject.component.opinion.entity +import fr.dcproject.common.entity.ExtraI +import fr.dcproject.common.entity.HasTarget +import fr.dcproject.common.entity.TargetI +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRef -import fr.dcproject.common.entity.ExtraI -import fr.dcproject.common.entity.HasTarget -import fr.dcproject.common.entity.TargetI -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/component/vote/VoteAccessControl.kt b/src/main/kotlin/component/vote/VoteAccessControl.kt index ee26995..ca058ae 100644 --- a/src/main/kotlin/component/vote/VoteAccessControl.kt +++ b/src/main/kotlin/component/vote/VoteAccessControl.kt @@ -1,8 +1,8 @@ package fr.dcproject.component.vote +import fr.dcproject.common.entity.TargetI import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.vote.entity.VoteForUpdateI -import fr.dcproject.common.entity.TargetI import fr.dcproject.security.AccessControl import fr.dcproject.security.AccessResponse import fr.postgresjson.entity.EntityDeletedAt diff --git a/src/main/kotlin/component/vote/VoteRepositoryAbs.kt b/src/main/kotlin/component/vote/VoteRepositoryAbs.kt index e49a366..584a7ed 100644 --- a/src/main/kotlin/component/vote/VoteRepositoryAbs.kt +++ b/src/main/kotlin/component/vote/VoteRepositoryAbs.kt @@ -1,14 +1,14 @@ package fr.dcproject.component.vote import com.fasterxml.jackson.core.type.TypeReference +import fr.dcproject.common.entity.TargetI +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.component.constitution.Constitution import fr.dcproject.component.vote.entity.VoteAggregation import fr.dcproject.component.vote.entity.VoteForUpdateI -import fr.dcproject.common.entity.TargetI -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.repository.RepositoryI diff --git a/src/main/kotlin/component/vote/entity/Vote.kt b/src/main/kotlin/component/vote/entity/Vote.kt index d9c09cd..5d2a1a8 100644 --- a/src/main/kotlin/component/vote/entity/Vote.kt +++ b/src/main/kotlin/component/vote/entity/Vote.kt @@ -1,11 +1,11 @@ package fr.dcproject.component.vote.entity -import fr.dcproject.component.citizen.CitizenBasic -import fr.dcproject.component.citizen.CitizenBasicI -import fr.dcproject.component.citizen.CitizenI import fr.dcproject.common.entity.ExtraI import fr.dcproject.common.entity.HasTarget import fr.dcproject.common.entity.TargetI +import fr.dcproject.component.citizen.CitizenBasic +import fr.dcproject.component.citizen.CitizenBasicI +import fr.dcproject.component.citizen.CitizenI import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityCreatedBy diff --git a/src/main/kotlin/event/EventNotification.kt b/src/main/kotlin/event/EventNotification.kt index d7852eb..f01e1a3 100644 --- a/src/main/kotlin/event/EventNotification.kt +++ b/src/main/kotlin/event/EventNotification.kt @@ -7,11 +7,11 @@ import com.rabbitmq.client.Consumer import com.rabbitmq.client.DefaultConsumer import com.rabbitmq.client.Envelope import fr.dcproject.application.Configuration +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.follow.FollowRepository import fr.dcproject.component.follow.FollowSimple -import fr.dcproject.common.entity.TargetRef import fr.dcproject.event.publisher.Publisher import fr.dcproject.messages.NotificationEmailSender import fr.postgresjson.serializer.deserialize diff --git a/src/main/kotlin/messages/NotificationEmailSender.kt b/src/main/kotlin/messages/NotificationEmailSender.kt index 6c09a34..47bccc4 100644 --- a/src/main/kotlin/messages/NotificationEmailSender.kt +++ b/src/main/kotlin/messages/NotificationEmailSender.kt @@ -3,13 +3,13 @@ package fr.dcproject.messages import com.sendgrid.helpers.mail.Mail import com.sendgrid.helpers.mail.objects.Content import com.sendgrid.helpers.mail.objects.Email +import fr.dcproject.common.entity.TargetRef import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.ArticleWithTitleI import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.follow.FollowSimple -import fr.dcproject.common.entity.TargetRef import fr.postgresjson.entity.UuidEntityI import java.util.UUID diff --git a/src/main/kotlin/routes/CommentConstitution.kt b/src/main/kotlin/routes/CommentConstitution.kt deleted file mode 100644 index 5a90161..0000000 --- a/src/main/kotlin/routes/CommentConstitution.kt +++ /dev/null @@ -1,56 +0,0 @@ -package fr.dcproject.routes - -import fr.dcproject.component.auth.citizen -import fr.dcproject.component.auth.citizenOrNull -import fr.dcproject.component.citizen.Citizen -import fr.dcproject.component.comment.generic.CommentAccessControl -import fr.dcproject.component.comment.generic.CommentForUpdate -import fr.dcproject.component.constitution.ConstitutionRef -import fr.dcproject.repository.CommentConstitutionRepository -import fr.dcproject.security.assert -import io.ktor.application.call -import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.Location -import io.ktor.locations.get -import io.ktor.locations.post -import io.ktor.request.receiveText -import io.ktor.response.respond -import io.ktor.routing.Route - -@KtorExperimentalLocationsAPI -object CommentConstitutionPaths { - @Location("/constitutions/{constitution}/comments") - class ConstitutionCommentRequest(val constitution: ConstitutionRef) - - @Location("/citizens/{citizen}/comments/constitutions") - class CitizenCommentConstitutionRequest(val citizen: Citizen) -} - -@KtorExperimentalLocationsAPI -fun Route.commentConstitution(repo: CommentConstitutionRepository, ac: CommentAccessControl) { - get { - val comments = repo.findByTarget(it.constitution) - ac.assert { canView(comments.result, citizenOrNull) } - call.respond(HttpStatusCode.OK, comments) - } - - post { - val content = call.receiveText() - val comment = CommentForUpdate( - target = it.constitution, - createdBy = citizen, - content = content - ) - ac.assert { canCreate(comment, citizenOrNull) } - repo.comment(comment) - - call.respond(HttpStatusCode.Created, comment) - } - - get { - val comments = repo.findByCitizen(it.citizen) - ac.assert { canView(comments.result, citizenOrNull) } - call.respond(comments) - } -} diff --git a/src/test/kotlin/steps/ConstitutionSteps.kt b/src/test/kotlin/steps/ConstitutionSteps.kt index 67c6a74..06f1126 100644 --- a/src/test/kotlin/steps/ConstitutionSteps.kt +++ b/src/test/kotlin/steps/ConstitutionSteps.kt @@ -5,12 +5,12 @@ 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.component.comment.constitution.CommentConstitutionRepository import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.ConstitutionRepository import fr.dcproject.component.constitution.ConstitutionSimple import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple -import fr.dcproject.repository.CommentConstitutionRepository import fr.dcproject.utils.toUUID import io.cucumber.datatable.DataTable import io.cucumber.java8.En