Big refactoring #77

Merged
flecomte merged 166 commits from refactoring-component-and-immutable into master 2021-03-24 19:06:07 +01:00
5 changed files with 21 additions and 17 deletions
Showing only changes of commit 678bdf7087 - Show all commits

View File

@@ -44,15 +44,6 @@ val converters: ConverterDeclaration = {
// 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> {
decode { values, _ ->
values.singleOrNull()?.let {

View File

@@ -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<OpinionChoice>, citizen: CitizenI?): AccessResponse =
fun canView(subjects: List<OpinionChoiceI>, citizen: CitizenI?): AccessResponse =
canAll(subjects) { canView(it, citizen) }
fun canView(subject: OpinionChoice, citizen: CitizenI?): AccessResponse {
fun canView(subject: OpinionChoiceI, citizen: CitizenI?): AccessResponse {
return granted()
}
}

View File

@@ -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

View File

@@ -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<OpinionChoiceRequest> {
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)
}
}
}

View File

@@ -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())
}
}