Skip to content

Commit

Permalink
Tech - Amélioration des performances de la requête des PNOs (#3741)
Browse files Browse the repository at this point in the history
## Linked issues

- Resolve #3740
- Amélioration des performances de la requête des PNOs (voir
commentaires)

----

- [ ] Tests E2E (Cypress)
  • Loading branch information
louptheron authored Oct 7, 2024
2 parents ebfcb43 + f25df1d commit 5c88c3c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import fr.gouv.cnsp.monitorfish.domain.entities.logbook.LogbookMessageAndValue
import fr.gouv.cnsp.monitorfish.domain.entities.logbook.messages.Acknowledgment
import fr.gouv.cnsp.monitorfish.domain.entities.logbook.messages.PNO
import fr.gouv.cnsp.monitorfish.domain.entities.port.Port
import fr.gouv.cnsp.monitorfish.domain.entities.reporting.Reporting
import fr.gouv.cnsp.monitorfish.domain.entities.reporting.ReportingType
import fr.gouv.cnsp.monitorfish.domain.entities.reporting.filters.ReportingFilter
import fr.gouv.cnsp.monitorfish.domain.entities.risk_factor.VesselRiskFactor
Expand Down Expand Up @@ -152,6 +153,18 @@ data class PriorNotification(
reportingCount = currentReportings?.count() ?: 0
}

fun enrichReportingCount(
internalReferenceNumber: String?,
reportings: List<Reporting>,
) {
val currentReportings =
internalReferenceNumber?.let { vesselInternalReferenceNumber ->
reportings.filter { it.internalReferenceNumber == vesselInternalReferenceNumber }
}

reportingCount = currentReportings?.count() ?: 0
}

fun markAsAcknowledged() {
logbookMessageAndValue =
LogbookMessageAndValue(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.PriorNotifica
import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.PriorNotificationStats
import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.filters.PriorNotificationsFilter
import fr.gouv.cnsp.monitorfish.domain.entities.prior_notification.sorters.PriorNotificationsSortColumn
import fr.gouv.cnsp.monitorfish.domain.entities.reporting.Reporting
import fr.gouv.cnsp.monitorfish.domain.entities.reporting.ReportingType
import fr.gouv.cnsp.monitorfish.domain.entities.reporting.filters.ReportingFilter
import fr.gouv.cnsp.monitorfish.domain.entities.vessel.UNKNOWN_VESSEL
import fr.gouv.cnsp.monitorfish.domain.repositories.*
import fr.gouv.cnsp.monitorfish.domain.utils.PaginatedList
Expand Down Expand Up @@ -68,10 +71,8 @@ class GetPriorNotifications(
incompletePriorNotifications
.map { priorNotification ->
priorNotification.enrich(allRiskFactors, allPorts, priorNotification.isManuallyCreated)
priorNotification.logbookMessageAndValue.logbookMessage
.enrichGearPortAndSpecyNames(allGears, allPorts, allSpecies)

priorNotification
return@map priorNotification
}

enrichPriorNotificationsWithVessel(priorNotificationsWithoutVessel)
Expand Down Expand Up @@ -137,8 +138,12 @@ class GetPriorNotifications(
val (enrichedPaginatedList, enrichedPaginatedListTimeTaken) =
measureTimedValue {
paginatedList.apply {
val reportings = getReportings()

data.forEach {
it.enrichReportingCount(reportingRepository)
it.enrichReportingCount(it.vessel?.internalReferenceNumber, reportings)
it.logbookMessageAndValue.logbookMessage
.enrichGearPortAndSpecyNames(allGears, allPorts, allSpecies)
}
}
}
Expand All @@ -147,23 +152,44 @@ class GetPriorNotifications(
return enrichedPaginatedList
}

private fun PaginatedList<PriorNotification, PriorNotificationStats>.getReportings(): List<Reporting> {
val internalReferenceNumbers = data.mapNotNull { it.vessel?.internalReferenceNumber }
val reportings =
reportingRepository.findAll(
ReportingFilter(
vesselInternalReferenceNumbers = internalReferenceNumbers,
isArchived = false,
isDeleted = false,
types = listOf(ReportingType.INFRACTION_SUSPICION),
),
)

return reportings
}

private fun enrichPriorNotificationsWithVessel(
priorNotifications: List<PriorNotification>,
): List<PriorNotification> {
val vesselsViaVesselsIds =
priorNotifications
.asSequence()
.filter { it.isManuallyCreated }
.mapNotNull { it.logbookMessageAndValue.logbookMessage.vesselId }
.distinct()
.chunked(5000)
.map { vesselRepository.findVesselsByIds(it) }
.flatten()
.toList()
val vesselsViaInternalReferenceNumbers =
priorNotifications
.asSequence()
.filter { !it.isManuallyCreated }
.mapNotNull { it.logbookMessageAndValue.logbookMessage.internalReferenceNumber }
.distinct()
.chunked(5000)
.map { vesselRepository.findVesselsByInternalReferenceNumbers(it) }
.flatten()
.toList()
val vessels = vesselsViaVesselsIds + vesselsViaInternalReferenceNumbers

return priorNotifications.map {
Expand Down

0 comments on commit 5c88c3c

Please sign in to comment.