diff --git a/src/main/kotlin/application/Converters.kt b/src/main/kotlin/application/Converters.kt index 71f5fd7..5bcb880 100644 --- a/src/main/kotlin/application/Converters.kt +++ b/src/main/kotlin/application/Converters.kt @@ -44,15 +44,6 @@ val converters: ConverterDeclaration = { // TODO remove converters of entities - convert { - decode { values, _ -> - val id = values.singleOrNull()?.let { UUID.fromString(it) } - ?: throw InternalError("Cannot convert $values to UUID") - get().findOpinionChoiceById(id) - ?: throw NotFoundException("OpinionChoice $values not found") - } - } - convert { decode { values, _ -> values.singleOrNull()?.let { diff --git a/src/main/kotlin/component/opinion/OpinionChoiceAccessControl.kt b/src/main/kotlin/component/opinion/OpinionChoiceAccessControl.kt index ac3367b..a609c4b 100644 --- a/src/main/kotlin/component/opinion/OpinionChoiceAccessControl.kt +++ b/src/main/kotlin/component/opinion/OpinionChoiceAccessControl.kt @@ -2,14 +2,16 @@ package fr.dcproject.component.opinion import fr.dcproject.component.citizen.CitizenI 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.AccessResponse class OpinionChoiceAccessControl : AccessControl() { - fun canView(subjects: List, citizen: CitizenI?): AccessResponse = + fun canView(subjects: List, citizen: CitizenI?): AccessResponse = canAll(subjects) { canView(it, citizen) } - fun canView(subject: OpinionChoice, citizen: CitizenI?): AccessResponse { + fun canView(subject: OpinionChoiceI, citizen: CitizenI?): AccessResponse { return granted() } } diff --git a/src/main/kotlin/component/opinion/entity/OpinionChoice.kt b/src/main/kotlin/component/opinion/entity/OpinionChoice.kt index 660a4ca..54ad0ae 100644 --- a/src/main/kotlin/component/opinion/entity/OpinionChoice.kt +++ b/src/main/kotlin/component/opinion/entity/OpinionChoice.kt @@ -5,6 +5,7 @@ import fr.postgresjson.entity.EntityCreatedAtImp import fr.postgresjson.entity.EntityDeletedAt import fr.postgresjson.entity.EntityDeletedAtImp import fr.postgresjson.entity.UuidEntity +import fr.postgresjson.entity.UuidEntityI import java.util.UUID class OpinionChoice( @@ -17,4 +18,7 @@ class OpinionChoice( open class OpinionChoiceRef( id: UUID? -) : UuidEntity(id ?: UUID.randomUUID()) +) : OpinionChoiceI, + UuidEntity(id ?: UUID.randomUUID()) + +interface OpinionChoiceI : UuidEntityI diff --git a/src/main/kotlin/component/opinion/routes/GetOpinionChoice.kt b/src/main/kotlin/component/opinion/routes/GetOpinionChoice.kt index f1217c1..07ddb81 100644 --- a/src/main/kotlin/component/opinion/routes/GetOpinionChoice.kt +++ b/src/main/kotlin/component/opinion/routes/GetOpinionChoice.kt @@ -2,25 +2,31 @@ package fr.dcproject.component.opinion.routes import fr.dcproject.component.auth.citizenOrNull 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 io.ktor.application.call +import io.ktor.features.NotFoundException import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.Location import io.ktor.locations.get import io.ktor.response.respond import io.ktor.routing.Route +import java.util.UUID @KtorExperimentalLocationsAPI object GetOpinionChoice { @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 { + val opinionChoice = opinionChoiceRepository.findOpinionChoiceById(it.opinionChoice.id) ?: throw NotFoundException("OpinionChoice ${it.opinionChoice.id} not found") ac.assert { canView(it.opinionChoice, citizenOrNull) } - call.respond(it.opinionChoice) + call.respond(opinionChoice) } } } diff --git a/src/main/kotlin/component/opinion/routes/install.kt b/src/main/kotlin/component/opinion/routes/install.kt index 59851a1..7426941 100644 --- a/src/main/kotlin/component/opinion/routes/install.kt +++ b/src/main/kotlin/component/opinion/routes/install.kt @@ -8,6 +8,7 @@ import fr.dcproject.component.opinion.routes.OpinionArticle.setOpinionOnArticle import io.ktor.auth.authenticate import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.routing.Routing +import io.ktor.routing.get import org.koin.ktor.ext.get @KtorExperimentalLocationsAPI @@ -16,7 +17,7 @@ fun Routing.installOpinionRoutes() { getCitizenOpinions(get(), get()) getMyOpinionsArticle(get(), get()) setOpinionOnArticle(get(), get()) - getOpinionChoice(get()) + getOpinionChoice(get(), get()) getOpinionChoices(get(), get()) } }