Remove converter for OpinionChoice

This commit is contained in:
2021-02-06 00:45:54 +01:00
parent 507698c7ea
commit 678bdf7087
5 changed files with 21 additions and 17 deletions

View File

@@ -44,15 +44,6 @@ val converters: ConverterDeclaration = {
// TODO remove converters of entities // TODO remove converters of entities
convert<OpinionChoice> {
decode { values, _ ->
val id = values.singleOrNull()?.let { UUID.fromString(it) }
?: throw InternalError("Cannot convert $values to UUID")
get<OpinionChoiceRepository>().findOpinionChoiceById(id)
?: throw NotFoundException("OpinionChoice $values not found")
}
}
convert<WorkgroupRef> { convert<WorkgroupRef> {
decode { values, _ -> decode { values, _ ->
values.singleOrNull()?.let { values.singleOrNull()?.let {

View File

@@ -2,14 +2,16 @@ package fr.dcproject.component.opinion
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.component.opinion.entity.OpinionChoice import fr.dcproject.component.opinion.entity.OpinionChoice
import fr.dcproject.component.opinion.entity.OpinionChoiceI
import fr.dcproject.component.opinion.entity.OpinionChoiceRef
import fr.dcproject.security.AccessControl import fr.dcproject.security.AccessControl
import fr.dcproject.security.AccessResponse import fr.dcproject.security.AccessResponse
class OpinionChoiceAccessControl : AccessControl() { class OpinionChoiceAccessControl : AccessControl() {
fun canView(subjects: List<OpinionChoice>, citizen: CitizenI?): AccessResponse = fun canView(subjects: List<OpinionChoiceI>, citizen: CitizenI?): AccessResponse =
canAll(subjects) { canView(it, citizen) } canAll(subjects) { canView(it, citizen) }
fun canView(subject: OpinionChoice, citizen: CitizenI?): AccessResponse { fun canView(subject: OpinionChoiceI, citizen: CitizenI?): AccessResponse {
return granted() return granted()
} }
} }

View File

@@ -5,6 +5,7 @@ import fr.postgresjson.entity.EntityCreatedAtImp
import fr.postgresjson.entity.EntityDeletedAt import fr.postgresjson.entity.EntityDeletedAt
import fr.postgresjson.entity.EntityDeletedAtImp import fr.postgresjson.entity.EntityDeletedAtImp
import fr.postgresjson.entity.UuidEntity import fr.postgresjson.entity.UuidEntity
import fr.postgresjson.entity.UuidEntityI
import java.util.UUID import java.util.UUID
class OpinionChoice( class OpinionChoice(
@@ -17,4 +18,7 @@ class OpinionChoice(
open class OpinionChoiceRef( open class OpinionChoiceRef(
id: UUID? id: UUID?
) : UuidEntity(id ?: UUID.randomUUID()) ) : OpinionChoiceI,
UuidEntity(id ?: UUID.randomUUID())
interface OpinionChoiceI : UuidEntityI

View File

@@ -2,25 +2,31 @@ package fr.dcproject.component.opinion.routes
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.entity.OpinionChoice import fr.dcproject.component.opinion.OpinionChoiceRepository
import fr.dcproject.component.opinion.entity.OpinionChoiceRef
import fr.dcproject.security.assert import fr.dcproject.security.assert
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location import io.ktor.locations.Location
import io.ktor.locations.get 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
@KtorExperimentalLocationsAPI @KtorExperimentalLocationsAPI
object GetOpinionChoice { object GetOpinionChoice {
@Location("/opinions/{opinionChoice}") @Location("/opinions/{opinionChoice}")
class OpinionChoiceRequest(val opinionChoice: OpinionChoice) class OpinionChoiceRequest(opinionChoice: UUID) {
val opinionChoice = OpinionChoiceRef(opinionChoice)
}
fun Route.getOpinionChoice(ac: OpinionChoiceAccessControl) { fun Route.getOpinionChoice(ac: OpinionChoiceAccessControl, opinionChoiceRepository: OpinionChoiceRepository) {
get<OpinionChoiceRequest> { get<OpinionChoiceRequest> {
val opinionChoice = opinionChoiceRepository.findOpinionChoiceById(it.opinionChoice.id) ?: throw NotFoundException("OpinionChoice ${it.opinionChoice.id} not found")
ac.assert { canView(it.opinionChoice, citizenOrNull) } ac.assert { canView(it.opinionChoice, citizenOrNull) }
call.respond(it.opinionChoice) call.respond(opinionChoice)
} }
} }
} }

View File

@@ -8,6 +8,7 @@ import fr.dcproject.component.opinion.routes.OpinionArticle.setOpinionOnArticle
import io.ktor.auth.authenticate import io.ktor.auth.authenticate
import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.routing.Routing import io.ktor.routing.Routing
import io.ktor.routing.get
import org.koin.ktor.ext.get import org.koin.ktor.ext.get
@KtorExperimentalLocationsAPI @KtorExperimentalLocationsAPI
@@ -16,7 +17,7 @@ fun Routing.installOpinionRoutes() {
getCitizenOpinions(get(), get()) getCitizenOpinions(get(), get())
getMyOpinionsArticle(get(), get()) getMyOpinionsArticle(get(), get())
setOpinionOnArticle(get(), get()) setOpinionOnArticle(get(), get())
getOpinionChoice(get()) getOpinionChoice(get(), get())
getOpinionChoices(get(), get()) getOpinionChoices(get(), get())
} }
} }