From c91beaa10396226ea53d08429c9db9f405b787a9 Mon Sep 17 00:00:00 2001 From: Ivan Gabriele Date: Mon, 20 Nov 2023 10:46:53 +0100 Subject: [PATCH] Limit resources to selected base in base overlay card --- .../V666.4__insert_dummy_control_units.sql | 30 ++--- .../repositories/JpaBaseRepositoryITests.kt | 20 +++ .../JpaControlUnitRepositoryITests.kt | 115 +++++++++++++++++- .../JpaControlUnitResourceRepositoryITests.kt | 10 +- frontend/src/domain/entities/controlUnit.ts | 2 +- .../StationOverlay/StationCard/Item.tsx | 5 +- .../StationOverlay/StationCard/index.tsx | 2 +- .../StationOverlay/StationCard/utils.tsx | 5 +- 8 files changed, 157 insertions(+), 32 deletions(-) diff --git a/backend/src/main/resources/db/testdata/V666.4__insert_dummy_control_units.sql b/backend/src/main/resources/db/testdata/V666.4__insert_dummy_control_units.sql index 4d9f909385..c974f085c6 100644 --- a/backend/src/main/resources/db/testdata/V666.4__insert_dummy_control_units.sql +++ b/backend/src/main/resources/db/testdata/V666.4__insert_dummy_control_units.sql @@ -53,19 +53,21 @@ VALUES SELECT setval('control_unit_contacts_id_seq', 3, true); INSERT INTO public.control_unit_resources - ( id, control_unit_id, name, base_id, type) + ( id, control_unit_id, name, base_id, type, is_archived) VALUES - ( 1, 10000, 'Semi-rigide 1', 1, 'BARGE'), - ( 2, 10000, 'Semi-rigide 2', 1, 'BARGE'), - ( 3, 10002, 'Semi-rigide 1', 2, 'BARGE'), - ( 4, 10002, 'Semi-rigide 2', 2, 'BARGE'), - ( 5, 10002, 'Voiture', 3, 'CAR'), - ( 6, 10003, 'AR VECHEN', 2, 'FRIGATE'), - ( 7, 10003, 'Semi-rigide', 3, 'BARGE'), - ( 8, 10121, 'PAM Jeanne Barret', 3, 'FRIGATE'), - ( 9, 10080, 'PAM Themis', 3, 'FRIGATE'), - ( 10, 10018, 'ALTAIR', 3, 'FRIGATE'), - ( 11, 10018, 'PHEROUSA', 3, 'FRIGATE'), - ( 12, 10018, 'ARIOLA', 3, 'FRIGATE'); + ( 1, 10000, 'Semi-rigide 1', 1, 'BARGE', false), + ( 2, 10000, 'Semi-rigide 2', 1, 'BARGE', false), + ( 3, 10002, 'Semi-rigide 1', 2, 'BARGE', false), + ( 4, 10002, 'Semi-rigide 2', 2, 'BARGE', false), + ( 5, 10002, 'Voiture', 3, 'CAR', false), + ( 6, 10003, 'AR VECHEN', 2, 'FRIGATE', false), + ( 7, 10003, 'Semi-rigide', 3, 'BARGE', false), + ( 8, 10121, 'PAM Jeanne Barret', 3, 'FRIGATE', false), + ( 9, 10080, 'PAM Themis', 3, 'FRIGATE', false), + ( 10, 10018, 'ALTAIR', 3, 'FRIGATE', false), + ( 11, 10018, 'PHEROUSA', 3, 'FRIGATE', false), + ( 12, 10018, 'ARIOLA', 3, 'FRIGATE', false), + ( 13, 10000, 'Voiture', 1, 'CAR', true), + ( 14, 10000, 'Drône', 2, 'DRONE', false); -SELECT setval('control_unit_resources_id_seq', 12, true); +SELECT setval('control_unit_resources_id_seq', 14, true); diff --git a/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaBaseRepositoryITests.kt b/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaBaseRepositoryITests.kt index 65e48ae5fc..da1f0bc4fa 100644 --- a/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaBaseRepositoryITests.kt +++ b/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaBaseRepositoryITests.kt @@ -49,6 +49,16 @@ class JpaBaseRepositoryITests : AbstractDBTests() { photo = null, type = ControlUnitResourceType.BARGE, ), + ControlUnitResourceEntity( + id = 13, + controlUnitId = 10000, + isArchived = true, + name = "Voiture", + note = null, + photo = null, + stationId = 1, + type = ControlUnitResourceType.CAR, + ), ), ), ) @@ -181,6 +191,16 @@ class JpaBaseRepositoryITests : AbstractDBTests() { photo = null, type = ControlUnitResourceType.FRIGATE, ), + ControlUnitResourceEntity( + id = 14, + controlUnitId = 10000, + isArchived = false, + name = "Drône", + note = null, + photo = null, + stationId = 2, + type = ControlUnitResourceType.DRONE + ), ), ), ) diff --git a/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitRepositoryITests.kt b/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitRepositoryITests.kt index 53fe803e4f..845d2956e5 100644 --- a/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitRepositoryITests.kt +++ b/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitRepositoryITests.kt @@ -72,12 +72,33 @@ class JpaControlUnitRepositoryITests : AbstractDBTests() { ), controlUnitResources = listOf( FullControlUnitResourceDTO( + controlUnit = ControlUnitEntity( + id = 10000, + administrationId = 1005, + areaNote = null, + departmentAreaInseeCode = null, + isArchived = false, + name = "Cultures marines – DDTM 40", + termsNote = null, + ), + controlUnitResource = ControlUnitResourceEntity( + id = 1, + stationId = 1, + controlUnitId = 10000, + isArchived = false, + name = "Semi-rigide 1", + note = null, + photo = null, + type = ControlUnitResourceType.BARGE, + ), station = StationEntity( id = 1, latitude = 43.295765, longitude = 5.375486, name = "Marseille", ), + ), + FullControlUnitResourceDTO( controlUnit = ControlUnitEntity( id = 10000, administrationId = 1005, @@ -88,23 +109,50 @@ class JpaControlUnitRepositoryITests : AbstractDBTests() { termsNote = null, ), controlUnitResource = ControlUnitResourceEntity( - id = 1, + id = 2, stationId = 1, controlUnitId = 10000, isArchived = false, - name = "Semi-rigide 1", + name = "Semi-rigide 2", note = null, photo = null, type = ControlUnitResourceType.BARGE, ), + station = StationEntity( + id = 1, + latitude = 43.295765, + longitude = 5.375486, + name = "Marseille", + ), ), FullControlUnitResourceDTO( + controlUnit = ControlUnitEntity( + id = 10000, + administrationId = 1005, + areaNote = null, + departmentAreaInseeCode = null, + isArchived = false, + name = "Cultures marines – DDTM 40", + termsNote = null, + ), + controlUnitResource = ControlUnitResourceEntity( + id = 13, + controlUnitId = 10000, + isArchived = true, + name = "Voiture", + note = null, + photo = null, + stationId = 1, + type = ControlUnitResourceType.CAR, + ), station = StationEntity( id = 1, latitude = 43.295765, longitude = 5.375486, name = "Marseille", ), + ), + FullControlUnitResourceDTO( controlUnit = ControlUnitEntity( id = 10000, administrationId = 1005, @@ -115,14 +163,20 @@ class JpaControlUnitRepositoryITests : AbstractDBTests() { termsNote = null, ), controlUnitResource = ControlUnitResourceEntity( - id = 2, - stationId = 1, + id = 14, controlUnitId = 10000, isArchived = false, - name = "Semi-rigide 2", + name = "Drône", note = null, photo = null, - type = ControlUnitResourceType.BARGE, + stationId = 2, + type = ControlUnitResourceType.DRONE, + ), + station = StationEntity( + id = 2, + latitude = 48.648105, + longitude = -2.013144, + name = "Saint-Malo", ), ), ), @@ -270,6 +324,55 @@ class JpaControlUnitRepositoryITests : AbstractDBTests() { type = ControlUnitResourceType.BARGE, ), ), + FullControlUnitResourceDTO( + controlUnit = ControlUnitEntity( + id = 10000, + administrationId = 1005, + areaNote = null, + departmentAreaInseeCode = null, + isArchived = false, + name = "Cultures marines – DDTM 40", + termsNote = null, + ), + controlUnitResource = ControlUnitResourceEntity( + id = 13, + controlUnitId = 10000, + isArchived = true, + name = "Voiture", + note = null, + photo = null, + stationId = 1, + type = ControlUnitResourceType.CAR, + ), + station = StationEntity(id = 1, latitude = 43.295765, longitude = 5.375486, name = "Marseille"), + ), + FullControlUnitResourceDTO( + controlUnit = ControlUnitEntity( + id = 10000, + administrationId = 1005, + areaNote = null, + departmentAreaInseeCode = null, + isArchived = false, + name = "Cultures marines – DDTM 40", + termsNote = null, + ), + controlUnitResource = ControlUnitResourceEntity( + id = 14, + controlUnitId = 10000, + isArchived = false, + name = "Drône", + note = null, + photo = null, + stationId = 2, + type = ControlUnitResourceType.DRONE, + ), + station = StationEntity( + id = 2, + latitude = 48.648105, + longitude = -2.013144, + name = "Saint-Malo", + ), + ), ), ), ) diff --git a/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitResourceRepositoryITests.kt b/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitResourceRepositoryITests.kt index 65b79b4dbe..1666fdff95 100644 --- a/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitResourceRepositoryITests.kt +++ b/backend/src/test/kotlin/fr/gouv/cacem/monitorenv/infrastructure/database/repositories/JpaControlUnitResourceRepositoryITests.kt @@ -36,7 +36,7 @@ class JpaControlUnitResourceRepositoryITests : AbstractDBTests() { val foundFullControlUnitResources = jpaControlUnitResourceRepository.findAll().sortedBy { requireNotNull(it.controlUnitResource.id) } - assertThat(foundFullControlUnitResources).hasSize(12) + assertThat(foundFullControlUnitResources).hasSize(14) assertThat(foundFullControlUnitResources[0]).isEqualTo( FullControlUnitResourceDTO( @@ -153,13 +153,13 @@ class JpaControlUnitResourceRepositoryITests : AbstractDBTests() { val createdControlUnitResource = jpaControlUnitResourceRepository.save(newControlUnitResource) - assertThat(createdControlUnitResource).isEqualTo(newControlUnitResource.copy(id = 13)) + assertThat(createdControlUnitResource).isEqualTo(newControlUnitResource.copy(id = 15)) // --------------------------------------------------------------------- // Update val nextControlUnitResource = ControlUnitResourceEntity( - id = 13, + id = 15, stationId = 2, controlUnitId = 10001, isArchived = false, @@ -176,11 +176,11 @@ class JpaControlUnitResourceRepositoryITests : AbstractDBTests() { // --------------------------------------------------------------------- // Delete - jpaControlUnitResourceRepository.deleteById(13) + jpaControlUnitResourceRepository.deleteById(15) val controlUnitResourceIds = jpaControlUnitResourceRepository.findAll().map { requireNotNull(it.controlUnitResource.id) }.sorted() - assertThat(controlUnitResourceIds).doesNotContain(13) + assertThat(controlUnitResourceIds).doesNotContain(15) } } diff --git a/frontend/src/domain/entities/controlUnit.ts b/frontend/src/domain/entities/controlUnit.ts index 495f477209..d72cfce8de 100644 --- a/frontend/src/domain/entities/controlUnit.ts +++ b/frontend/src/domain/entities/controlUnit.ts @@ -44,7 +44,7 @@ export namespace ControlUnit { /** Base64 Data URI. */ photo: string | undefined station: Station.StationData - stationId: number | undefined + stationId: number type: ControlUnitResourceType } diff --git a/frontend/src/features/Station/components/StationOverlay/StationCard/Item.tsx b/frontend/src/features/Station/components/StationOverlay/StationCard/Item.tsx index 54af38e458..33d7a1e4c4 100644 --- a/frontend/src/features/Station/components/StationOverlay/StationCard/Item.tsx +++ b/frontend/src/features/Station/components/StationOverlay/StationCard/Item.tsx @@ -9,8 +9,9 @@ import type { ControlUnit } from '../../../../../domain/entities/controlUnit' type ItemProps = { controlUnit: ControlUnit.ControlUnit + stationId: number } -export function Item({ controlUnit }: ItemProps) { +export function Item({ controlUnit, stationId }: ItemProps) { const dispatch = useAppDispatch() const edit = () => { @@ -27,7 +28,7 @@ export function Item({ controlUnit }: ItemProps) { {controlUnit.name} {controlUnit.administration.name} - {displayControlUnitResourcesFromControlUnit(controlUnit)} + {displayControlUnitResourcesFromControlUnit(controlUnit, stationId)} ) } diff --git a/frontend/src/features/Station/components/StationOverlay/StationCard/index.tsx b/frontend/src/features/Station/components/StationOverlay/StationCard/index.tsx index 9a5c830bb5..fdcdf49668 100644 --- a/frontend/src/features/Station/components/StationOverlay/StationCard/index.tsx +++ b/frontend/src/features/Station/components/StationOverlay/StationCard/index.tsx @@ -72,7 +72,7 @@ export function StationCard({ feature, selected = false }: { feature: Feature; s > {controlUnitsRef.current.map(controlUnit => ( - + ))} diff --git a/frontend/src/features/Station/components/StationOverlay/StationCard/utils.tsx b/frontend/src/features/Station/components/StationOverlay/StationCard/utils.tsx index c3a61a70a9..c63d6cf7e3 100644 --- a/frontend/src/features/Station/components/StationOverlay/StationCard/utils.tsx +++ b/frontend/src/features/Station/components/StationOverlay/StationCard/utils.tsx @@ -2,12 +2,11 @@ import { Tag, pluralize } from '@mtes-mct/monitor-ui' import { isEmpty } from 'lodash/fp' import { ControlUnit } from '../../../../../domain/entities/controlUnit' -import { isNotArchived } from '../../../../../utils/isNotArchived' import { getIconFromControlUnitResourceType } from '../../../../ControlUnit/components/ControlUnitDialog/ControlUnitResourceList/utils' -export function displayControlUnitResourcesFromControlUnit(controlUnit: ControlUnit.ControlUnit) { +export function displayControlUnitResourcesFromControlUnit(controlUnit: ControlUnit.ControlUnit, stationId: number) { const controlUnitResourceTypeCounts = controlUnit.controlUnitResources - .filter(isNotArchived) + .filter(controlUnitResource => controlUnitResource.stationId === stationId && !controlUnitResource.isArchived) .reduce((previousControlUnitResourceTypeCounts, controlUnitResource) => { const controlUnitResourceTypeCount = previousControlUnitResourceTypeCounts[controlUnitResource.type] if (!controlUnitResourceTypeCount) {