Big refactoring #77

Merged
flecomte merged 166 commits from refactoring-component-and-immutable into master 2021-03-24 19:06:07 +01:00
126 changed files with 426 additions and 403 deletions
Showing only changes of commit d9deb4836e - Show all commits

View File

@@ -1,6 +1,6 @@
package fr.dcproject.common.entity package fr.dcproject.common.entity
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
interface Created<C : CitizenI> : CreatedAt, CreatedBy<C> { interface Created<C : CitizenI> : CreatedAt, CreatedBy<C> {
class Imp<C : CitizenI>(createdBy: C) : class Imp<C : CitizenI>(createdBy: C) :
@@ -25,4 +25,4 @@ interface Deleted<C : CitizenI> : DeletedAt, DeletedBy<C> {
DeletedAt by DeletedAt.Imp() { DeletedAt by DeletedAt.Imp() {
override fun isDeleted(): Boolean = (this as Deleted<C>).isDeleted() override fun isDeleted(): Boolean = (this as Deleted<C>).isDeleted()
} }
} }

View File

@@ -1,6 +1,6 @@
package fr.dcproject.common.entity package fr.dcproject.common.entity
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
interface CreatedBy<T : CitizenI> { interface CreatedBy<T : CitizenI> {
val createdBy: T val createdBy: T

View File

@@ -1,10 +1,10 @@
package fr.dcproject.common.entity package fr.dcproject.common.entity
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.database.CommentRef
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.opinion.entity.OpinionRef import fr.dcproject.component.opinion.database.OpinionRef
import java.util.UUID import java.util.UUID
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.isSubclassOf

View File

@@ -4,7 +4,10 @@ import fr.dcproject.common.entity.CreatedBy
import fr.dcproject.common.entity.VersionableId import fr.dcproject.common.entity.VersionableId
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.article.database.ArticleAuthI
import fr.dcproject.component.article.database.ArticleI
import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.citizen.database.CitizenI
class ArticleAccessControl(private val articleRepo: ArticleRepository) : AccessControl() { class ArticleAccessControl(private val articleRepo: ArticleRepository) : AccessControl() {
fun <S : ArticleAuthI<*>> canView(subjects: List<S>, citizen: CitizenI?): AccessResponse = fun <S : ArticleAuthI<*>> canView(subjects: List<S>, citizen: CitizenI?): AccessResponse =

View File

@@ -4,7 +4,8 @@ import fr.dcproject.common.entity.VersionableId
import fr.dcproject.common.utils.contentToString import fr.dcproject.common.utils.contentToString
import fr.dcproject.common.utils.getJsonField import fr.dcproject.common.utils.getJsonField
import fr.dcproject.common.utils.toIso import fr.dcproject.common.utils.toIso
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.article.database.ArticleI
import fr.dcproject.component.citizen.database.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 org.elasticsearch.client.Request import org.elasticsearch.client.Request

View File

@@ -1,5 +1,6 @@
package fr.dcproject.component.article package fr.dcproject.component.article
import fr.dcproject.component.article.database.ArticleRepository
import org.koin.dsl.module import org.koin.dsl.module
val articleKoinModule = module { val articleKoinModule = module {

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.article package fr.dcproject.component.article.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -8,17 +8,17 @@ import fr.dcproject.common.entity.TargetI
import fr.dcproject.common.entity.TargetRef import fr.dcproject.common.entity.TargetRef
import fr.dcproject.common.entity.Versionable import fr.dcproject.common.entity.Versionable
import fr.dcproject.common.entity.VersionableId import fr.dcproject.common.entity.VersionableId
import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.database.CitizenCart
import fr.dcproject.component.citizen.CitizenCartI import fr.dcproject.component.citizen.database.CitizenCartI
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.opinion.entity.Opinionable import fr.dcproject.component.opinion.entity.Opinionable
import fr.dcproject.component.opinion.entity.Opinions import fr.dcproject.component.opinion.entity.Opinions
import fr.dcproject.component.vote.entity.Votable import fr.dcproject.component.vote.entity.Votable
import fr.dcproject.component.vote.entity.VotableImp import fr.dcproject.component.vote.entity.VotableImp
import fr.dcproject.component.workgroup.WorkgroupCart import fr.dcproject.component.workgroup.database.WorkgroupCart
import fr.dcproject.component.workgroup.WorkgroupCartI import fr.dcproject.component.workgroup.database.WorkgroupCartI
import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.database.WorkgroupRef
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.UUID import java.util.UUID

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.article package fr.dcproject.component.article.database
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester

View File

@@ -2,8 +2,8 @@ package fr.dcproject.component.article.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleAccessControl import fr.dcproject.component.article.ArticleAccessControl
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI
import io.ktor.application.call import io.ktor.application.call

View File

@@ -2,8 +2,8 @@ package fr.dcproject.component.article.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleAccessControl import fr.dcproject.component.article.ArticleAccessControl
import fr.dcproject.component.article.ArticleForListing import fr.dcproject.component.article.database.ArticleForListing
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI

View File

@@ -4,10 +4,10 @@ import fr.dcproject.common.dto.CreatedAt
import fr.dcproject.common.dto.Versionable import fr.dcproject.common.dto.Versionable
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleAccessControl import fr.dcproject.component.article.ArticleAccessControl
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.article.ArticleViewManager
import fr.dcproject.component.article.database.ArticleForView
import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.opinion.dto.Opinionable import fr.dcproject.component.opinion.dto.Opinionable
import fr.dcproject.component.views.dto.Viewable import fr.dcproject.component.views.dto.Viewable

View File

@@ -3,15 +3,15 @@ package fr.dcproject.component.article.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.article.ArticleAccessControl import fr.dcproject.component.article.ArticleAccessControl
import fr.dcproject.component.article.ArticleForUpdate import fr.dcproject.component.article.database.ArticleForUpdate
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.database.ArticleForView
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.article.routes.UpsertArticle.UpsertArticleRequest.Input import fr.dcproject.component.article.routes.UpsertArticle.UpsertArticleRequest.Input
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.notification.ArticleUpdateNotification import fr.dcproject.component.notification.ArticleUpdateNotification
import fr.dcproject.component.notification.Publisher import fr.dcproject.component.notification.Publisher
import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.database.WorkgroupRef
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -1,12 +1,14 @@
package fr.dcproject.component.auth package fr.dcproject.component.auth
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.auth.database.User
import fr.dcproject.component.auth.database.UserI
import fr.dcproject.component.citizen.database.CitizenRepository
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.auth.authentication import io.ktor.auth.authentication
import io.ktor.util.AttributeKey import io.ktor.util.AttributeKey
import io.ktor.util.pipeline.PipelineContext import io.ktor.util.pipeline.PipelineContext
import org.koin.core.context.GlobalContext import org.koin.core.context.GlobalContext
import fr.dcproject.component.citizen.Citizen as CitizenEntity import fr.dcproject.component.citizen.database.Citizen as CitizenEntity
class ForbiddenException(message: String) : Exception(message) class ForbiddenException(message: String) : Exception(message)

View File

@@ -2,6 +2,7 @@ package fr.dcproject.component.auth
import fr.dcproject.application.Configuration import fr.dcproject.application.Configuration
import fr.dcproject.common.email.Mailer import fr.dcproject.common.email.Mailer
import fr.dcproject.component.auth.database.UserRepository
import org.koin.dsl.module import org.koin.dsl.module
val authKoinModule = module { val authKoinModule = module {

View File

@@ -5,9 +5,9 @@ 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.email.Mailer import fr.dcproject.common.email.Mailer
import fr.dcproject.component.auth.jwt.makeToken import fr.dcproject.component.auth.jwt.makeToken
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.database.CitizenRepository
import fr.dcproject.component.citizen.CitizenWithEmail import fr.dcproject.component.citizen.database.CitizenWithEmail
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.database.CitizenWithUserI
import io.ktor.http.URLBuilder import io.ktor.http.URLBuilder
/** /**

View File

@@ -1,10 +1,10 @@
package fr.dcproject.component.auth package fr.dcproject.component.auth.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
import fr.dcproject.common.entity.UpdatedAt import fr.dcproject.common.entity.UpdatedAt
import fr.dcproject.component.auth.UserI.Roles import fr.dcproject.component.auth.database.UserI.Roles
import io.ktor.auth.Principal import io.ktor.auth.Principal
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.UUID import java.util.UUID

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.auth package fr.dcproject.component.auth.database
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI

View File

@@ -1,7 +1,7 @@
package fr.dcproject.component.auth.jwt package fr.dcproject.component.auth.jwt
import com.auth0.jwt.JWT import com.auth0.jwt.JWT
import fr.dcproject.component.auth.UserI import fr.dcproject.component.auth.database.UserI
/** /**
* Produce a token for this combination of User and Account * Produce a token for this combination of User and Account

View File

@@ -1,7 +1,7 @@
package fr.dcproject.component.auth.jwt package fr.dcproject.component.auth.jwt
import fr.dcproject.component.auth.User import fr.dcproject.component.auth.database.User
import fr.dcproject.component.auth.UserRepository import fr.dcproject.component.auth.database.UserRepository
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.auth.Authentication import io.ktor.auth.Authentication
import io.ktor.auth.jwt.jwt import io.ktor.auth.jwt.jwt

View File

@@ -2,7 +2,7 @@ package fr.dcproject.component.auth.routes
import com.fasterxml.jackson.databind.exc.MismatchedInputException import com.fasterxml.jackson.databind.exc.MismatchedInputException
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.UserRepository import fr.dcproject.component.auth.database.UserRepository
import fr.dcproject.component.auth.jwt.makeToken import fr.dcproject.component.auth.jwt.makeToken
import fr.dcproject.component.auth.routes.Login.LoginRequest.Input import fr.dcproject.component.auth.routes.Login.LoginRequest.Input
import io.ktor.application.call import io.ktor.application.call

View File

@@ -2,14 +2,13 @@ package fr.dcproject.component.auth.routes
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.User import fr.dcproject.component.auth.database.UserForCreate
import fr.dcproject.component.auth.UserForCreate import fr.dcproject.component.auth.database.UserI
import fr.dcproject.component.auth.UserI
import fr.dcproject.component.auth.jwt.makeToken import fr.dcproject.component.auth.jwt.makeToken
import fr.dcproject.component.auth.routes.Register.RegisterRequest.Input import fr.dcproject.component.auth.routes.Register.RegisterRequest.Input
import fr.dcproject.component.citizen.CitizenForCreate import fr.dcproject.component.citizen.database.CitizenForCreate
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.database.CitizenRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.BadRequestException import io.ktor.features.BadRequestException
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -3,6 +3,7 @@ package fr.dcproject.component.citizen
import fr.dcproject.common.entity.DeletedAt import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.database.CitizenI
class CitizenAccessControl : AccessControl() { class CitizenAccessControl : AccessControl() {
fun <S> canView(subjects: List<S>, connectedCitizen: CitizenI?): AccessResponse where S : CitizenI, S : DeletedAt = fun <S> canView(subjects: List<S>, connectedCitizen: CitizenI?): AccessResponse where S : CitizenI, S : DeletedAt =

View File

@@ -1,5 +1,6 @@
package fr.dcproject.component.citizen package fr.dcproject.component.citizen
import fr.dcproject.component.citizen.database.CitizenRepository
import org.koin.dsl.module import org.koin.dsl.module
val citizenKoinModule = module { val citizenKoinModule = module {

View File

@@ -1,17 +1,17 @@
package fr.dcproject.component.citizen package fr.dcproject.component.citizen.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.DeletedAt import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
import fr.dcproject.component.auth.User import fr.dcproject.component.auth.database.User
import fr.dcproject.component.auth.UserCreator import fr.dcproject.component.auth.database.UserCreator
import fr.dcproject.component.auth.UserForCreate import fr.dcproject.component.auth.database.UserForCreate
import fr.dcproject.component.auth.UserI import fr.dcproject.component.auth.database.UserI
import fr.dcproject.component.auth.UserRef import fr.dcproject.component.auth.database.UserRef
import fr.dcproject.component.auth.UserWithUsername import fr.dcproject.component.auth.database.UserWithUsername
import fr.dcproject.component.citizen.CitizenI.Name import fr.dcproject.component.citizen.database.CitizenI.Name
import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.database.WorkgroupRef
import fr.postgresjson.entity.Serializable import fr.postgresjson.entity.Serializable
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.UUID import java.util.UUID

View File

@@ -1,7 +1,7 @@
package fr.dcproject.component.citizen package fr.dcproject.component.citizen.database
import fr.dcproject.component.auth.UserI import fr.dcproject.component.auth.database.UserI
import fr.dcproject.component.citizen.CitizenI.Name import fr.dcproject.component.citizen.database.CitizenI.Name
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

View File

@@ -2,12 +2,12 @@ package fr.dcproject.component.citizen.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.UserRepository
import fr.dcproject.component.auth.UserWithPassword
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.auth.database.UserRepository
import fr.dcproject.component.auth.database.UserWithPassword
import fr.dcproject.component.citizen.CitizenAccessControl import fr.dcproject.component.citizen.CitizenAccessControl
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import io.ktor.application.call import io.ktor.application.call
import io.ktor.auth.UserPasswordCredential import io.ktor.auth.UserPasswordCredential
import io.ktor.features.BadRequestException import io.ktor.features.BadRequestException

View File

@@ -3,7 +3,7 @@ package fr.dcproject.component.citizen.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenAccessControl import fr.dcproject.component.citizen.CitizenAccessControl
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.database.CitizenRepository
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI

View File

@@ -3,8 +3,8 @@ package fr.dcproject.component.citizen.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenAccessControl import fr.dcproject.component.citizen.CitizenAccessControl
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.database.CitizenRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.comment package fr.dcproject.component.comment
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.database.CommentArticleRepository
import fr.dcproject.component.comment.constitution.CommentConstitutionRepository import fr.dcproject.component.comment.constitution.database.CommentConstitutionRepository
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.database.CommentRepository
import org.koin.dsl.module import org.koin.dsl.module
val commentKoinModule = module { val commentKoinModule = module {

View File

@@ -1,13 +1,13 @@
package fr.dcproject.component.comment.article package fr.dcproject.component.comment.article.database
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
import fr.dcproject.common.entity.TargetI import fr.dcproject.common.entity.TargetI
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.database.ArticleForView
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.component.comment.generic.database.CommentForView
import fr.dcproject.component.comment.generic.CommentRepositoryAbs import fr.dcproject.component.comment.generic.database.CommentRepositoryAbs
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
import java.util.UUID import java.util.UUID

View File

@@ -2,13 +2,13 @@ package fr.dcproject.component.comment.article.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.database.CommentArticleRepository
import fr.dcproject.component.comment.article.routes.CreateCommentArticle.PostArticleCommentRequest.Input import fr.dcproject.component.comment.article.routes.CreateCommentArticle.PostArticleCommentRequest.Input
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.database.CommentForUpdate
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.comment.article.routes package fr.dcproject.component.comment.article.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.database.CommentArticleRepository
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI

View File

@@ -2,8 +2,8 @@ package fr.dcproject.component.comment.article.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.database.CommentArticleRepository
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -1,13 +1,13 @@
package fr.dcproject.component.comment.constitution package fr.dcproject.component.comment.constitution.database
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
import fr.dcproject.common.entity.TargetI import fr.dcproject.common.entity.TargetI
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.database.CommentArticleRepository
import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.component.comment.generic.database.CommentForView
import fr.dcproject.component.comment.generic.CommentRepositoryAbs import fr.dcproject.component.comment.generic.database.CommentRepositoryAbs
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
import java.util.UUID import java.util.UUID

View File

@@ -3,10 +3,10 @@ package fr.dcproject.component.comment.constitution.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.constitution.CommentConstitutionRepository import fr.dcproject.component.comment.constitution.database.CommentConstitutionRepository
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.database.CommentForUpdate
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -2,8 +2,8 @@ package fr.dcproject.component.comment.constitution.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.comment.constitution.CommentConstitutionRepository import fr.dcproject.component.comment.constitution.database.CommentConstitutionRepository
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -2,9 +2,9 @@ package fr.dcproject.component.comment.constitution.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.constitution.CommentConstitutionRepository import fr.dcproject.component.comment.constitution.database.CommentConstitutionRepository
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -5,7 +5,9 @@ import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.entity.HasTarget import fr.dcproject.common.entity.HasTarget
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.comment.generic.database.CommentI
import fr.dcproject.component.comment.generic.database.CommentWithParentI
class CommentAccessControl : AccessControl() { class CommentAccessControl : AccessControl() {
fun <S> canView(subjects: List<S>, citizen: CitizenI?): AccessResponse fun <S> canView(subjects: List<S>, citizen: CitizenI?): AccessResponse

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.comment.generic package fr.dcproject.component.comment.generic.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -9,7 +9,7 @@ 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.common.entity.UpdatedAt import fr.dcproject.common.entity.UpdatedAt
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.vote.entity.Votable import fr.dcproject.component.vote.entity.Votable
import fr.dcproject.component.vote.entity.VotableImp import fr.dcproject.component.vote.entity.VotableImp
import org.joda.time.DateTime import org.joda.time.DateTime

View File

@@ -1,11 +1,11 @@
package fr.dcproject.component.comment.generic package fr.dcproject.component.comment.generic.database
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
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.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.database.CommentArticleRepository
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

View File

@@ -5,9 +5,9 @@ import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.database.CommentForUpdate
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.database.CommentRef
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.database.CommentRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -3,8 +3,8 @@ package fr.dcproject.component.comment.generic.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.database.CommentRef
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.database.CommentRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -3,7 +3,7 @@ package fr.dcproject.component.comment.generic.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.database.CommentRepository
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI
import io.ktor.application.call import io.ktor.application.call

View File

@@ -3,8 +3,8 @@ package fr.dcproject.component.comment.generic.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentAccessControl import fr.dcproject.component.comment.generic.CommentAccessControl
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.database.CommentRef
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.database.CommentRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -4,7 +4,10 @@ import fr.dcproject.common.entity.CreatedBy
import fr.dcproject.common.entity.DeletedAt import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.constitution.database.ConstitutionS
import fr.dcproject.component.constitution.database.ConstitutionSimple
class ConstitutionAccessControl : AccessControl() { class ConstitutionAccessControl : AccessControl() {
fun canCreate(subject: ConstitutionS, citizen: CitizenI?): AccessResponse = when { fun canCreate(subject: ConstitutionS, citizen: CitizenI?): AccessResponse = when {

View File

@@ -1,5 +1,6 @@
package fr.dcproject.component.constitution package fr.dcproject.component.constitution
import fr.dcproject.component.constitution.database.ConstitutionRepository
import org.koin.dsl.module import org.koin.dsl.module
val constitutionKoinModule = module { val constitutionKoinModule = module {

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.constitution package fr.dcproject.component.constitution.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -7,11 +7,11 @@ import fr.dcproject.common.entity.Entity
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.common.entity.VersionableId import fr.dcproject.common.entity.VersionableId
import fr.dcproject.component.article.ArticleForListing import fr.dcproject.component.article.database.ArticleForListing
import fr.dcproject.component.article.ArticleI import fr.dcproject.component.article.database.ArticleI
import fr.dcproject.component.citizen.CitizenCreator import fr.dcproject.component.citizen.database.CitizenCreator
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.database.CitizenWithUserI
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple import fr.dcproject.component.constitution.database.ConstitutionSimple.TitleSimple
import java.util.UUID import java.util.UUID
class Constitution( class Constitution(

View File

@@ -1,15 +1,15 @@
package fr.dcproject.component.constitution package fr.dcproject.component.constitution.database
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.database.CitizenWithUserI
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple import fr.dcproject.component.constitution.database.ConstitutionSimple.TitleSimple
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
import fr.postgresjson.repository.RepositoryI.Direction import fr.postgresjson.repository.RepositoryI.Direction
import net.pearx.kasechange.toSnakeCase import net.pearx.kasechange.toSnakeCase
import java.util.UUID import java.util.UUID
import fr.dcproject.component.constitution.Constitution as ConstitutionEntity import fr.dcproject.component.constitution.database.Constitution as ConstitutionEntity
class ConstitutionRepository(override var requester: Requester) : RepositoryI { class ConstitutionRepository(override var requester: Requester) : RepositoryI {
fun findById(id: UUID): ConstitutionEntity? { fun findById(id: UUID): ConstitutionEntity? {

View File

@@ -3,15 +3,15 @@ package fr.dcproject.component.constitution.routes
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.database.Citizen
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.database.CitizenWithUserI
import fr.dcproject.component.constitution.ConstitutionAccessControl import fr.dcproject.component.constitution.ConstitutionAccessControl
import fr.dcproject.component.constitution.ConstitutionRepository import fr.dcproject.component.constitution.database.ConstitutionRepository
import fr.dcproject.component.constitution.ConstitutionSimple import fr.dcproject.component.constitution.database.ConstitutionSimple
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple import fr.dcproject.component.constitution.database.ConstitutionSimple.TitleSimple
import fr.dcproject.component.constitution.routes.CreateConstitution.PostConstitutionRequest.Input import fr.dcproject.component.constitution.routes.CreateConstitution.PostConstitutionRequest.Input
import fr.dcproject.component.constitution.routes.CreateConstitution.PostConstitutionRequest.Input.Title import fr.dcproject.component.constitution.routes.CreateConstitution.PostConstitutionRequest.Input.Title
import io.ktor.application.call import io.ktor.application.call

View File

@@ -3,7 +3,7 @@ package fr.dcproject.component.constitution.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.constitution.ConstitutionAccessControl import fr.dcproject.component.constitution.ConstitutionAccessControl
import fr.dcproject.component.constitution.ConstitutionRepository import fr.dcproject.component.constitution.database.ConstitutionRepository
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI

View File

@@ -3,8 +3,8 @@ package fr.dcproject.component.constitution.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.constitution.ConstitutionAccessControl import fr.dcproject.component.constitution.ConstitutionAccessControl
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.constitution.ConstitutionRepository import fr.dcproject.component.constitution.database.ConstitutionRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -2,7 +2,9 @@ package fr.dcproject.component.follow
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.follow.database.FollowForView
import fr.dcproject.component.follow.database.FollowI
class FollowAccessControl : AccessControl() { class FollowAccessControl : AccessControl() {
fun canCreate(subject: FollowI, citizen: CitizenI?): AccessResponse { fun canCreate(subject: FollowI, citizen: CitizenI?): AccessResponse {

View File

@@ -1,5 +1,7 @@
package fr.dcproject.component.follow package fr.dcproject.component.follow
import fr.dcproject.component.follow.database.FollowArticleRepository
import fr.dcproject.component.follow.database.FollowConstitutionRepository
import org.koin.dsl.module import org.koin.dsl.module
val followKoinModule = module { val followKoinModule = module {

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.follow package fr.dcproject.component.follow.database
import fr.dcproject.common.entity.Created import fr.dcproject.common.entity.Created
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -6,9 +6,9 @@ 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.component.citizen.CitizenCreator import fr.dcproject.component.citizen.database.CitizenCreator
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import java.util.UUID import java.util.UUID
open class FollowForView<T : TargetI>( open class FollowForView<T : TargetI>(

View File

@@ -1,18 +1,18 @@
package fr.dcproject.component.follow package fr.dcproject.component.follow.database
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.common.entity.TargetRef import fr.dcproject.common.entity.TargetRef
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.database.ArticleForView
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
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
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
import java.util.UUID import java.util.UUID
import fr.dcproject.component.constitution.Constitution as ConstitutionEntity import fr.dcproject.component.constitution.database.Constitution as ConstitutionEntity
sealed class FollowRepository<IN : TargetRef, OUT : TargetRef>(override var requester: Requester) : RepositoryI { sealed class FollowRepository<IN : TargetRef, OUT : TargetRef>(override var requester: Requester) : RepositoryI {
open fun findByCitizen( open fun findByCitizen(

View File

@@ -1,12 +1,12 @@
package fr.dcproject.component.follow.routes.article package fr.dcproject.component.follow.routes.article
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowArticleRepository import fr.dcproject.component.follow.database.FollowArticleRepository
import fr.dcproject.component.follow.FollowForUpdate import fr.dcproject.component.follow.database.FollowForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -1,11 +1,11 @@
package fr.dcproject.component.follow.routes.article package fr.dcproject.component.follow.routes.article
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowArticleRepository import fr.dcproject.component.follow.database.FollowArticleRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -2,9 +2,9 @@ package fr.dcproject.component.follow.routes.article
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowArticleRepository import fr.dcproject.component.follow.database.FollowArticleRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location import io.ktor.locations.Location

View File

@@ -1,12 +1,12 @@
package fr.dcproject.component.follow.routes.article package fr.dcproject.component.follow.routes.article
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowArticleRepository import fr.dcproject.component.follow.database.FollowArticleRepository
import fr.dcproject.component.follow.FollowForUpdate import fr.dcproject.component.follow.database.FollowForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -3,10 +3,10 @@ package fr.dcproject.component.follow.routes.constitution
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowConstitutionRepository import fr.dcproject.component.follow.database.FollowConstitutionRepository
import fr.dcproject.component.follow.FollowForUpdate import fr.dcproject.component.follow.database.FollowForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -3,9 +3,9 @@ package fr.dcproject.component.follow.routes.constitution
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowConstitutionRepository import fr.dcproject.component.follow.database.FollowConstitutionRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -2,9 +2,9 @@ package fr.dcproject.component.follow.routes.constitution
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowConstitutionRepository import fr.dcproject.component.follow.database.FollowConstitutionRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location import io.ktor.locations.Location

View File

@@ -3,10 +3,10 @@ package fr.dcproject.component.follow.routes.constitution
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.follow.FollowAccessControl import fr.dcproject.component.follow.FollowAccessControl
import fr.dcproject.component.follow.FollowConstitutionRepository import fr.dcproject.component.follow.database.FollowConstitutionRepository
import fr.dcproject.component.follow.FollowForUpdate import fr.dcproject.component.follow.database.FollowForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -8,7 +8,7 @@ import com.fasterxml.jackson.datatype.joda.JodaModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue import com.fasterxml.jackson.module.kotlin.readValue
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.database.ArticleForView
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger

View File

@@ -7,9 +7,9 @@ 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.common.entity.TargetRef import fr.dcproject.common.entity.TargetRef
import fr.dcproject.component.follow.FollowArticleRepository import fr.dcproject.component.follow.database.FollowArticleRepository
import fr.dcproject.component.follow.FollowConstitutionRepository import fr.dcproject.component.follow.database.FollowConstitutionRepository
import fr.dcproject.component.follow.FollowForView import fr.dcproject.component.follow.database.FollowForView
import io.ktor.utils.io.errors.IOException import io.ktor.utils.io.errors.IOException
import io.lettuce.core.RedisClient import io.lettuce.core.RedisClient
import io.lettuce.core.api.async.RedisAsyncCommands import io.lettuce.core.api.async.RedisAsyncCommands

View File

@@ -6,11 +6,11 @@ import com.sendgrid.helpers.mail.objects.Email
import fr.dcproject.common.email.Mailer import fr.dcproject.common.email.Mailer
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
import fr.dcproject.common.entity.TargetRef import fr.dcproject.common.entity.TargetRef
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.article.ArticleWithTitleI import fr.dcproject.component.article.database.ArticleWithTitleI
import fr.dcproject.component.citizen.CitizenCreatorI import fr.dcproject.component.citizen.database.CitizenCreatorI
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.database.CitizenRepository
import fr.dcproject.component.follow.FollowForView import fr.dcproject.component.follow.database.FollowForView
import java.util.UUID import java.util.UUID
class NotificationEmailSender( class NotificationEmailSender(

View File

@@ -2,7 +2,7 @@ package fr.dcproject.component.notification
import com.fasterxml.jackson.core.JsonProcessingException import com.fasterxml.jackson.core.JsonProcessingException
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import io.ktor.http.cio.websocket.Frame import io.ktor.http.cio.websocket.Frame
import io.ktor.http.cio.websocket.Frame.Text import io.ktor.http.cio.websocket.Frame.Text
import io.ktor.http.cio.websocket.readText import io.ktor.http.cio.websocket.readText

View File

@@ -1,5 +1,7 @@
package fr.dcproject.component.opinion package fr.dcproject.component.opinion
import fr.dcproject.component.opinion.database.OpinionChoiceRepository
import fr.dcproject.component.opinion.database.OpinionRepositoryArticle
import org.koin.dsl.module import org.koin.dsl.module
val opinionKoinModule = module { val opinionKoinModule = module {

View File

@@ -5,8 +5,8 @@ import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.entity.HasTarget import fr.dcproject.common.entity.HasTarget
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.opinion.entity.OpinionI import fr.dcproject.component.opinion.database.OpinionI
class OpinionAccessControl : AccessControl() { class OpinionAccessControl : AccessControl() {

View File

@@ -2,8 +2,8 @@ package fr.dcproject.component.opinion
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.opinion.entity.OpinionChoiceI import fr.dcproject.component.opinion.database.OpinionChoiceI
class OpinionChoiceAccessControl : AccessControl() { class OpinionChoiceAccessControl : AccessControl() {
fun canView(subjects: List<OpinionChoiceI>, citizen: CitizenI?): AccessResponse = fun canView(subjects: List<OpinionChoiceI>, citizen: CitizenI?): AccessResponse =

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.opinion.entity package fr.dcproject.component.opinion.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -7,10 +7,10 @@ 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.CitizenCreator import fr.dcproject.component.citizen.database.CitizenCreator
import fr.dcproject.component.citizen.CitizenCreatorI import fr.dcproject.component.citizen.database.CitizenCreatorI
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import java.util.UUID import java.util.UUID
open class Opinion<T : TargetI>( open class Opinion<T : TargetI>(

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.opinion.entity package fr.dcproject.component.opinion.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.DeletedAt import fr.dcproject.common.entity.DeletedAt

View File

@@ -1,18 +1,17 @@
package fr.dcproject.component.opinion package fr.dcproject.component.opinion.database
import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.core.type.TypeReference
import fr.dcproject.common.entity.TargetRef import fr.dcproject.common.entity.TargetRef
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.opinion.entity.OpinionForUpdate
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
import net.pearx.kasechange.toSnakeCase import net.pearx.kasechange.toSnakeCase
import java.util.UUID import java.util.UUID
import fr.dcproject.component.citizen.Citizen as CitizenEntity import fr.dcproject.component.citizen.database.Citizen as CitizenEntity
import fr.dcproject.component.opinion.entity.Opinion as OpinionEntity import fr.dcproject.component.opinion.database.Opinion as OpinionEntity
import fr.dcproject.component.opinion.entity.OpinionChoice as OpinionChoiceEntity import fr.dcproject.component.opinion.database.OpinionChoice as OpinionChoiceEntity
open class OpinionChoiceRepository(override val requester: Requester) : RepositoryI { open class OpinionChoiceRepository(override val requester: Requester) : RepositoryI {
/** /**

View File

@@ -2,11 +2,11 @@ package fr.dcproject.component.opinion.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.toUUID import fr.dcproject.common.utils.toUUID
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.opinion.OpinionAccessControl import fr.dcproject.component.opinion.OpinionAccessControl
import fr.dcproject.component.opinion.entity.Opinion import fr.dcproject.component.opinion.database.Opinion
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location import io.ktor.locations.Location
@@ -14,7 +14,7 @@ import io.ktor.locations.get
import io.ktor.response.respond import io.ktor.response.respond
import io.ktor.routing.Route import io.ktor.routing.Route
import java.util.UUID import java.util.UUID
import fr.dcproject.component.opinion.OpinionRepositoryArticle as OpinionArticleRepository import fr.dcproject.component.opinion.database.OpinionRepositoryArticle as OpinionArticleRepository
@KtorExperimentalLocationsAPI @KtorExperimentalLocationsAPI
object GetCitizenOpinions { object GetCitizenOpinions {

View File

@@ -4,9 +4,9 @@ import fr.dcproject.common.entity.TargetRef
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.opinion.OpinionAccessControl import fr.dcproject.component.opinion.OpinionAccessControl
import fr.dcproject.component.opinion.entity.Opinion import fr.dcproject.component.opinion.database.Opinion
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
@@ -17,7 +17,7 @@ import io.ktor.locations.get
import io.ktor.response.respond import io.ktor.response.respond
import io.ktor.routing.Route import io.ktor.routing.Route
import java.util.UUID import java.util.UUID
import fr.dcproject.component.opinion.OpinionRepositoryArticle as OpinionArticleRepository import fr.dcproject.component.opinion.database.OpinionRepositoryArticle as OpinionArticleRepository
@KtorExperimentalLocationsAPI @KtorExperimentalLocationsAPI
object GetMyOpinionsArticle { object GetMyOpinionsArticle {

View File

@@ -3,8 +3,8 @@ package fr.dcproject.component.opinion.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.opinion.OpinionChoiceAccessControl import fr.dcproject.component.opinion.OpinionChoiceAccessControl
import fr.dcproject.component.opinion.OpinionChoiceRepository import fr.dcproject.component.opinion.database.OpinionChoiceRef
import fr.dcproject.component.opinion.entity.OpinionChoiceRef import fr.dcproject.component.opinion.database.OpinionChoiceRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -3,7 +3,7 @@ package fr.dcproject.component.opinion.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.opinion.OpinionChoiceAccessControl import fr.dcproject.component.opinion.OpinionChoiceAccessControl
import fr.dcproject.component.opinion.OpinionChoiceRepository import fr.dcproject.component.opinion.database.OpinionChoiceRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location import io.ktor.locations.Location

View File

@@ -3,12 +3,12 @@ package fr.dcproject.component.opinion.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.common.utils.toUUID import fr.dcproject.common.utils.toUUID
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.opinion.OpinionAccessControl import fr.dcproject.component.opinion.OpinionAccessControl
import fr.dcproject.component.opinion.entity.OpinionChoiceRef import fr.dcproject.component.opinion.database.OpinionChoiceRef
import fr.dcproject.component.opinion.entity.OpinionForUpdate import fr.dcproject.component.opinion.database.OpinionForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
@@ -17,7 +17,7 @@ import io.ktor.locations.put
import io.ktor.response.respond import io.ktor.response.respond
import io.ktor.routing.Route import io.ktor.routing.Route
import java.util.UUID import java.util.UUID
import fr.dcproject.component.opinion.OpinionRepositoryArticle as OpinionArticleRepository import fr.dcproject.component.opinion.database.OpinionRepositoryArticle as OpinionArticleRepository
@KtorExperimentalLocationsAPI @KtorExperimentalLocationsAPI
object OpinionArticle { object OpinionArticle {

View File

@@ -1,8 +1,8 @@
package fr.dcproject.component.views package fr.dcproject.component.views
import fr.dcproject.application.Configuration import fr.dcproject.application.Configuration
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.article.ArticleViewManager
import fr.dcproject.component.article.database.ArticleForView
import org.apache.http.HttpHost import org.apache.http.HttpHost
import org.elasticsearch.client.RestClient import org.elasticsearch.client.RestClient
import org.koin.dsl.module import org.koin.dsl.module

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.views package fr.dcproject.component.views
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.views.entity.ViewAggregation import fr.dcproject.component.views.entity.ViewAggregation
import org.elasticsearch.client.Response import org.elasticsearch.client.Response
import org.joda.time.DateTime import org.joda.time.DateTime

View File

@@ -1,5 +1,9 @@
package fr.dcproject.component.vote package fr.dcproject.component.vote
import fr.dcproject.component.vote.database.VoteArticleRepository
import fr.dcproject.component.vote.database.VoteCommentRepository
import fr.dcproject.component.vote.database.VoteConstitutionRepository
import fr.dcproject.component.vote.database.VoteRepository
import org.koin.dsl.module import org.koin.dsl.module
val voteKoinModule = module { val voteKoinModule = module {

View File

@@ -4,9 +4,9 @@ import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.entity.TargetI import fr.dcproject.common.entity.TargetI
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.vote.entity.VoteForUpdateI import fr.dcproject.component.vote.database.VoteForUpdateI
import fr.dcproject.component.vote.entity.VoteForView as VoteEntity import fr.dcproject.component.vote.database.VoteForView as VoteEntity
class VoteAccessControl : AccessControl() { class VoteAccessControl : AccessControl() {
fun <S> canCreate(subject: VoteForUpdateI<S, *>, citizen: CitizenI?): AccessResponse where S : DeletedAt, S : TargetI = when { fun <S> canCreate(subject: VoteForUpdateI<S, *>, citizen: CitizenI?): AccessResponse where S : DeletedAt, S : TargetI = when {

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.vote.entity package fr.dcproject.component.vote.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -7,9 +7,9 @@ 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.UpdatedAt import fr.dcproject.common.entity.UpdatedAt
import fr.dcproject.component.citizen.CitizenCreator import fr.dcproject.component.citizen.database.CitizenCreator
import fr.dcproject.component.citizen.CitizenCreatorI import fr.dcproject.component.citizen.database.CitizenCreatorI
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import java.util.UUID import java.util.UUID
class VoteForView<T : TargetI>( class VoteForView<T : TargetI>(

View File

@@ -1,21 +1,20 @@
package fr.dcproject.component.vote package fr.dcproject.component.vote.database
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.TargetI
import fr.dcproject.common.entity.TargetRef import fr.dcproject.common.entity.TargetRef
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.database.ArticleForView
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.component.comment.generic.database.CommentForView
import fr.dcproject.component.constitution.Constitution import fr.dcproject.component.constitution.database.Constitution
import fr.dcproject.component.vote.entity.VoteAggregation import fr.dcproject.component.vote.entity.VoteAggregation
import fr.dcproject.component.vote.entity.VoteForUpdateI
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
import java.util.UUID import java.util.UUID
import fr.dcproject.component.citizen.Citizen as CitizenEntity import fr.dcproject.component.citizen.database.Citizen as CitizenEntity
import fr.dcproject.component.vote.entity.VoteForView as VoteEntity import fr.dcproject.component.vote.database.VoteForView as VoteEntity
abstract class VoteRepositoryAbs<T : TargetI>(override var requester: Requester) : RepositoryI { abstract class VoteRepositoryAbs<T : TargetI>(override var requester: Requester) : RepositoryI {
fun vote(vote: VoteForUpdateI<T, *>, anonymous: Boolean? = null): VoteAggregation { fun vote(vote: VoteForUpdateI<T, *>, anonymous: Boolean? = null): VoteAggregation {

View File

@@ -3,9 +3,9 @@ package fr.dcproject.component.vote.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.toUUID import fr.dcproject.common.utils.toUUID
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.vote.VoteAccessControl import fr.dcproject.component.vote.VoteAccessControl
import fr.dcproject.component.vote.VoteRepository import fr.dcproject.component.vote.database.VoteRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location import io.ktor.locations.Location

View File

@@ -2,9 +2,9 @@ package fr.dcproject.component.vote.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.vote.VoteAccessControl import fr.dcproject.component.vote.VoteAccessControl
import fr.dcproject.component.vote.VoteArticleRepository import fr.dcproject.component.vote.database.VoteArticleRepository
import fr.dcproject.routes.PaginatedRequest import fr.dcproject.routes.PaginatedRequest
import fr.dcproject.routes.PaginatedRequestI import fr.dcproject.routes.PaginatedRequestI
import io.ktor.application.call import io.ktor.application.call

View File

@@ -2,13 +2,13 @@ package fr.dcproject.component.vote.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.database.ArticleRef
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.database.ArticleRepository
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.vote.VoteAccessControl import fr.dcproject.component.vote.VoteAccessControl
import fr.dcproject.component.vote.VoteArticleRepository import fr.dcproject.component.vote.database.VoteArticleRepository
import fr.dcproject.component.vote.entity.VoteForUpdate import fr.dcproject.component.vote.database.VoteForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -4,10 +4,10 @@ import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.database.CommentRepository
import fr.dcproject.component.vote.VoteAccessControl import fr.dcproject.component.vote.VoteAccessControl
import fr.dcproject.component.vote.VoteCommentRepository import fr.dcproject.component.vote.database.VoteCommentRepository
import fr.dcproject.component.vote.entity.VoteForUpdate import fr.dcproject.component.vote.database.VoteForUpdate
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -4,11 +4,11 @@ import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.constitution.ConstitutionRef import fr.dcproject.component.constitution.database.ConstitutionRef
import fr.dcproject.component.constitution.ConstitutionRepository import fr.dcproject.component.constitution.database.ConstitutionRepository
import fr.dcproject.component.vote.VoteAccessControl import fr.dcproject.component.vote.VoteAccessControl
import fr.dcproject.component.vote.VoteConstitutionRepository import fr.dcproject.component.vote.database.VoteConstitutionRepository
import fr.dcproject.component.vote.entity.VoteForUpdate import fr.dcproject.component.vote.database.VoteForUpdate
import fr.dcproject.component.vote.routes.VoteConstitution.ConstitutionVoteRequest.Input import fr.dcproject.component.vote.routes.VoteConstitution.ConstitutionVoteRequest.Input
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException

View File

@@ -1,5 +1,6 @@
package fr.dcproject.component.workgroup package fr.dcproject.component.workgroup
import fr.dcproject.component.workgroup.database.WorkgroupRepository
import org.koin.dsl.module import org.koin.dsl.module
val workgroupKoinModule = module { val workgroupKoinModule = module {

View File

@@ -2,8 +2,10 @@ package fr.dcproject.component.workgroup
import fr.dcproject.common.security.AccessControl import fr.dcproject.common.security.AccessControl
import fr.dcproject.common.security.AccessResponse import fr.dcproject.common.security.AccessResponse
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.workgroup.WorkgroupWithMembersI.Member.Role import fr.dcproject.component.workgroup.database.WorkgroupI
import fr.dcproject.component.workgroup.database.WorkgroupWithAuthI
import fr.dcproject.component.workgroup.database.WorkgroupWithMembersI.Member.Role
class WorkgroupAccessControl : AccessControl() { class WorkgroupAccessControl : AccessControl() {
fun canCreate(subject: WorkgroupI, citizen: CitizenI?): AccessResponse { fun canCreate(subject: WorkgroupI, citizen: CitizenI?): AccessResponse {

View File

@@ -1,4 +1,4 @@
package fr.dcproject.component.workgroup package fr.dcproject.component.workgroup.database
import fr.dcproject.common.entity.CreatedAt import fr.dcproject.common.entity.CreatedAt
import fr.dcproject.common.entity.CreatedBy import fr.dcproject.common.entity.CreatedBy
@@ -6,12 +6,12 @@ import fr.dcproject.common.entity.DeletedAt
import fr.dcproject.common.entity.Entity import fr.dcproject.common.entity.Entity
import fr.dcproject.common.entity.EntityI import fr.dcproject.common.entity.EntityI
import fr.dcproject.common.entity.UpdatedAt import fr.dcproject.common.entity.UpdatedAt
import fr.dcproject.component.auth.UserI import fr.dcproject.component.auth.database.UserI
import fr.dcproject.component.citizen.CitizenCreatorI import fr.dcproject.component.citizen.database.CitizenCreatorI
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.database.CitizenWithUserI
import fr.dcproject.component.workgroup.WorkgroupWithMembersI.Member import fr.dcproject.component.workgroup.database.WorkgroupWithMembersI.Member
import fr.dcproject.component.workgroup.WorkgroupWithMembersI.Member.Role import fr.dcproject.component.workgroup.database.WorkgroupWithMembersI.Member.Role
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.UUID import java.util.UUID

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.workgroup package fr.dcproject.component.workgroup.database
import fr.dcproject.component.citizen.CitizenCreator import fr.dcproject.component.citizen.database.CitizenCreator
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.database.CitizenI
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.workgroup.WorkgroupWithMembersI.Member import fr.dcproject.component.workgroup.database.WorkgroupWithMembersI.Member
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
import fr.postgresjson.entity.Parameter import fr.postgresjson.entity.Parameter
@@ -12,7 +12,7 @@ import fr.postgresjson.repository.RepositoryI.Direction
import fr.postgresjson.serializer.serialize import fr.postgresjson.serializer.serialize
import net.pearx.kasechange.toSnakeCase import net.pearx.kasechange.toSnakeCase
import java.util.UUID import java.util.UUID
import fr.dcproject.component.workgroup.WorkgroupForView as WorkgroupEntity import fr.dcproject.component.workgroup.database.WorkgroupForView as WorkgroupEntity
class WorkgroupRepository(override var requester: Requester) : RepositoryI { class WorkgroupRepository(override var requester: Requester) : RepositoryI {
fun findById(id: UUID): WorkgroupEntity<CitizenCreator>? { fun findById(id: UUID): WorkgroupEntity<CitizenCreator>? {

View File

@@ -5,8 +5,8 @@ import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupForUpdate import fr.dcproject.component.workgroup.database.WorkgroupForUpdate
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -3,7 +3,7 @@ package fr.dcproject.component.workgroup.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -4,8 +4,8 @@ import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupForUpdate import fr.dcproject.component.workgroup.database.WorkgroupForUpdate
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -3,8 +3,8 @@ package fr.dcproject.component.workgroup.routes
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.database.WorkgroupRef
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -4,7 +4,7 @@ import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.toUUID import fr.dcproject.common.utils.toUUID
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI
import io.ktor.application.call import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI

View File

@@ -3,10 +3,10 @@ package fr.dcproject.component.workgroup.routes.members
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupWithMembersI import fr.dcproject.component.workgroup.database.WorkgroupWithMembersI
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

View File

@@ -3,10 +3,10 @@ package fr.dcproject.component.workgroup.routes.members
import fr.dcproject.common.security.assert import fr.dcproject.common.security.assert
import fr.dcproject.common.utils.receiveOrBadRequest import fr.dcproject.common.utils.receiveOrBadRequest
import fr.dcproject.component.auth.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.database.CitizenRef
import fr.dcproject.component.workgroup.WorkgroupAccessControl import fr.dcproject.component.workgroup.WorkgroupAccessControl
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.database.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupWithMembersI import fr.dcproject.component.workgroup.database.WorkgroupWithMembersI
import io.ktor.application.ApplicationCall import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode

Some files were not shown because too many files have changed in this diff Show More