Skip to content

Commit

Permalink
Add isGeometryComputedFromControls property to mission model
Browse files Browse the repository at this point in the history
  • Loading branch information
louptheron committed Jul 14, 2023
1 parent 858e7ee commit b204dec
Show file tree
Hide file tree
Showing 11 changed files with 94 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ data class MissionEntity(
val envActions: List<EnvActionEntity>? = listOf(),
val isClosed: Boolean,
val isDeleted: Boolean,
val isGeometryComputedFromControls: Boolean,
val missionSource: MissionSourceEnum,
val hasMissionOrder: Boolean,
val isUnderJdp: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ data class CreateOrUpdateMissionDataInput(
envActions = this.envActions,
hasMissionOrder = hasMissionOrder,
isUnderJdp = isUnderJdp,
isGeometryComputedFromControls = false
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ data class CreateOrUpdatePublicMissionDataInput(
val envActions: List<EnvActionEntity>? = null,
val hasMissionOrder: Boolean,
val isUnderJdp: Boolean,
val isGeometryComputedFromControls: Boolean
) {
fun toMissionEntity(): MissionEntity {
return MissionEntity(
Expand All @@ -45,6 +46,7 @@ data class CreateOrUpdatePublicMissionDataInput(
envActions = this.envActions,
hasMissionOrder = this.hasMissionOrder,
isUnderJdp = this.isUnderJdp,
isGeometryComputedFromControls = this.isGeometryComputedFromControls
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs

import fr.gouv.cacem.monitorenv.domain.entities.controlResources.ControlUnitEntity
import fr.gouv.cacem.monitorenv.domain.entities.missions.EnvActionEntity
import fr.gouv.cacem.monitorenv.domain.entities.missions.MissionEntity
import fr.gouv.cacem.monitorenv.domain.entities.missions.MissionSourceEnum
import fr.gouv.cacem.monitorenv.domain.entities.missions.MissionTypeEnum
import org.locationtech.jts.geom.MultiPolygon
import java.time.ZonedDateTime

data class PublicMissionDataOutput(
val id: Int,
val missionTypes: List<MissionTypeEnum>,
val controlUnits: List<ControlUnitEntity>? = listOf(),
val openBy: String? = null,
val closedBy: String? = null,
val observationsCacem: String? = null,
val observationsCnsp: String? = null,
val facade: String? = null,
val geom: MultiPolygon? = null,
val startDateTimeUtc: ZonedDateTime,
val endDateTimeUtc: ZonedDateTime? = null,
val envActions: List<EnvActionEntity>? = null,
val missionSource: MissionSourceEnum,
val isClosed: Boolean,
val hasMissionOrder: Boolean,
val isUnderJdp: Boolean,
val isGeometryComputedFromControls: Boolean
) {
companion object {
fun fromMission(mission: MissionEntity): PublicMissionDataOutput {
requireNotNull(mission.id) {
"a mission must have an id"
}

return PublicMissionDataOutput(
id = mission.id,
missionTypes = mission.missionTypes,
controlUnits = mission.controlUnits,
openBy = mission.openBy,
closedBy = mission.closedBy,
observationsCacem = mission.observationsCacem,
observationsCnsp = mission.observationsCnsp,
facade = mission.facade,
geom = mission.geom,
startDateTimeUtc = mission.startDateTimeUtc,
endDateTimeUtc = mission.endDateTimeUtc,
envActions = mission.envActions,
missionSource = mission.missionSource,
isClosed = mission.isClosed,
hasMissionOrder = mission.hasMissionOrder,
isUnderJdp = mission.isUnderJdp,
isGeometryComputedFromControls = mission.isGeometryComputedFromControls
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import fr.gouv.cacem.monitorenv.domain.use_cases.missions.GetMissionById
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.GetMissions
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.inputs.CreateOrUpdatePublicMissionDataInput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.MissionDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.PublicMissionDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
import io.swagger.v3.oas.annotations.tags.Tag
Expand Down Expand Up @@ -61,7 +62,7 @@ class ApiMissionsController(
@Parameter(description = "Facades")
@RequestParam(name = "seaFronts", required = false)
seaFronts: List<String>?,
): List<MissionDataOutput> {
): List<PublicMissionDataOutput> {
val missions = getMissions.execute(
startedAfterDateTime = startedAfterDateTime,
startedBeforeDateTime = startedBeforeDateTime,
Expand All @@ -72,18 +73,18 @@ class ApiMissionsController(
pageNumber = pageNumber,
pageSize = pageSize,
)
return missions.map { MissionDataOutput.fromMission(it) }
return missions.map { PublicMissionDataOutput.fromMission(it) }
}

@PostMapping("", consumes = ["application/json"])
@Operation(summary = "Create a new mission")
fun createMissionController(
@RequestBody
createMissionDataInput: CreateOrUpdatePublicMissionDataInput,
): MissionDataOutput {
): PublicMissionDataOutput {
val newMission = createMissionDataInput.toMissionEntity()
val createdMission = createOrUpdateMission.execute(mission = newMission)
return MissionDataOutput.fromMission(createdMission)
return PublicMissionDataOutput.fromMission(createdMission)
}

@GetMapping("/{missionId}")
Expand All @@ -92,10 +93,10 @@ class ApiMissionsController(
@PathParam("Mission id")
@PathVariable(name = "missionId")
missionId: Int,
): MissionDataOutput {
): PublicMissionDataOutput {
val mission = getMissionById.execute(missionId = missionId)

return MissionDataOutput.fromMission(mission)
return PublicMissionDataOutput.fromMission(mission)
}

@PostMapping(value = ["/{missionId}"], consumes = ["application/json"])
Expand All @@ -106,14 +107,14 @@ class ApiMissionsController(
missionId: Int,
@RequestBody
updateMissionDataInput: CreateOrUpdatePublicMissionDataInput,
): MissionDataOutput {
): PublicMissionDataOutput {
if ((updateMissionDataInput.id == null) || (missionId != updateMissionDataInput.id)) {
throw java.lang.IllegalArgumentException("missionId doesn't match with request param")
}
return createOrUpdateMission.execute(
mission = updateMissionDataInput.toMissionEntity(),
).let {
MissionDataOutput.fromMission(it)
PublicMissionDataOutput.fromMission(it)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ data class MissionModel(
val missionSource: MissionSourceEnum,
@Column(name = "has_mission_order", nullable = false)
var hasMissionOrder: Boolean,
@Column(name = "is_geometry_computed_from_controls", nullable = false)
var isGeometryComputedFromControls: Boolean,
@Column(name = "is_under_jdp", nullable = false)
var isUnderJdp: Boolean,
@OneToMany(
Expand Down Expand Up @@ -124,6 +126,7 @@ data class MissionModel(
missionSource = missionSource,
hasMissionOrder = hasMissionOrder,
isUnderJdp = isUnderJdp,
isGeometryComputedFromControls = isGeometryComputedFromControls,
envActions = envActions!!.map { it.toActionEntity(mapper) },
controlUnits = controlUnits?.map { unit ->
val savedUnitResources = controlResources
Expand Down Expand Up @@ -157,6 +160,7 @@ data class MissionModel(
missionSource = mission.missionSource,
hasMissionOrder = mission.hasMissionOrder,
isUnderJdp = mission.isUnderJdp,
isGeometryComputedFromControls = mission.isGeometryComputedFromControls
)

mission.envActions?.map {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE public.missions ADD COLUMN is_geometry_computed_from_controls boolean NOT NULL default false;
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ class CreateOrUpdateMissionUTests {
id = UUID.fromString("a6c4bd17-eb45-4504-ab15-7a18ea714a10"),
observations = "Quelqu'un aurait vu quelque chose quelque part à un certain moment."
)
)
),
isGeometryComputedFromControls = false
)

val expectedCreatedMission = missionToCreate.copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class MissionsControllerITests {
missionSource = MissionSourceEnum.MONITORENV,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
val newMissionRequest = CreateOrUpdateMissionDataInput(
missionTypes = listOf(MissionTypeEnum.LAND),
Expand Down Expand Up @@ -124,6 +125,7 @@ class MissionsControllerITests {
missionSource = MissionSourceEnum.MONITORENV,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
given(
this.getMonitorEnvMissions.execute(
Expand Down Expand Up @@ -158,6 +160,7 @@ class MissionsControllerITests {
missionSource = MissionSourceEnum.MONITORENV,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
// we test only if the route is called with the right arg
given(getMissionById.execute(requestedId)).willReturn(expectedFirstMission)
Expand All @@ -183,6 +186,7 @@ class MissionsControllerITests {
missionSource = MissionSourceEnum.MONITORENV,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
val envAction = EnvActionControlEntity(
id = UUID.fromString("bf9f4062-83d3-4a85-b89b-76c0ded6473d"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class ApiMissionsControllerITests {
missionSource = MissionSourceEnum.MONITORFISH,
hasMissionOrder = true,
isUnderJdp = true,
isGeometryComputedFromControls = false
)
val newMissionRequest = CreateOrUpdatePublicMissionDataInput(
missionTypes = listOf(MissionTypeEnum.LAND),
Expand All @@ -91,6 +92,7 @@ class ApiMissionsControllerITests {
isClosed = false,
hasMissionOrder = true,
isUnderJdp = true,
isGeometryComputedFromControls = false
)
val requestBody = objectMapper.writeValueAsString(newMissionRequest)
given(this.createOrUpdateMission.execute(mission = any())).willReturn(expectedNewMission)
Expand Down Expand Up @@ -126,6 +128,7 @@ class ApiMissionsControllerITests {
isClosed = false,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
given(
this.getMissions.execute(
Expand Down Expand Up @@ -160,6 +163,7 @@ class ApiMissionsControllerITests {
isClosed = false,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
// we test only if the route is called with the right arg
given(getMissionById.execute(requestedId)).willReturn(expectedFirstMission)
Expand All @@ -186,6 +190,7 @@ class ApiMissionsControllerITests {
missionSource = MissionSourceEnum.MONITORFISH,
hasMissionOrder = true,
isUnderJdp = true,
isGeometryComputedFromControls = false
)
val envAction = EnvActionControlEntity(
id = UUID.fromString("bf9f4062-83d3-4a85-b89b-76c0ded6473d"),
Expand All @@ -204,6 +209,7 @@ class ApiMissionsControllerITests {
isClosed = false,
hasMissionOrder = true,
isUnderJdp = true,
isGeometryComputedFromControls = false
)
given(this.createOrUpdateMission.execute(any())).willReturn(expectedUpdatedMission)
// When
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
resources = listOf(ControlResourceEntity(id = 8, name = "PAM Jeanne Barret")),
),
),
isGeometryComputedFromControls = false
)

// When
Expand Down Expand Up @@ -135,6 +136,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
resources = listOf(ControlResourceEntity(id = 8, name = "PAM Jeanne Barret")),
),
),
isGeometryComputedFromControls = false
)
jpaMissionRepository.save(newMission)

Expand Down Expand Up @@ -189,6 +191,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
resources = listOf(ControlResourceEntity(id = 123456, name = "PAM Jeanne Barret")),
),
),
isGeometryComputedFromControls = false
)

// When
Expand All @@ -214,6 +217,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
hasMissionOrder = false,
isUnderJdp = false,
controlUnits = listOf(ControlUnitEntity(id = 123456, name = "PAM Jeanne Barret", administration = "", isArchived = false, resources = listOf())),
isGeometryComputedFromControls = false
)

// When
Expand Down Expand Up @@ -459,6 +463,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
contact = null,
),
),
isGeometryComputedFromControls = false
)
val mission = jpaMissionRepository.findMissionById(10)

Expand Down Expand Up @@ -532,6 +537,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
missionSource = MissionSourceEnum.MONITORENV,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
// When
jpaMissionRepository.save(expectedUpdatedMission)
Expand Down Expand Up @@ -568,6 +574,7 @@ class JpaMissionRepositoryITests : AbstractDBTests() {
missionSource = MissionSourceEnum.MONITORENV,
hasMissionOrder = false,
isUnderJdp = false,
isGeometryComputedFromControls = false
)
// When
jpaMissionRepository.save(expectedUpdatedMission)
Expand Down

0 comments on commit b204dec

Please sign in to comment.