Create route for Opinions

create OpinionRepository
create OpinionVoter
create OpinionChoiceRef
create extention String.toUUID() and List<String>.toUUID()
create OpinionAggregation
create interface RequestBuilderWithCreator for create entity by request
rename opinion_list to opinion_choice
create sql function find_citizen_opinions
fix sql function find_citizen_opinions_by_target_id
fix sql funciton find_opinion_choices
This commit is contained in:
2020-02-12 14:46:36 +01:00
parent ec6e39b130
commit 4a2d18ff87
24 changed files with 411 additions and 45 deletions

View File

@@ -6,9 +6,14 @@ import java.util.*
open class Opinion<T : TargetI>(
id: UUID = UUID.randomUUID(),
override val createdBy: CitizenBasic,
override var target: T,
var name: String
override val target: T,
val choice: OpinionChoice
) : ExtraI<T>,
UuidEntity(id),
EntityCreatedAt by EntityCreatedAtImp(),
EntityCreatedBy<CitizenBasicI> by EntityCreatedByImp(createdBy)
EntityCreatedBy<CitizenBasicI> by EntityCreatedByImp(createdBy) {
fun getName(): String = choice.name
}
typealias OpinionArticle = Opinion<Article>

View File

@@ -11,6 +11,10 @@ class OpinionChoice(
id: UUID,
val name: String,
val target: List<String>
) : UuidEntity(id),
) : OpinionChoiceRef(id),
EntityCreatedAt by EntityCreatedAtImp(),
EntityDeletedAt by EntityDeletedAtImp()
EntityDeletedAt by EntityDeletedAtImp()
open class OpinionChoiceRef(
id: UUID
) : UuidEntity(id)

View File

@@ -1,5 +1,11 @@
package fr.dcproject.entity
import fr.postgresjson.entity.EntityI
class OpinionAggregation(
override val entries: Set<Map.Entry<String, Int>> = emptySet()
) : AbstractMap<String, Int>(), EntityI
interface Opinionable {
val opinions: MutableMap<String, Int>
}

View File

@@ -0,0 +1,27 @@
package fr.dcproject.entity.request
import fr.dcproject.entity.Citizen
import fr.dcproject.entity.OpinionArticle
import fr.dcproject.entity.OpinionChoiceRef
import fr.dcproject.entity.TargetRef
import fr.dcproject.repository.Article
import fr.dcproject.repository.OpinionChoice
import fr.dcproject.utils.toUUID
import org.koin.core.KoinComponent
import org.koin.core.get
class ArticleOpinionRequest(
target: String,
opinionChoice: String
) : RequestBuilderWithCreator<Citizen, OpinionArticle>, KoinComponent {
val target = TargetRef(target.toUUID())
val opinionChoice = OpinionChoiceRef(opinionChoice.toUUID())
override fun create(citizen: Citizen): OpinionArticle {
return OpinionArticle(
choice = get<OpinionChoice>().findOpinionChoiceById(opinionChoice.id)!!,
target = get<Article>().findById(target.id)!!,
createdBy = citizen
)
}
}

View File

@@ -1,3 +1,14 @@
package fr.dcproject.entity.request
interface Request
import fr.dcproject.entity.CitizenRef
import fr.postgresjson.entity.EntityI
interface Request
interface RequestBuilder<E: EntityI> : Request {
fun create(): E
}
interface RequestBuilderWithCreator<C: CitizenRef, E: EntityI> : Request {
fun create(citizen: C): E
}