Remove Deprecated Article Entities

This commit is contained in:
2021-01-23 00:54:53 +01:00
parent 49a03a57cb
commit f34407962b
8 changed files with 35 additions and 65 deletions

View File

@@ -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<ArticleForView>(get()) }
// Mailer
single { Mailer(Configuration.sendGridKey) }

View File

@@ -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<UUID, Int>,
EntityCreatedAt by EntityCreatedAtImp(),
EntityDeletedAt by EntityDeletedAtImp(deletedAt),
ArticleRefVersioningI,
VersionableRef,
Opinionable,
Votable by VotableImp() {
val lastVersion: Boolean = false
@@ -66,7 +60,7 @@ interface ArticleForUpdateI<C : CitizenRef> : 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<CitizenRef>,
override val versionId: UUID = UUID.randomUUID(),
override val deletedAt: DateTime? = null,
) : ArticleRef(id),
ArticleForUpdateI<CitizenRef>,
ArticleAuthI<CitizenRef>,
ArticleRefVersioningI by ArticleRefVersioningImmutable(id, versionId = versionId ?: UUID.randomUUID()) {
VersionableRef {
val tags: List<String> = 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<CitizenRef>? = null
) : ArticleAuthI<CitizenBasicI>,
ArticleRefVersioning(id),
EntityCreatedAt by EntityCreatedAtImp(),
CreatedBy<CitizenBasicI> 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<CitizenCartI> {
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<UUID, Int> 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)

View File

@@ -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<ArticleRefVersioningI> {
class ArticleViewManager <A> (private val restClient: RestClient) : ViewManager<A> 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<Artic
"type": "article",
"user_ref": "$ref",
"ip": "$ip",
"id": "${article.id}",
"version_id": "${article.versionId}",
"id": "${entity.id}",
"version_id": "${entity.versionId}",
"citizen_id": "${citizen?.id}",
"view_at": "${dateTime.toIso()}"
}
@@ -49,7 +50,7 @@ class ArticleViewManager(private val restClient: RestClient) : ViewManager<Artic
/**
* Get article views aggregations from elasticsearch
*/
override fun getViewsCount(article: ArticleRefVersioningI): ViewAggregation {
override fun getViewsCount(entity: A): ViewAggregation {
val request = Request(
"GET",
"/views/_search"
@@ -63,7 +64,7 @@ class ArticleViewManager(private val restClient: RestClient) : ViewManager<Artic
"bool": {
"must": {
"term": {
"version_id": "${article.versionId}"
"version_id": "${entity.versionId}"
}
}
}

View File

@@ -53,7 +53,7 @@ object GetOneArticle {
}
}
fun Route.getOneArticle(viewManager: ArticleViewManager, ac: ArticleAccessControl) {
fun Route.getOneArticle(viewManager: ArticleViewManager<ArticleForView>, ac: ArticleAccessControl) {
get<ArticleRequest> {
ac.assert { canView(it.article, citizenOrNull) }

View File

@@ -34,7 +34,7 @@ object UpsertArticle {
val description: String,
val tags: List<String> = 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
)
}

View File

@@ -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<TitleSimple<ArticleSimple>> = mutableListOf(),
titles: MutableList<TitleSimple<ArticleForListing>> = mutableListOf(),
draft: Boolean = false,
lastVersion: Boolean = false,
override val createdBy: CitizenSimple
) : ConstitutionSimple<CitizenSimple, ConstitutionSimple.TitleSimple<ArticleSimple>>(
) : ConstitutionSimple<CitizenSimple, ConstitutionSimple.TitleSimple<ArticleForListing>>(
id,
title = title,
anonymous = anonymous,
@@ -37,8 +37,8 @@ class Constitution(
id: UUID = UUID.randomUUID(),
name: String,
rank: Int? = null,
override val articles: MutableList<ArticleSimple> = mutableListOf()
) : ConstitutionSimple.TitleSimple<ArticleSimple>(id, name, rank)
override val articles: MutableList<ArticleForListing> = mutableListOf()
) : ConstitutionSimple.TitleSimple<ArticleForListing>(id, name, rank)
}
open class ConstitutionSimple<Cr : CitizenWithUserI, T : ConstitutionSimple.TitleSimple<*>>(