Skip to content

Commit

Permalink
[Missions] Ajout d'un booléen pour calculer automatiquement la zone d…
Browse files Browse the repository at this point in the history
…e missions à partir des contrôles (#664)

Lié à la PR MTES-MCT/monitorfish#2334
  • Loading branch information
louptheron committed Jul 18, 2023
2 parents 858e7ee + 51b849b commit 674f003
Show file tree
Hide file tree
Showing 35 changed files with 123 additions and 39 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
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api

import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.ApiError
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.MissingParameterApiError
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.ApiError
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.MissingParameterApiError
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.core.Ordered.HIGHEST_PRECEDENCE
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.inputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs

import fr.gouv.cacem.monitorenv.domain.entities.controlResources.ControlUnitEntity
import fr.gouv.cacem.monitorenv.domain.entities.missions.EnvActionEntity
Expand Down 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
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.amp.AMPEntity
import org.locationtech.jts.geom.MultiPolygon
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

class ApiError(val error: String, val type: String) {
constructor(exception: Throwable) : this(exception.cause?.message ?: "", exception.cause?.javaClass?.simpleName.toString())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.controlResources.ControlResourceEntity

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.controlThemes.ControlThemeEntity

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.controlResources.ControlUnitEntity

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import org.n52.jackson.datatype.jts.GeometrySerializer

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.health.Health

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

data class MissingParameterApiError(val error: String)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.controlResources.ControlUnitEntity
import fr.gouv.cacem.monitorenv.domain.entities.missions.EnvActionEntity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.natinfs.NatinfEntity

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.regulatoryAreas.RegulatoryAreaEntity
import org.locationtech.jts.geom.MultiPolygon
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs

import fr.gouv.cacem.monitorenv.domain.entities.semaphores.SemaphoreEntity
import org.locationtech.jts.geom.Point
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.inputs
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.publicapi.inputs

import fr.gouv.cacem.monitorenv.domain.entities.controlResources.ControlUnitEntity
import fr.gouv.cacem.monitorenv.domain.entities.missions.EnvActionEntity
Expand All @@ -8,7 +8,7 @@ import fr.gouv.cacem.monitorenv.domain.entities.missions.MissionTypeEnum
import org.locationtech.jts.geom.MultiPolygon
import java.time.ZonedDateTime

data class CreateOrUpdatePublicMissionDataInput(
data class CreateOrUpdateMissionDataInput(
val id: Int? = null,
val missionTypes: List<MissionTypeEnum>,
val controlUnits: List<ControlUnitEntity> = listOf(),
Expand All @@ -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.publicapi.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 MissionDataOutput(
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): MissionDataOutput {
requireNotNull(mission.id) {
"a mission must have an id"
}

return MissionDataOutput(
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 @@ -2,7 +2,7 @@ package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import com.fasterxml.jackson.databind.ObjectMapper
import fr.gouv.cacem.monitorenv.domain.use_cases.amps.GetAMPs
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.AMPDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.AMPDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import fr.gouv.cacem.monitorenv.domain.use_cases.controlThemes.GetControlThemeById
import fr.gouv.cacem.monitorenv.domain.use_cases.controlThemes.GetControlThemes
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.ControlThemeDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.ControlThemeDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import jakarta.websocket.server.PathParam
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import fr.gouv.cacem.monitorenv.domain.use_cases.controlResources.GetControlUnits
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.ControlUnitDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.ControlUnitDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import fr.gouv.cacem.monitorenv.domain.use_cases.healthcheck.GetHealthcheck
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.HealthDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.HealthDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import fr.gouv.cacem.monitorenv.domain.use_cases.missions.CreateOrUpdateMission
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.DeleteMission
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.GetMissionById
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.GetMonitorEnvMissions
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.inputs.CreateOrUpdateMissionDataInput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.MissionDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs.CreateOrUpdateMissionDataInput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.MissionDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
import io.swagger.v3.oas.annotations.tags.Tag
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import fr.gouv.cacem.monitorenv.domain.use_cases.natinfs.GetNatinfs
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.NatinfDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.NatinfDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import fr.gouv.cacem.monitorenv.domain.use_cases.regulatoryAreas.GetRegulatoryAreaById
import fr.gouv.cacem.monitorenv.domain.use_cases.regulatoryAreas.GetRegulatoryAreas
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.RegulatoryAreaDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.RegulatoryAreaDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import jakarta.websocket.server.PathParam
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.bff

import fr.gouv.cacem.monitorenv.domain.use_cases.semaphores.GetSemaphoreById
import fr.gouv.cacem.monitorenv.domain.use_cases.semaphores.GetSemaphores
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.SemaphoreDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.SemaphoreDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import jakarta.websocket.server.PathParam
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.publicapi

import fr.gouv.cacem.monitorenv.domain.use_cases.controlResources.GetControlUnits
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.ControlUnitDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.ControlUnitDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.endpoints.publicapi

import fr.gouv.cacem.monitorenv.domain.use_cases.healthcheck.GetHealthcheck
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.outputs.HealthDataOutput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.outputs.HealthDataOutput
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.web.bind.annotation.GetMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import fr.gouv.cacem.monitorenv.domain.use_cases.missions.CreateOrUpdateMission
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.DeleteMission
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.publicapi.inputs.CreateOrUpdateMissionDataInput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.publicapi.outputs.MissionDataOutput
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 @@ -79,7 +79,7 @@ class ApiMissionsController(
@Operation(summary = "Create a new mission")
fun createMissionController(
@RequestBody
createMissionDataInput: CreateOrUpdatePublicMissionDataInput,
createMissionDataInput: CreateOrUpdateMissionDataInput,
): MissionDataOutput {
val newMission = createMissionDataInput.toMissionEntity()
val createdMission = createOrUpdateMission.execute(mission = newMission)
Expand All @@ -105,7 +105,7 @@ class ApiMissionsController(
@PathVariable(name = "missionId")
missionId: Int,
@RequestBody
updateMissionDataInput: CreateOrUpdatePublicMissionDataInput,
updateMissionDataInput: CreateOrUpdateMissionDataInput,
): MissionDataOutput {
if ((updateMissionDataInput.id == null) || (missionId != updateMissionDataInput.id)) {
throw java.lang.IllegalArgumentException("missionId doesn't match with request param")
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 @@ -14,7 +14,7 @@ import fr.gouv.cacem.monitorenv.domain.use_cases.missions.CreateOrUpdateMission
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.DeleteMission
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.GetMissionById
import fr.gouv.cacem.monitorenv.domain.use_cases.missions.GetMonitorEnvMissions
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.inputs.CreateOrUpdateMissionDataInput
import fr.gouv.cacem.monitorenv.infrastructure.api.adapters.bff.inputs.CreateOrUpdateMissionDataInput
import org.hamcrest.Matchers.equalTo
import org.junit.jupiter.api.Test
import org.locationtech.jts.geom.MultiPolygon
Expand Down 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
Loading

0 comments on commit 674f003

Please sign in to comment.