Big refactoring #77
@@ -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 {
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user