Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Paramétrage diffusion préavis – Créer la liste des unités recevant des préavis #3794

Open
wants to merge 36 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
70a5d5e
Align backoffice menu style with MonitorEnv one
ivangabriele Oct 22, 2024
6ed28dc
Rename APIControlUnitRepository to APILegacyControlUnitRepository
ivangabriele Oct 23, 2024
6ec280e
Rename GetAllControlUnits to GetAllLegacyControlUnits
ivangabriele Oct 23, 2024
d950b24
Rename ControlUnit to LegacyControlUnit in Backend
ivangabriele Oct 23, 2024
f03d55e
Move LegacyControlUnit entity to control_unit domain in Backend
ivangabriele Oct 23, 2024
3dd419b
Add GetPriorNotificationSubscriber use case in Backend
ivangabriele Oct 23, 2024
2f33cfd
Rollback wrong controlUnit prop renaming in Backend entities
ivangabriele Oct 23, 2024
5194d40
Rollback controlUnit props renaming in Backend
ivangabriele Oct 23, 2024
7856fad
Upgrade MonitorEnv local docker image from v1.37.0 to v1.45.1
ivangabriele Oct 23, 2024
64ebd64
Add new GetAllControlUnits use case in Backend
ivangabriele Oct 23, 2024
92de0e6
Rename ControlUnitAdministration to Administration in Backend
ivangabriele Oct 23, 2024
8fd79fe
Add GetPriorNotificationSubscribers use case in Backend
ivangabriele Oct 23, 2024
d60129e
Optimize etPriorNotificationSubscribers use case in Backend
ivangabriele Oct 23, 2024
7f73ec9
Enrich prior notification subscriptions with related names in Backend
ivangabriele Oct 23, 2024
0e50f7b
Move ResponseBodyStatus into BackendApi namespace in Frontend
ivangabriele Oct 24, 2024
a3482be
Add run-back-with-monitorenv-for-cypress command to Makefile
ivangabriele Oct 24, 2024
2e27f1d
Add /bff/v1/prior_notification_subscribers route in Backend
ivangabriele Oct 24, 2024
585ea70
Add pno subscriber list to BackOffice
ivangabriele Oct 24, 2024
bde5d83
Improve search in backoffice pno subscriber list
ivangabriele Oct 24, 2024
d816331
Add UpdatePriorNotificationSubscriber use case in Backend
ivangabriele Oct 24, 2024
5d9e4db
Add PUT /prior_notification_subscribers/{controlUnitId} route in Backend
ivangabriele Oct 25, 2024
83f9a97
Add pno subscriber edition to BackOffice
ivangabriele Oct 25, 2024
6b07afb
Clean pno fleet segment naming
ivangabriele Oct 25, 2024
5d462f9
Add unit tests for GetPriorNotificationSubscriber use case in Backend
ivangabriele Oct 25, 2024
5596f27
Add unit tests for GetPriorNotificationSubscribers use case in Backend
ivangabriele Oct 25, 2024
b15f6a4
Handle diacritics in pno subscriber table search
ivangabriele Oct 25, 2024
5674445
Add unit tests for GetPriorNotificationSubscribers use case filtering
ivangabriele Oct 25, 2024
1c32a95
Add unit tests for PriorNotificationSubscriberController
ivangabriele Oct 25, 2024
3444e7c
Move control_unit/ControlUnitStation entity to station/Station in Bac…
ivangabriele Oct 25, 2024
7a2ede1
Add vessels identity info in pno subscriber edition form
ivangabriele Oct 25, 2024
fbf8d30
Add back button in pno subscriber edition form
ivangabriele Oct 25, 2024
05957a2
Add full port unsubscription confirmation in pno subscriber edition form
ivangabriele Oct 25, 2024
7554048
Fix pno subscribers getter use cases unit tests in Backend
ivangabriele Oct 25, 2024
24df50a
Fix BackOffice regulation edition e2e tests through small simplificat…
ivangabriele Oct 25, 2024
8c7bf2c
Lint code following SonarCloud suggestions
ivangabriele Oct 25, 2024
4df84b9
Re-organize BackOffice e2e test files
ivangabriele Oct 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ docker-env:
# Local Development

.PHONY: check-clean-archi ##LOCAL Check clean architecture imports
check-clean-archi:
check-clean-archi:
cd backend/tools && ./check-clean-architecture.sh

.PHONY: clean ##LOCAL Clean all backend assets and stop docker containers
Expand Down Expand Up @@ -152,6 +152,11 @@ test-back: check-clean-archi
test-back-watch:
./backend/scripts/test-watch.sh

.PHONY: run-back-with-monitorenv-for-cypress ##TEST ▶️ Run backend API when using Cypress connected to a local MonitorEnv app 📝
run-back-with-monitorenv-for-cypress: run-monitorenv run-stubbed-apis
docker compose up -d --quiet-pull --wait db keycloak
cd backend && MONITORENV_URL=http://localhost:9880 MONITORFISH_OIDC_ENABLED=false MONITORFISH_SCHEDULING_ENABLED=false ./gradlew bootRun --args='--spring.profiles.active=local --spring.config.additional-location=$(INFRA_FOLDER)'

.PHONY: run-back-for-puppeteer ##TEST ▶️ Run backend API when using Puppeteer 📝
run-back-for-puppeteer: docker-env run-stubbed-apis
docker compose up -d --quiet-pull --wait db
Expand All @@ -172,7 +177,7 @@ run-front-for-puppeteer:
restart-remote-app:
cd infra/remote && docker compose pull && docker compose up -d --build app --force-recreate

.PHONY: register-pipeline-flows-prod ##RUN ▶️ Register pipeline flows in PROD
.PHONY: register-pipeline-flows-prod ##RUN ▶️ Register pipeline flows in PROD
register-pipeline-flows-prod:
docker pull docker.pkg.github.com/mtes-mct/monitorfish/monitorfish-pipeline:$(MONITORFISH_VERSION) && \
infra/remote/data-pipeline/register-flows-prod.sh
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package fr.gouv.cnsp.monitorfish.domain.entities.administration

import kotlinx.serialization.Serializable

@Serializable
data class Administration(
val id: Int,
val isArchived: Boolean,
val name: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package fr.gouv.cnsp.monitorfish.domain.entities.control_unit

import kotlinx.serialization.Serializable

@Serializable
data class ControlUnit(
val id: Int,
val areaNote: String?,
val administrationId: Int,
val departmentAreaInseeCode: String?,
val isArchived: Boolean,
val name: String,
val termsNote: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package fr.gouv.cnsp.monitorfish.domain.entities.control_unit

import kotlinx.serialization.Serializable

@Serializable
data class ControlUnitContact(
val id: Int,
val controlUnitId: Int,
val email: String?,
val isEmailSubscriptionContact: Boolean,
val isSmsSubscriptionContact: Boolean,
val name: String,
val phone: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.gouv.cnsp.monitorfish.domain.entities.control_unit

import kotlinx.serialization.Serializable

// TODO Maybe merge `districts` from MonitorFish into MonitorEnv `departmentAreas`?
@Serializable
data class ControlUnitDepartmentArea(
/** `inseeCode` is the ID. */
val inseeCode: String,
val name: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package fr.gouv.cnsp.monitorfish.domain.entities.control_unit

import kotlinx.serialization.Serializable

@Serializable
enum class ControlUnitResourceType(val label: String) {
AIRPLANE("Avion"),
BARGE("Barge"),
CAR("Voiture"),
DRONE("Drône"),
EQUESTRIAN("Équestre"),
FAST_BOAT("Vedette"),
FRIGATE("Frégate"),
HELICOPTER("Hélicoptère"),
HYDROGRAPHIC_SHIP("Bâtiment hydrographique"),
KAYAK("Kayak"),
LIGHT_FAST_BOAT("Vedette légère"),
MINE_DIVER("Plongeur démineur"),
MOTORCYCLE("Moto"),
NET_LIFTER("Remonte-filets"),
NO_RESOURCE("Aucun moyen"),
OTHER("Autre"),
PATROL_BOAT("Patrouilleur"),
PEDESTRIAN("Piéton"),
PIROGUE("Pirogue"),
RIGID_HULL("Coque rigide"),
SEA_SCOOTER("Scooter de mer"),
SEMI_RIGID("Semi-rigide"),
SUPPORT_SHIP("Bâtiment de soutien"),
TRAINING_SHIP("Bâtiment-école"),
TUGBOAT("Remorqueur"),
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package fr.gouv.cnsp.monitorfish.domain.entities.mission
package fr.gouv.cnsp.monitorfish.domain.entities.control_unit

import fr.gouv.cnsp.monitorfish.domain.entities.mission.ControlResource
import kotlinx.serialization.Serializable

@Serializable
data class ControlUnit(
data class LegacyControlUnit(
val id: Int,
val administration: String,
val isArchived: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package fr.gouv.cnsp.monitorfish.domain.entities.fleet_segment
import fr.gouv.cnsp.monitorfish.domain.entities.logbook.LogbookTripSegment

data class FleetSegment(
// TODO Rename that to `code`.
val segment: String,
// TODO Rename that to `name`.
val segmentName: String,
val dirm: List<String> = listOf(),
val gears: List<String>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fr.gouv.cnsp.monitorfish.domain.entities.mission

import fr.gouv.cnsp.monitorfish.domain.entities.control_unit.LegacyControlUnit
import fr.gouv.cnsp.monitorfish.domain.entities.mission.env_mission_action.EnvMissionAction
import java.time.ZonedDateTime

Expand All @@ -25,5 +26,5 @@ data class Mission(
val missionSource: MissionSource,
val hasMissionOrder: Boolean? = false,
val isUnderJdp: Boolean? = false,
val controlUnits: List<ControlUnit> = listOf(),
val controlUnits: List<LegacyControlUnit> = listOf(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package fr.gouv.cnsp.monitorfish.domain.entities.mission.mission_actions

import com.neovisionaries.i18n.CountryCode
import fr.gouv.cnsp.monitorfish.config.Patchable
import fr.gouv.cnsp.monitorfish.domain.entities.mission.ControlUnit
import fr.gouv.cnsp.monitorfish.domain.entities.control_unit.LegacyControlUnit
import java.time.ZonedDateTime

data class MissionAction(
Expand Down Expand Up @@ -58,7 +58,7 @@ data class MissionAction(
* This field is only used by the `GetVesselControls` use-case.
* /!\ Do not use it to get `controlUnits` as the field will be empty be default.
*/
var controlUnits: List<ControlUnit> = listOf(),
var controlUnits: List<LegacyControlUnit> = listOf(),
val isDeleted: Boolean,
val hasSomeGearsSeized: Boolean,
val hasSomeSpeciesSeized: Boolean,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fr.gouv.cnsp.monitorfish.domain.entities.prior_notification

data class PriorNotificationFleetSegmentSubscription(
val controlUnitId: Int,
val segmentCode: String,
val segmentName: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package fr.gouv.cnsp.monitorfish.domain.entities.prior_notification

data class PriorNotificationPortSubscription(
val controlUnitId: Int,
val portLocode: String,
val portName: String?,
val hasSubscribedToAllPriorNotifications: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.gouv.cnsp.monitorfish.domain.entities.prior_notification

data class PriorNotificationVesselSubscription(
val controlUnitId: Int,
val vesselId: Int,
val vesselCallSign: String?,
val vesselCfr: String?,
val vesselExternalMarking: String?,
val vesselMmsi: String?,
val vesselName: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.filters

data class PriorNotificationSubscribersFilter(
val administrationId: Int? = null,
val portLocode: String? = null,
val searchQuery: String? = null,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.sorters

enum class PriorNotificationSubscribersSortColumn {
CONTROL_UNIT_NAME,
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package fr.gouv.cnsp.monitorfish.domain.entities.reporting

import fr.gouv.cnsp.monitorfish.domain.entities.mission.ControlUnit
import fr.gouv.cnsp.monitorfish.domain.entities.control_unit.LegacyControlUnit

data class ReportingAndOccurrences(
val otherOccurrencesOfSameAlert: List<Reporting>,
val reporting: Reporting,
val controlUnit: ControlUnit?,
val controlUnit: LegacyControlUnit?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.gouv.cnsp.monitorfish.domain.entities.station

import kotlinx.serialization.Serializable

@Serializable
data class Station(
val id: Int,
val latitude: Double,
val longitude: Double,
val name: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,22 @@ import com.neovisionaries.i18n.CountryCode
import fr.gouv.cnsp.monitorfish.domain.FRENCH_COUNTRY_CODES
import java.util.*

// TODO Remove all default values.
data class Vessel(
val id: Int,
/** CFR (Community Fleet Register Number). */
// TODO Rename to either `cfr` (domain naming) or `commonFleetRegisterNumber` (ex: https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX%3A32017R0218).
/** CFR (Common Fleet Register Number). */
val internalReferenceNumber: String? = null,
/** IMO (International Maritime Organization). IMO is one of multiple UVI (Unique Vessel Identifier) types. */
val imo: String? = null,
/** MMSI (Maritime Mobile Service Identity). */
val mmsi: String? = null,
// TODO Rename to either `callSign` (domain naming) or `internationRadioCallSign`.
/** IRCS (International Radio Call Sign). */
val ircs: String? = null,
// TODO Rename to `externalMarking` (domaim naming + correct translation, ex: https://mer.gouv.fr/sites/default/files/2022-10/EU_Vessel_List_for_Jersey_Waters_Access_sept_22.pdf).
val externalReferenceNumber: String? = null,
// TODO Rename to `name`.
val vesselName: String? = null,
val flagState: CountryCode,
val width: Double? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.gouv.cnsp.monitorfish.domain.repositories

import fr.gouv.cnsp.monitorfish.domain.entities.mission.ControlUnit
import fr.gouv.cnsp.monitorfish.domain.use_cases.control_units.dtos.FullControlUnit

interface ControlUnitRepository {
fun findAll(): List<ControlUnit>
fun findAll(): List<FullControlUnit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fr.gouv.cnsp.monitorfish.domain.repositories

import fr.gouv.cnsp.monitorfish.domain.entities.control_unit.LegacyControlUnit

interface LegacyControlUnitRepository {
fun findAll(): List<LegacyControlUnit>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package fr.gouv.cnsp.monitorfish.domain.repositories

import fr.gouv.cnsp.monitorfish.domain.entities.mission.ControlUnit
import fr.gouv.cnsp.monitorfish.domain.entities.control_unit.LegacyControlUnit
import fr.gouv.cnsp.monitorfish.domain.entities.mission.Mission
import fr.gouv.cnsp.monitorfish.domain.exceptions.CouldNotFindException
import kotlinx.coroutines.CoroutineScope
Expand All @@ -11,7 +11,7 @@ interface MissionRepository {
fun findControlUnitsOfMission(
scope: CoroutineScope,
missionId: Int,
): Deferred<List<ControlUnit>>
): Deferred<List<LegacyControlUnit>>

fun findAllMissions(
pageNumber: Int?,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package fr.gouv.cnsp.monitorfish.domain.repositories

import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.PriorNotificationFleetSegmentSubscription

interface PnoFleetSegmentSubscriptionRepository {
fun deleteByControlUnitId(controlUnitId: Int)

fun findAll(): List<PriorNotificationFleetSegmentSubscription>

fun findByControlUnitId(controlUnitId: Int): List<PriorNotificationFleetSegmentSubscription>

fun has(
portLocode: String,
segmentCodes: List<String>,
): Boolean

fun saveAll(
priorNotificationFleetSegmentSubscriptions: List<PriorNotificationFleetSegmentSubscription>,
): List<PriorNotificationFleetSegmentSubscription>
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
package fr.gouv.cnsp.monitorfish.domain.repositories

import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.PriorNotificationPortSubscription

interface PnoPortSubscriptionRepository {
fun deleteByControlUnitId(controlUnitId: Int)

fun findAll(): List<PriorNotificationPortSubscription>

fun findByControlUnitId(controlUnitId: Int): List<PriorNotificationPortSubscription>

fun has(portLocode: String): Boolean

fun saveAll(
priorNotificationPortSubscriptions: List<PriorNotificationPortSubscription>,
): List<PriorNotificationPortSubscription>
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
package fr.gouv.cnsp.monitorfish.domain.repositories

import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.PriorNotificationVesselSubscription

interface PnoVesselSubscriptionRepository {
fun deleteByControlUnitId(controlUnitId: Int)

fun findAll(): List<PriorNotificationVesselSubscription>

fun findByControlUnitId(controlUnitId: Int): List<PriorNotificationVesselSubscription>

fun has(vesselId: Int): Boolean

fun saveAll(
priorNotificationVesselSubscriptions: List<PriorNotificationVesselSubscription>,
): List<PriorNotificationVesselSubscription>
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package fr.gouv.cnsp.monitorfish.domain.use_cases.control_units

import fr.gouv.cnsp.monitorfish.config.UseCase
import fr.gouv.cnsp.monitorfish.domain.entities.mission.ControlUnit
import fr.gouv.cnsp.monitorfish.domain.repositories.ControlUnitRepository
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import fr.gouv.cnsp.monitorfish.domain.use_cases.control_units.dtos.FullControlUnit

@UseCase
class GetAllControlUnits(
private val controlUnitsRepository: ControlUnitRepository,
) {
private val logger: Logger = LoggerFactory.getLogger(GetAllControlUnits::class.java)

fun execute(): List<ControlUnit> {
fun execute(): List<FullControlUnit> {
return controlUnitsRepository.findAll()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package fr.gouv.cnsp.monitorfish.domain.use_cases.control_units

import fr.gouv.cnsp.monitorfish.config.UseCase
import fr.gouv.cnsp.monitorfish.domain.entities.control_unit.LegacyControlUnit
import fr.gouv.cnsp.monitorfish.domain.repositories.LegacyControlUnitRepository

@UseCase
class GetAllLegacyControlUnits(
private val legacyControlUnitsRepository: LegacyControlUnitRepository,
) {
fun execute(): List<LegacyControlUnit> {
return legacyControlUnitsRepository.findAll()
}
}
Loading
Loading