Move comment constitution to component
This commit is contained in:
@@ -15,6 +15,7 @@ import fr.dcproject.component.auth.routes.installAuthRoutes
|
|||||||
import fr.dcproject.component.auth.user
|
import fr.dcproject.component.auth.user
|
||||||
import fr.dcproject.component.citizen.routes.installCitizenRoutes
|
import fr.dcproject.component.citizen.routes.installCitizenRoutes
|
||||||
import fr.dcproject.component.comment.article.routes.installCommentArticleRoutes
|
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.comment.generic.routes.installCommentRoutes
|
||||||
import fr.dcproject.component.constitution.routes.installConstitutionRoutes
|
import fr.dcproject.component.constitution.routes.installConstitutionRoutes
|
||||||
import fr.dcproject.component.follow.routes.article.installFollowArticleRoutes
|
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.component.workgroup.routes.installWorkgroupRoutes
|
||||||
import fr.dcproject.event.EventNotification
|
import fr.dcproject.event.EventNotification
|
||||||
import fr.dcproject.event.EventSubscriber
|
import fr.dcproject.event.EventSubscriber
|
||||||
import fr.dcproject.routes.commentConstitution
|
|
||||||
import fr.dcproject.routes.definition
|
import fr.dcproject.routes.definition
|
||||||
import fr.dcproject.routes.notificationArticle
|
import fr.dcproject.routes.notificationArticle
|
||||||
import fr.dcproject.security.AccessDeniedException
|
import fr.dcproject.security.AccessDeniedException
|
||||||
@@ -141,10 +141,10 @@ fun Application.module(env: Env = PROD) {
|
|||||||
installOpinionRoutes()
|
installOpinionRoutes()
|
||||||
installVoteRoutes()
|
installVoteRoutes()
|
||||||
installConstitutionRoutes()
|
installConstitutionRoutes()
|
||||||
|
installCommentConstitutionRoutes()
|
||||||
|
|
||||||
authenticate(optional = true) {
|
authenticate(optional = true) {
|
||||||
/* TODO */
|
/* TODO */
|
||||||
commentConstitution(get(), get())
|
|
||||||
definition()
|
definition()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import fr.dcproject.component.auth.UserRepository
|
|||||||
import fr.dcproject.component.citizen.CitizenAccessControl
|
import fr.dcproject.component.citizen.CitizenAccessControl
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.comment.article.CommentArticleRepository
|
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.comment.generic.CommentAccessControl
|
||||||
import fr.dcproject.component.constitution.ConstitutionAccessControl
|
import fr.dcproject.component.constitution.ConstitutionAccessControl
|
||||||
import fr.dcproject.component.constitution.ConstitutionRepository
|
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.event.publisher.Publisher
|
||||||
import fr.dcproject.messages.Mailer
|
import fr.dcproject.messages.Mailer
|
||||||
import fr.dcproject.messages.NotificationEmailSender
|
import fr.dcproject.messages.NotificationEmailSender
|
||||||
import fr.dcproject.repository.CommentConstitutionRepository
|
|
||||||
import fr.postgresjson.connexion.Connection
|
import fr.postgresjson.connexion.Connection
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.migration.Migrations
|
import fr.postgresjson.migration.Migrations
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
package fr.dcproject.component.article
|
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.CitizenCart
|
||||||
import fr.dcproject.component.citizen.CitizenCartI
|
import fr.dcproject.component.citizen.CitizenCartI
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
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.WorkgroupCartI
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRef
|
import fr.dcproject.component.workgroup.WorkgroupRef
|
||||||
import fr.dcproject.component.workgroup.WorkgroupSimple
|
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.EntityCreatedAt
|
||||||
import fr.postgresjson.entity.EntityCreatedAtImp
|
import fr.postgresjson.entity.EntityCreatedAtImp
|
||||||
import fr.postgresjson.entity.EntityDeletedAt
|
import fr.postgresjson.entity.EntityDeletedAt
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package fr.dcproject.component.article
|
package fr.dcproject.component.article
|
||||||
|
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
|
||||||
import fr.dcproject.common.entity.CreatedBy
|
import fr.dcproject.common.entity.CreatedBy
|
||||||
import fr.dcproject.common.entity.VersionableRef
|
import fr.dcproject.common.entity.VersionableRef
|
||||||
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.security.AccessControl
|
import fr.dcproject.security.AccessControl
|
||||||
import fr.dcproject.security.AccessResponse
|
import fr.dcproject.security.AccessResponse
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.component.article
|
package fr.dcproject.component.article
|
||||||
|
|
||||||
|
import fr.dcproject.common.entity.VersionableRef
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.views.ViewManager
|
import fr.dcproject.component.views.ViewManager
|
||||||
import fr.dcproject.component.views.entity.ViewAggregation
|
import fr.dcproject.component.views.entity.ViewAggregation
|
||||||
import fr.dcproject.common.entity.VersionableRef
|
|
||||||
import fr.dcproject.utils.contentToString
|
import fr.dcproject.utils.contentToString
|
||||||
import fr.dcproject.utils.getJsonField
|
import fr.dcproject.utils.getJsonField
|
||||||
import fr.dcproject.utils.toIso
|
import fr.dcproject.utils.toIso
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package fr.dcproject.component.comment.article
|
package fr.dcproject.component.comment.article
|
||||||
|
|
||||||
|
import fr.dcproject.common.entity.TargetI
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.comment.generic.CommentForView
|
import fr.dcproject.component.comment.generic.CommentForView
|
||||||
import fr.dcproject.component.comment.generic.CommentRepositoryAbs
|
import fr.dcproject.component.comment.generic.CommentRepositoryAbs
|
||||||
import fr.dcproject.common.entity.TargetI
|
|
||||||
import fr.postgresjson.connexion.Paginated
|
import fr.postgresjson.connexion.Paginated
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.entity.UuidEntityI
|
import fr.postgresjson.entity.UuidEntityI
|
||||||
|
|||||||
@@ -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.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.comment.article.CommentArticleRepository
|
import fr.dcproject.component.comment.article.CommentArticleRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentForView
|
import fr.dcproject.component.comment.generic.CommentForView
|
||||||
import fr.dcproject.component.comment.generic.CommentRepositoryAbs
|
import fr.dcproject.component.comment.generic.CommentRepositoryAbs
|
||||||
import fr.dcproject.component.constitution.ConstitutionRef
|
import fr.dcproject.component.constitution.ConstitutionRef
|
||||||
import fr.dcproject.common.entity.TargetI
|
|
||||||
import fr.postgresjson.connexion.Paginated
|
import fr.postgresjson.connexion.Paginated
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.entity.UuidEntityI
|
import fr.postgresjson.entity.UuidEntityI
|
||||||
@@ -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<CreateConstitutionCommentRequest> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<GetCitizenCommentConstitutionRequest> {
|
||||||
|
val comments = repo.findByCitizen(it.citizen)
|
||||||
|
ac.assert { canView(comments.result, citizenOrNull) }
|
||||||
|
call.respond(comments)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<GetConstitutionCommentRequest> {
|
||||||
|
val comments = repo.findByTarget(it.constitution)
|
||||||
|
ac.assert { canView(comments.result, citizenOrNull) }
|
||||||
|
call.respond(HttpStatusCode.OK, comments)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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())
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package fr.dcproject.component.comment.generic
|
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.EntityI
|
||||||
import fr.dcproject.common.entity.ExtraI
|
import fr.dcproject.common.entity.ExtraI
|
||||||
import fr.dcproject.common.entity.HasTarget
|
import fr.dcproject.common.entity.HasTarget
|
||||||
import fr.dcproject.common.entity.TargetI
|
import fr.dcproject.common.entity.TargetI
|
||||||
import fr.dcproject.common.entity.TargetRef
|
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.EntityCreatedAt
|
||||||
import fr.postgresjson.entity.EntityCreatedAtImp
|
import fr.postgresjson.entity.EntityCreatedAtImp
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.component.comment.generic
|
package fr.dcproject.component.comment.generic
|
||||||
|
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
|
||||||
import fr.dcproject.common.entity.HasTarget
|
import fr.dcproject.common.entity.HasTarget
|
||||||
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.security.AccessControl
|
import fr.dcproject.security.AccessControl
|
||||||
import fr.dcproject.security.AccessResponse
|
import fr.dcproject.security.AccessResponse
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package fr.dcproject.component.comment.generic
|
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.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.comment.article.CommentArticleRepository
|
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.Paginated
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.entity.UuidEntityI
|
import fr.postgresjson.entity.UuidEntityI
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package fr.dcproject.component.constitution
|
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.ArticleForListing
|
||||||
import fr.dcproject.component.article.ArticleI
|
import fr.dcproject.component.article.ArticleI
|
||||||
import fr.dcproject.component.citizen.CitizenSimple
|
import fr.dcproject.component.citizen.CitizenSimple
|
||||||
import fr.dcproject.component.citizen.CitizenWithUserI
|
import fr.dcproject.component.citizen.CitizenWithUserI
|
||||||
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple
|
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.EntityCreatedAt
|
||||||
import fr.postgresjson.entity.EntityCreatedAtImp
|
import fr.postgresjson.entity.EntityCreatedAtImp
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package fr.dcproject.component.follow
|
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.ExtraI
|
||||||
import fr.dcproject.common.entity.HasTarget
|
import fr.dcproject.common.entity.HasTarget
|
||||||
import fr.dcproject.common.entity.TargetI
|
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.EntityCreatedAt
|
||||||
import fr.postgresjson.entity.EntityCreatedAtImp
|
import fr.postgresjson.entity.EntityCreatedAtImp
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package fr.dcproject.component.follow
|
package fr.dcproject.component.follow
|
||||||
|
|
||||||
|
import fr.dcproject.common.entity.TargetRef
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.constitution.ConstitutionRef
|
import fr.dcproject.component.constitution.ConstitutionRef
|
||||||
import fr.dcproject.common.entity.TargetRef
|
|
||||||
import fr.postgresjson.connexion.Paginated
|
import fr.postgresjson.connexion.Paginated
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.entity.UuidEntity
|
import fr.postgresjson.entity.UuidEntity
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package fr.dcproject.component.opinion
|
package fr.dcproject.component.opinion
|
||||||
|
|
||||||
|
import fr.dcproject.common.entity.HasTarget
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.opinion.entity.OpinionI
|
import fr.dcproject.component.opinion.entity.OpinionI
|
||||||
import fr.dcproject.common.entity.HasTarget
|
|
||||||
import fr.dcproject.security.AccessControl
|
import fr.dcproject.security.AccessControl
|
||||||
import fr.dcproject.security.AccessResponse
|
import fr.dcproject.security.AccessResponse
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.component.opinion
|
package fr.dcproject.component.opinion
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference
|
import com.fasterxml.jackson.core.type.TypeReference
|
||||||
|
import fr.dcproject.common.entity.TargetRef
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
import fr.dcproject.component.opinion.entity.OpinionForUpdate
|
import fr.dcproject.component.opinion.entity.OpinionForUpdate
|
||||||
import fr.dcproject.common.entity.TargetRef
|
|
||||||
import fr.postgresjson.connexion.Paginated
|
import fr.postgresjson.connexion.Paginated
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.repository.RepositoryI
|
import fr.postgresjson.repository.RepositoryI
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package fr.dcproject.component.opinion.entity
|
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.article.ArticleRef
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenBasic
|
||||||
import fr.dcproject.component.citizen.CitizenBasicI
|
import fr.dcproject.component.citizen.CitizenBasicI
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
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.EntityCreatedAt
|
||||||
import fr.postgresjson.entity.EntityCreatedAtImp
|
import fr.postgresjson.entity.EntityCreatedAtImp
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package fr.dcproject.component.vote
|
package fr.dcproject.component.vote
|
||||||
|
|
||||||
|
import fr.dcproject.common.entity.TargetI
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.vote.entity.VoteForUpdateI
|
import fr.dcproject.component.vote.entity.VoteForUpdateI
|
||||||
import fr.dcproject.common.entity.TargetI
|
|
||||||
import fr.dcproject.security.AccessControl
|
import fr.dcproject.security.AccessControl
|
||||||
import fr.dcproject.security.AccessResponse
|
import fr.dcproject.security.AccessResponse
|
||||||
import fr.postgresjson.entity.EntityDeletedAt
|
import fr.postgresjson.entity.EntityDeletedAt
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package fr.dcproject.component.vote
|
package fr.dcproject.component.vote
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference
|
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.article.ArticleForView
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.comment.generic.CommentForView
|
import fr.dcproject.component.comment.generic.CommentForView
|
||||||
import fr.dcproject.component.constitution.Constitution
|
import fr.dcproject.component.constitution.Constitution
|
||||||
import fr.dcproject.component.vote.entity.VoteAggregation
|
import fr.dcproject.component.vote.entity.VoteAggregation
|
||||||
import fr.dcproject.component.vote.entity.VoteForUpdateI
|
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.Paginated
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.repository.RepositoryI
|
import fr.postgresjson.repository.RepositoryI
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package fr.dcproject.component.vote.entity
|
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.ExtraI
|
||||||
import fr.dcproject.common.entity.HasTarget
|
import fr.dcproject.common.entity.HasTarget
|
||||||
import fr.dcproject.common.entity.TargetI
|
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.EntityCreatedAt
|
||||||
import fr.postgresjson.entity.EntityCreatedAtImp
|
import fr.postgresjson.entity.EntityCreatedAtImp
|
||||||
import fr.postgresjson.entity.EntityCreatedBy
|
import fr.postgresjson.entity.EntityCreatedBy
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ import com.rabbitmq.client.Consumer
|
|||||||
import com.rabbitmq.client.DefaultConsumer
|
import com.rabbitmq.client.DefaultConsumer
|
||||||
import com.rabbitmq.client.Envelope
|
import com.rabbitmq.client.Envelope
|
||||||
import fr.dcproject.application.Configuration
|
import fr.dcproject.application.Configuration
|
||||||
|
import fr.dcproject.common.entity.TargetRef
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.follow.FollowRepository
|
import fr.dcproject.component.follow.FollowRepository
|
||||||
import fr.dcproject.component.follow.FollowSimple
|
import fr.dcproject.component.follow.FollowSimple
|
||||||
import fr.dcproject.common.entity.TargetRef
|
|
||||||
import fr.dcproject.event.publisher.Publisher
|
import fr.dcproject.event.publisher.Publisher
|
||||||
import fr.dcproject.messages.NotificationEmailSender
|
import fr.dcproject.messages.NotificationEmailSender
|
||||||
import fr.postgresjson.serializer.deserialize
|
import fr.postgresjson.serializer.deserialize
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ package fr.dcproject.messages
|
|||||||
import com.sendgrid.helpers.mail.Mail
|
import com.sendgrid.helpers.mail.Mail
|
||||||
import com.sendgrid.helpers.mail.objects.Content
|
import com.sendgrid.helpers.mail.objects.Content
|
||||||
import com.sendgrid.helpers.mail.objects.Email
|
import com.sendgrid.helpers.mail.objects.Email
|
||||||
|
import fr.dcproject.common.entity.TargetRef
|
||||||
import fr.dcproject.component.article.ArticleRepository
|
import fr.dcproject.component.article.ArticleRepository
|
||||||
import fr.dcproject.component.article.ArticleWithTitleI
|
import fr.dcproject.component.article.ArticleWithTitleI
|
||||||
import fr.dcproject.component.citizen.CitizenBasicI
|
import fr.dcproject.component.citizen.CitizenBasicI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.follow.FollowSimple
|
import fr.dcproject.component.follow.FollowSimple
|
||||||
import fr.dcproject.common.entity.TargetRef
|
|
||||||
import fr.postgresjson.entity.UuidEntityI
|
import fr.postgresjson.entity.UuidEntityI
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
|
|||||||
@@ -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<CommentConstitutionPaths.ConstitutionCommentRequest> {
|
|
||||||
val comments = repo.findByTarget(it.constitution)
|
|
||||||
ac.assert { canView(comments.result, citizenOrNull) }
|
|
||||||
call.respond(HttpStatusCode.OK, comments)
|
|
||||||
}
|
|
||||||
|
|
||||||
post<CommentConstitutionPaths.ConstitutionCommentRequest> {
|
|
||||||
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<CommentConstitutionPaths.CitizenCommentConstitutionRequest> {
|
|
||||||
val comments = repo.findByCitizen(it.citizen)
|
|
||||||
ac.assert { canView(comments.result, citizenOrNull) }
|
|
||||||
call.respond(comments)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,12 +5,12 @@ import fr.dcproject.component.citizen.Citizen
|
|||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.citizen.CitizenWithUserI
|
import fr.dcproject.component.citizen.CitizenWithUserI
|
||||||
|
import fr.dcproject.component.comment.constitution.CommentConstitutionRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentForUpdate
|
import fr.dcproject.component.comment.generic.CommentForUpdate
|
||||||
import fr.dcproject.component.constitution.ConstitutionRef
|
import fr.dcproject.component.constitution.ConstitutionRef
|
||||||
import fr.dcproject.component.constitution.ConstitutionRepository
|
import fr.dcproject.component.constitution.ConstitutionRepository
|
||||||
import fr.dcproject.component.constitution.ConstitutionSimple
|
import fr.dcproject.component.constitution.ConstitutionSimple
|
||||||
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple
|
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple
|
||||||
import fr.dcproject.repository.CommentConstitutionRepository
|
|
||||||
import fr.dcproject.utils.toUUID
|
import fr.dcproject.utils.toUUID
|
||||||
import io.cucumber.datatable.DataTable
|
import io.cucumber.datatable.DataTable
|
||||||
import io.cucumber.java8.En
|
import io.cucumber.java8.En
|
||||||
|
|||||||
Reference in New Issue
Block a user