Split Entities for remove nullable variables

This commit is contained in:
2020-01-28 11:08:43 +01:00
parent 3cdd1f3a46
commit 813d6857e9
52 changed files with 569 additions and 287 deletions

View File

@@ -1,5 +1,7 @@
package fr.dcproject.repository
import fr.dcproject.entity.ArticleFull
import fr.dcproject.entity.ArticleSimple
import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester
import fr.postgresjson.entity.Parameter
@@ -28,7 +30,7 @@ class Article(override var requester: Requester) : RepositoryI {
direction: Direction? = null,
search: String? = null,
filter: Filter = Filter()
): Paginated<ArticleEntity> {
): Paginated<ArticleSimple> {
return requester
.getFunction("find_articles")
.select(
@@ -40,7 +42,7 @@ class Article(override var requester: Requester) : RepositoryI {
)
}
fun upsert(article: ArticleEntity): ArticleEntity? {
fun upsert(article: ArticleFull): ArticleEntity? {
return requester
.getFunction("upsert_article")
.selectOne("resource" to article)

View File

@@ -1,5 +1,8 @@
package fr.dcproject.repository
import fr.dcproject.entity.CitizenBasic
import fr.dcproject.entity.CitizenFull
import fr.dcproject.entity.UserI
import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester
import fr.postgresjson.repository.RepositoryI
@@ -7,7 +10,6 @@ import fr.postgresjson.repository.RepositoryI.Direction
import net.pearx.kasechange.toSnakeCase
import java.util.*
import fr.dcproject.entity.Citizen as CitizenEntity
import fr.dcproject.entity.User as UserEntity
class Citizen(override var requester: Requester) : RepositoryI {
fun findById(id: UUID, withUser: Boolean = false): CitizenEntity? {
@@ -16,7 +18,7 @@ class Citizen(override var requester: Requester) : RepositoryI {
.selectOne("id" to id)
}
fun findByUser(user: UserEntity): CitizenEntity? {
fun findByUser(user: UserI): CitizenEntity? {
return requester
.getFunction("find_citizen_by_user_id")
.selectOne("user_id" to user.id)
@@ -40,7 +42,7 @@ class Citizen(override var requester: Requester) : RepositoryI {
sort: String? = null,
direction: Direction? = null,
search: String? = null
): Paginated<CitizenEntity> {
): Paginated<CitizenBasic> {
return requester
.getFunction("find_citizens")
.select(
@@ -51,13 +53,13 @@ class Citizen(override var requester: Requester) : RepositoryI {
)
}
fun upsert(citizen: CitizenEntity): CitizenEntity? {
fun upsert(citizen: CitizenFull): CitizenEntity? {
return requester
.getFunction("upsert_citizen")
.selectOne("resource" to citizen)
}
fun insertWithUser(citizen: CitizenEntity): CitizenEntity? {
fun insertWithUser(citizen: CitizenFull): CitizenEntity? {
return requester
.getFunction("insert_citizen_with_user")
.selectOne("resource" to citizen)

View File

@@ -1,16 +1,18 @@
package fr.dcproject.repository
import fr.dcproject.entity.ArticleRef
import fr.dcproject.entity.TargetI
import fr.dcproject.entity.TargetRef
import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester
import fr.postgresjson.entity.mutable.UuidEntity
import fr.postgresjson.entity.immutable.UuidEntityI
import fr.postgresjson.repository.RepositoryI
import java.util.*
import fr.dcproject.entity.Article as ArticleEntity
import fr.dcproject.entity.Citizen as CitizenEntity
import fr.dcproject.entity.Comment as CommentEntity
import fr.dcproject.entity.Constitution as ConstitutionEntity
abstract class Comment <T : UuidEntity>(override var requester: Requester) : RepositoryI {
abstract class Comment <T : TargetI>(override var requester: Requester) : RepositoryI {
abstract fun findById(id: UUID): CommentEntity<T>?
abstract fun findByCitizen(
@@ -24,7 +26,7 @@ abstract class Comment <T : UuidEntity>(override var requester: Requester) : Rep
page: Int = 1,
limit: Int = 50
): Paginated<CommentEntity<T>> {
return findByParent(parent.id ?: error("comment must have an ID"), page, limit)
return findByParent(parent.id, page, limit)
}
open fun findByParent(
@@ -41,11 +43,11 @@ abstract class Comment <T : UuidEntity>(override var requester: Requester) : Rep
}
open fun findByTarget(
target: UuidEntity,
target: UuidEntityI,
page: Int = 1,
limit: Int = 50
): Paginated<CommentEntity<T>> {
return findByTarget(target.id ?: error("comment must have an ID"), page, limit)
return findByTarget(target.id, page, limit)
}
open fun findByTarget(
@@ -65,7 +67,7 @@ abstract class Comment <T : UuidEntity>(override var requester: Requester) : Rep
requester
.getFunction("comment")
.sendQuery(
"reference" to comment.targetReference,
"reference" to comment.target.reference,
"resource" to comment
)
}
@@ -80,8 +82,8 @@ abstract class Comment <T : UuidEntity>(override var requester: Requester) : Rep
}
}
class CommentGeneric(requester: Requester) : Comment<UuidEntity>(requester) {
override fun findById(id: UUID): CommentEntity<UuidEntity>? {
class CommentGeneric(requester: Requester) : Comment<TargetRef>(requester) {
override fun findById(id: UUID): CommentEntity<TargetRef>? {
return requester
.getFunction("find_comment_by_id")
.selectOne(mapOf("id" to id))
@@ -91,7 +93,7 @@ class CommentGeneric(requester: Requester) : Comment<UuidEntity>(requester) {
citizen: CitizenEntity,
page: Int,
limit: Int
): Paginated<CommentEntity<UuidEntity>> {
): Paginated<CommentEntity<TargetRef>> {
return requester.run {
getFunction("find_comments_by_citizen")
.select(page, limit,
@@ -101,8 +103,8 @@ class CommentGeneric(requester: Requester) : Comment<UuidEntity>(requester) {
}
}
class CommentArticle(requester: Requester) : Comment<ArticleEntity>(requester) {
override fun findById(id: UUID): CommentEntity<ArticleEntity>? {
class CommentArticle(requester: Requester) : Comment<ArticleRef>(requester) {
override fun findById(id: UUID): CommentEntity<ArticleRef>? {
return requester
.getFunction("find_comment_by_id")
.selectOne(mapOf("id" to id))
@@ -112,13 +114,12 @@ class CommentArticle(requester: Requester) : Comment<ArticleEntity>(requester) {
citizen: CitizenEntity,
page: Int,
limit: Int
): Paginated<CommentEntity<ArticleEntity>> {
val reference = ArticleEntity::class.simpleName!!.toLowerCase()
): Paginated<CommentEntity<ArticleRef>> {
return requester.run {
getFunction("find_comments_by_citizen")
.select(page, limit,
"created_by_id" to citizen.id,
"reference" to reference
"reference" to TargetI.getReference(ArticleRef::class)
)
}
}
@@ -136,12 +137,11 @@ class CommentConstitution(requester: Requester) : Comment<ConstitutionEntity>(re
page: Int,
limit: Int
): Paginated<CommentEntity<ConstitutionEntity>> {
val reference = ConstitutionEntity::class.simpleName!!.toLowerCase()
return requester.run {
getFunction("find_comments_by_citizen")
.select(page, limit,
"created_by_id" to citizen.id,
"reference" to reference
"reference" to TargetI.getReference(ConstitutionEntity::class)
)
}
}

View File

@@ -1,5 +1,8 @@
package fr.dcproject.repository
import fr.dcproject.entity.ArticleRef
import fr.dcproject.entity.CitizenSimple
import fr.dcproject.entity.ConstitutionSimple
import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester
import fr.postgresjson.repository.RepositoryI
@@ -31,7 +34,7 @@ class Constitution(override var requester: Requester) : RepositoryI {
)
}
fun upsert(constitution: ConstitutionEntity): ConstitutionEntity? {
fun upsert(constitution: ConstitutionSimple<CitizenSimple, ConstitutionSimple.TitleSimple<ArticleRef>>): ConstitutionEntity? {
return requester
.getFunction("upsert_constitution")
.selectOne("resource" to constitution)

View File

@@ -1,22 +1,22 @@
package fr.dcproject.repository
import fr.dcproject.entity.CitizenI
import fr.dcproject.entity.TargetI
import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester
import fr.postgresjson.entity.mutable.UuidEntity
import fr.postgresjson.repository.RepositoryI
import java.util.*
import fr.dcproject.entity.Article as ArticleEntity
import fr.dcproject.entity.Citizen as CitizenEntity
import fr.dcproject.entity.Constitution as ConstitutionEntity
import fr.dcproject.entity.Follow as FollowEntity
open class Follow <T : UuidEntity>(override var requester: Requester) : RepositoryI {
open class Follow <T : TargetI>(override var requester: Requester) : RepositoryI {
open fun findByCitizen(
citizen: CitizenEntity,
citizen: CitizenI,
page: Int = 1,
limit: Int = 50
): Paginated<FollowEntity<T>> =
findByCitizen(citizen.id ?: error("The citizen must have an id"), page, limit)
findByCitizen(citizen.id, page, limit)
open fun findByCitizen(
citizenId: UUID,
@@ -32,24 +32,22 @@ open class Follow <T : UuidEntity>(override var requester: Requester) : Reposito
}
fun follow(follow: FollowEntity<T>) {
val reference = follow.target::class.simpleName!!.toLowerCase()
requester
.getFunction("follow")
.sendQuery(
"reference" to reference,
"reference" to follow.target.reference,
"target_id" to follow.target.id,
"created_by_id" to follow.createdBy?.id
"created_by_id" to follow.createdBy.id
)
}
fun unfollow(follow: FollowEntity<T>) {
val reference = follow.target::class.simpleName!!.toLowerCase()
requester
.getFunction("unfollow")
.sendQuery(
"reference" to reference,
"reference" to follow.target.reference,
"target_id" to follow.target.id,
"created_by_id" to follow.createdBy?.id
"created_by_id" to follow.createdBy.id
)
}
}

View File

@@ -1,5 +1,6 @@
package fr.dcproject.repository
import fr.dcproject.entity.UserFull
import fr.postgresjson.connexion.Requester
import fr.postgresjson.repository.RepositoryI
import io.ktor.auth.UserPasswordCredential
@@ -30,7 +31,7 @@ class User(override var requester: Requester) : RepositoryI {
.selectOne("resource" to user)
}
fun changePassword(user: UserEntity) {
fun changePassword(user: UserFull) {
requester
.getFunction("change_user_password")
.sendQuery("resource" to user)

View File

@@ -1,34 +1,25 @@
package fr.dcproject.repository
import com.fasterxml.jackson.core.type.TypeReference
import fr.dcproject.entity.*
import fr.dcproject.entity.Article
import fr.dcproject.entity.Comment
import fr.dcproject.entity.Constitution
import fr.dcproject.entity.VoteAggregation
import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester
import fr.postgresjson.entity.mutable.UuidEntity
import fr.postgresjson.repository.RepositoryI
import java.util.*
import fr.dcproject.entity.Citizen as CitizenEntity
import fr.dcproject.entity.Vote as VoteEntity
open class Vote <T : UuidEntity>(override var requester: Requester) : RepositoryI {
open class Vote <T : TargetI>(override var requester: Requester) : RepositoryI {
fun vote(vote: VoteEntity<T>): VoteAggregation {
val target = vote.target
val reference = if (target is Comment<*>) {
target::class.simpleName!!.toLowerCase() +
"_on_" +
target.targetReference
} else {
target::class.simpleName!!.toLowerCase()
}
val author = vote.createdBy ?: error("vote must be contain an author")
val author = vote.createdBy
val anonymous = author.voteAnonymous
return requester
.getFunction("vote")
.selectOne(
"reference" to reference,
"reference" to vote.target.reference,
"target_id" to vote.target.id,
"note" to vote.note,
"created_by_id" to author.id,
@@ -56,12 +47,11 @@ open class Vote <T : UuidEntity>(override var requester: Requester) : Repository
citizen: CitizenEntity,
targets: List<UUID>
): List<VoteEntity<*>> {
val typeReference = object : TypeReference<List<VoteEntity<UuidEntity>>>() {}
val typeReference = object : TypeReference<List<VoteEntity<TargetRef>>>() {}
return requester.run {
val citizenId = citizen.id ?: error("The citizen must have an id")
getFunction("find_citizen_votes_by_target_ids")
.select(typeReference, mapOf(
"citizen_id" to citizenId,
"citizen_id" to citizen.id,
"ids" to targets
))
}
@@ -75,7 +65,7 @@ class VoteArticle(requester: Requester) : Vote<Article>(requester) {
limit: Int = 50
): Paginated<VoteEntity<Article>> =
findByCitizen(
citizen.id ?: error("The citizen must have an id"),
citizen.id,
"article",
object : TypeReference<List<VoteEntity<Article>>>() {},
page,
@@ -90,7 +80,7 @@ class VoteArticleComment(requester: Requester) : Vote<Comment<Article>>(requeste
limit: Int = 50
): Paginated<VoteEntity<Comment<Article>>> =
findByCitizen(
citizen.id ?: error("The citizen must have an id"),
citizen.id,
"article",
object : TypeReference<List<VoteEntity<Comment<Article>>>>() {},
page,
@@ -98,16 +88,16 @@ class VoteArticleComment(requester: Requester) : Vote<Comment<Article>>(requeste
)
}
class VoteComment(requester: Requester) : Vote<Comment<UuidEntity>>(requester) {
class VoteComment(requester: Requester) : Vote<Comment<TargetRef>>(requester) {
fun findByCitizen(
citizen: CitizenEntity,
page: Int = 1,
limit: Int = 50
): Paginated<VoteEntity<Comment<UuidEntity>>> =
): Paginated<VoteEntity<Comment<TargetRef>>> =
findByCitizen(
citizen.id ?: error("The citizen must have an id"),
citizen.id,
"article",
object : TypeReference<List<VoteEntity<Comment<UuidEntity>>>>() {},
object : TypeReference<List<VoteEntity<Comment<TargetRef>>>>() {},
page,
limit
)
@@ -120,7 +110,7 @@ class VoteConstitution(requester: Requester) : Vote<Constitution>(requester) {
limit: Int = 50
): Paginated<VoteEntity<Constitution>> =
findByCitizen(
citizen.id ?: error("The citizen must have an id"),
citizen.id,
"constitution",
object : TypeReference<List<VoteEntity<Constitution>>>() {},
page,