From f34407962b3f2f90a47fd93c682073621f878799 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Sat, 23 Jan 2021 00:54:53 +0100 Subject: [PATCH] Remove Deprecated Article Entities --- src/main/kotlin/application/KoinModule.kt | 3 +- src/main/kotlin/component/article/Article.kt | 53 +++---------------- .../component/article/ArticleViewManager.kt | 13 ++--- .../component/article/routes/GetOneArticle.kt | 2 +- .../component/article/routes/UpsertArticle.kt | 4 +- src/main/kotlin/entity/Constitution.kt | 10 ++-- src/test/kotlin/functional/ViewTest.kt | 13 +++-- src/test/kotlin/steps/ArticleSteps.kt | 2 +- 8 files changed, 35 insertions(+), 65 deletions(-) diff --git a/src/main/kotlin/application/KoinModule.kt b/src/main/kotlin/application/KoinModule.kt index 965a332..4787c26 100644 --- a/src/main/kotlin/application/KoinModule.kt +++ b/src/main/kotlin/application/KoinModule.kt @@ -9,6 +9,7 @@ import com.fasterxml.jackson.datatype.joda.JodaModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.rabbitmq.client.ConnectionFactory import fr.dcproject.component.article.ArticleAccessControl +import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.auth.PasswordlessAuth @@ -143,7 +144,7 @@ val KoinModule = module { ).build() } - single { ArticleViewManager(get()) } + single { ArticleViewManager(get()) } // Mailer single { Mailer(Configuration.sendGridKey) } diff --git a/src/main/kotlin/component/article/Article.kt b/src/main/kotlin/component/article/Article.kt index c814426..1a27967 100644 --- a/src/main/kotlin/component/article/Article.kt +++ b/src/main/kotlin/component/article/Article.kt @@ -1,13 +1,10 @@ package fr.dcproject.component.article -import fr.dcproject.component.citizen.CitizenBasic -import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenCartI import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.opinion.entity.Opinionable -import fr.dcproject.component.opinion.entity.OpinionableImp import fr.dcproject.component.opinion.entity.Opinions import fr.dcproject.component.vote.entity.Votable import fr.dcproject.component.vote.entity.VotableImp @@ -16,18 +13,15 @@ import fr.dcproject.component.workgroup.WorkgroupCartI import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.WorkgroupSimple import fr.dcproject.entity.CreatedBy -import fr.dcproject.entity.CreatedByImp import fr.dcproject.entity.TargetI import fr.dcproject.entity.TargetRef import fr.dcproject.entity.VersionableRef -import fr.dcproject.entity.VersionableRefImp import fr.postgresjson.entity.EntityCreatedAt import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityDeletedAt import fr.postgresjson.entity.EntityDeletedAtImp import fr.postgresjson.entity.EntityVersioning import fr.postgresjson.entity.UuidEntityI -import fr.postgresjson.entity.UuidEntityVersioning import org.joda.time.DateTime import java.util.UUID @@ -51,7 +45,7 @@ data class ArticleForView( EntityVersioning, EntityCreatedAt by EntityCreatedAtImp(), EntityDeletedAt by EntityDeletedAtImp(deletedAt), - ArticleRefVersioningI, + VersionableRef, Opinionable, Votable by VotableImp() { val lastVersion: Boolean = false @@ -66,7 +60,7 @@ interface ArticleForUpdateI : ArticleI, ArticleWithTitleI, Versi } class ArticleForUpdate( - id: UUID? = null, + override val id: UUID = UUID.randomUUID(), override val title: String, override val anonymous: Boolean = true, override val content: String, @@ -75,30 +69,15 @@ class ArticleForUpdate( override val draft: Boolean = false, override val createdBy: CitizenRef, override val workgroup: WorkgroupRef? = null, - versionId: UUID? = null, - override val deletedAt: DateTime? = null -) : ArticleForUpdateI, + override val versionId: UUID = UUID.randomUUID(), + override val deletedAt: DateTime? = null, +) : ArticleRef(id), + ArticleForUpdateI, ArticleAuthI, - ArticleRefVersioningI by ArticleRefVersioningImmutable(id, versionId = versionId ?: UUID.randomUUID()) { + VersionableRef { val tags: List = tags.distinct() - val isNew = versionId == null } -@Deprecated("") -open class ArticleSimple( - id: UUID = UUID.randomUUID(), - var title: String, - override val createdBy: CitizenBasic, - override var draft: Boolean = false, - var workgroup: WorkgroupSimple? = null -) : ArticleAuthI, - ArticleRefVersioning(id), - EntityCreatedAt by EntityCreatedAtImp(), - CreatedBy by CreatedByImp(createdBy), - EntityDeletedAt by EntityDeletedAtImp(), - Votable by VotableImp(), - Opinionable by OpinionableImp() - class ArticleForListing( id: UUID? = null, override val title: String, @@ -116,24 +95,6 @@ interface ArticleForListingI : ArticleWithTitleI, CreatedBy { val workgroup: WorkgroupCartI? } -@Deprecated("", ReplaceWith("ArticleRefVersioningImmutable")) -open class ArticleRefVersioning( - id: UUID = UUID.randomUUID(), - override var versionNumber: Int = 0, - versionId: UUID = UUID.randomUUID() -) : ArticleRefVersioningI, - ArticleRef(id), - EntityVersioning by UuidEntityVersioning(versionNumber, versionId) - -open class ArticleRefVersioningImmutable( - id: UUID? = null, - versionId: UUID = UUID.randomUUID() -) : ArticleRefVersioningI, - ArticleRef(id), - VersionableRef by VersionableRefImp(versionId) - -interface ArticleRefVersioningI : ArticleI, VersionableRef - open class ArticleRef( id: UUID? = null ) : ArticleI, TargetRef(id) diff --git a/src/main/kotlin/component/article/ArticleViewManager.kt b/src/main/kotlin/component/article/ArticleViewManager.kt index ab49dbb..660cab6 100644 --- a/src/main/kotlin/component/article/ArticleViewManager.kt +++ b/src/main/kotlin/component/article/ArticleViewManager.kt @@ -2,6 +2,7 @@ package fr.dcproject.component.article import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.views.ViewManager +import fr.dcproject.entity.VersionableRef import fr.dcproject.entity.ViewAggregation import fr.dcproject.utils.contentToString import fr.dcproject.utils.getJsonField @@ -15,11 +16,11 @@ import java.util.UUID /** * Wrapper for manage views with elasticsearch */ -class ArticleViewManager(private val restClient: RestClient) : ViewManager { +class ArticleViewManager (private val restClient: RestClient) : ViewManager where A : VersionableRef, A : ArticleI { /** * Add view on article to elasticsearch */ - override fun addView(ip: String, article: ArticleRefVersioningI, citizen: CitizenI?, dateTime: DateTime): Response? { + override fun addView(ip: String, entity: A, citizen: CitizenI?, dateTime: DateTime): Response? { val isLogged = (citizen != null).toString() val ref = citizen?.id ?: UUID.nameUUIDFromBytes(ip.toByteArray())!! val request = Request( @@ -34,8 +35,8 @@ class ArticleViewManager(private val restClient: RestClient) : ViewManager, ac: ArticleAccessControl) { get { ac.assert { canView(it.article, citizenOrNull) } diff --git a/src/main/kotlin/component/article/routes/UpsertArticle.kt b/src/main/kotlin/component/article/routes/UpsertArticle.kt index 816d27e..f4479b0 100644 --- a/src/main/kotlin/component/article/routes/UpsertArticle.kt +++ b/src/main/kotlin/component/article/routes/UpsertArticle.kt @@ -34,7 +34,7 @@ object UpsertArticle { val description: String, val tags: List = emptyList(), val draft: Boolean = false, - val versionId: UUID?, + val versionId: UUID, val workgroup: WorkgroupRef? = null ) } @@ -50,7 +50,7 @@ object UpsertArticle { tags = tags, draft = draft, createdBy = citizen, - workgroup = if (workgroup != null) workgroupRepository.findById(workgroup.id) else null, + workgroup = workgroup, versionId = versionId ) } diff --git a/src/main/kotlin/entity/Constitution.kt b/src/main/kotlin/entity/Constitution.kt index 84a25c4..a3862aa 100644 --- a/src/main/kotlin/entity/Constitution.kt +++ b/src/main/kotlin/entity/Constitution.kt @@ -1,7 +1,7 @@ package fr.dcproject.entity +import fr.dcproject.component.article.ArticleForListing import fr.dcproject.component.article.ArticleI -import fr.dcproject.component.article.ArticleSimple import fr.dcproject.component.citizen.CitizenSimple import fr.dcproject.component.citizen.CitizenWithUserI import fr.postgresjson.entity.EntityCreatedAt @@ -19,11 +19,11 @@ class Constitution( id: UUID = UUID.randomUUID(), title: String, anonymous: Boolean = true, - titles: MutableList> = mutableListOf(), + titles: MutableList> = mutableListOf(), draft: Boolean = false, lastVersion: Boolean = false, override val createdBy: CitizenSimple -) : ConstitutionSimple>( +) : ConstitutionSimple>( id, title = title, anonymous = anonymous, @@ -37,8 +37,8 @@ class Constitution( id: UUID = UUID.randomUUID(), name: String, rank: Int? = null, - override val articles: MutableList = mutableListOf() - ) : ConstitutionSimple.TitleSimple(id, name, rank) + override val articles: MutableList = mutableListOf() + ) : ConstitutionSimple.TitleSimple(id, name, rank) } open class ConstitutionSimple>( diff --git a/src/test/kotlin/functional/ViewTest.kt b/src/test/kotlin/functional/ViewTest.kt index 2dbd4ac..1bfe351 100644 --- a/src/test/kotlin/functional/ViewTest.kt +++ b/src/test/kotlin/functional/ViewTest.kt @@ -2,7 +2,7 @@ package functional import fr.dcproject.application.Env.TEST import fr.dcproject.application.module -import fr.dcproject.component.article.ArticleRefVersioning +import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.citizen.CitizenRef import io.ktor.locations.KtorExperimentalLocationsAPI @@ -23,11 +23,18 @@ import java.util.UUID class ViewTest { @Test fun `test View Article`() { - val article = ArticleRefVersioning(id = UUID.randomUUID(), versionId = UUID.randomUUID()) + val article = ArticleForView( + id = UUID.randomUUID(), + versionId = UUID.randomUUID(), + createdBy = CitizenRef(), + content = "", + description = "", + title = "" + ) val citizenRef = CitizenRef() withTestApplication({ module(TEST) }) { - val viewManager: ArticleViewManager = application.get() + val viewManager: ArticleViewManager = application.get() /* Get view before */ val startView = viewManager.getViewsCount(article) diff --git a/src/test/kotlin/steps/ArticleSteps.kt b/src/test/kotlin/steps/ArticleSteps.kt index 518d395..ea1442b 100644 --- a/src/test/kotlin/steps/ArticleSteps.kt +++ b/src/test/kotlin/steps/ArticleSteps.kt @@ -71,7 +71,7 @@ class ArticleSteps : En, KoinTest { } val article = ArticleForUpdate( - id = id ?: params?.get("id")?.toUUID(), + id = id ?: params?.get("id")?.toUUID() ?: UUID.randomUUID(), title = "hello", content = "bla bla bla", description = "A super article",