Skip to content

Commit

Permalink
Fix typings
Browse files Browse the repository at this point in the history
  • Loading branch information
louptheron committed Jan 31, 2025
1 parent c3b664d commit 26664f2
Show file tree
Hide file tree
Showing 12 changed files with 88 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,16 @@ data class VesselRiskFactor(
val gearOnboard: List<Gear>? = listOf(),
val speciesOnboard: List<Species>? = listOf(),
val totalWeightOnboard: Double? = null,
val segments: List<String>? = listOf(),
val segments: List<String>,
val probableSegments: List<String>? = listOf(),
val segmentHighestImpact: String? = null,
val segmentHighestPriority: String? = null,
val lastControlDatetime: ZonedDateTime? = null,
val postControlComments: String? = null,
val numberControlsLastFiveYears: Short? = null,
val numberControlsLastThreeYears: Short? = null,
val numberInfractionsLastFiveYears: Short? = null,
val numberGearSeizuresLastFiveYears: Short? = null,
val numberSpeciesSeizuresLastFiveYears: Short? = null,
val numberVesselSeizuresLastFiveYears: Short? = null,
val numberControlsLastFiveYears: Short,
val numberControlsLastThreeYears: Short,
val numberInfractionsLastFiveYears: Short,
val numberGearSeizuresLastFiveYears: Short,
val numberSpeciesSeizuresLastFiveYears: Short,
val numberVesselSeizuresLastFiveYears: Short,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package fr.gouv.cnsp.monitorfish.domain.use_cases.vessel

import fr.gouv.cnsp.monitorfish.config.UseCase
import fr.gouv.cnsp.monitorfish.domain.entities.risk_factor.VesselRiskFactor
import fr.gouv.cnsp.monitorfish.domain.exceptions.BackendUsageErrorCode
import fr.gouv.cnsp.monitorfish.domain.exceptions.BackendUsageException
import fr.gouv.cnsp.monitorfish.domain.repositories.RiskFactorRepository
import org.slf4j.Logger
import org.slf4j.LoggerFactory
Expand All @@ -14,10 +16,10 @@ class GetVesselRiskFactor(

fun execute(internalReferenceNumber: String): VesselRiskFactor {
val riskFactor = riskFactorRepository.findByInternalReferenceNumber(internalReferenceNumber)

requireNotNull(riskFactor) {
"No risk factor found for vessel $internalReferenceNumber"
}
?: throw BackendUsageException(
BackendUsageErrorCode.NOT_FOUND_BUT_OK,
message = "No risk factor found for vessel $internalReferenceNumber",
)

return riskFactor
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ data class LastPositionDataOutput(
val registryPortName: String? = null,
val district: String? = null,
val districtCode: String? = null,
val gearOnboard: List<GearLastPositionDataOutput>? = null,
val segments: List<String>? = listOf(),
val speciesOnboard: List<SpeciesLastPositionDataOutput>? = null,
val gearOnboard: List<GearLastPositionDataOutput>,
val segments: List<String>,
val speciesOnboard: List<SpeciesLastPositionDataOutput>,
val totalWeightOnboard: Double? = null,
val lastControlDateTime: ZonedDateTime? = null,
val lastControlInfraction: Boolean? = null,
Expand All @@ -46,7 +46,7 @@ data class LastPositionDataOutput(
val riskFactor: Double? = null,
val underCharter: Boolean? = null,
val isAtPort: Boolean? = null,
val alerts: List<String>? = listOf(),
val alerts: List<String>,
val beaconMalfunctionId: Int? = null,
val reportings: List<String> = listOf(),
) {
Expand Down Expand Up @@ -77,14 +77,15 @@ data class LastPositionDataOutput(
registryPortName = position.registryPortName,
district = position.district,
districtCode = position.districtCode,
gearOnboard = position.gearOnboard?.map { GearLastPositionDataOutput.fromGearLastPosition(it) },
segments = position.segments,
gearOnboard = position.gearOnboard?.map { GearLastPositionDataOutput.fromGearLastPosition(it) }
?: listOf(),
segments = position.segments ?: listOf(),
speciesOnboard =
position.speciesOnboard?.map {
SpeciesLastPositionDataOutput.fromSpeciesLastPosition(
it,
)
},
} ?: listOf(),
totalWeightOnboard = position.totalWeightOnboard,
lastControlDateTime = position.lastControlDateTime,
lastControlInfraction = position.lastControlInfraction,
Expand All @@ -96,7 +97,7 @@ data class LastPositionDataOutput(
riskFactor = position.riskFactor,
underCharter = position.underCharter,
isAtPort = position.isAtPort,
alerts = position.alerts,
alerts = position.alerts ?: listOf(),
beaconMalfunctionId = position.beaconMalfunctionId,
reportings = position.reportings,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ import fr.gouv.cnsp.monitorfish.domain.entities.risk_factor.VesselRiskFactor
import java.time.ZonedDateTime

data class RiskFactorDataOutput(
val gearOnboard: List<GearLastPositionDataOutput>? = null,
val segments: List<String>? = listOf(),
val speciesOnboard: List<SpeciesLastPositionDataOutput>? = null,
val controlPriorityLevel: Double? = null,
val gearOnboard: List<GearLastPositionDataOutput>,
val segments: List<String>,
val speciesOnboard: List<SpeciesLastPositionDataOutput>,
val controlPriorityLevel: Double,
val segmentHighestImpact: String? = null,
val segmentHighestPriority: String? = null,
val numberControlsLastFiveYears: Short? = null,
val numberControlsLastThreeYears: Short? = null,
val numberInfractionsLastFiveYears: Short? = null,
val numberGearSeizuresLastFiveYears: Short? = null,
val numberSpeciesSeizuresLastFiveYears: Short? = null,
val numberVesselSeizuresLastFiveYears: Short? = null,
val controlRateRiskFactor: Double? = null,
val numberControlsLastFiveYears: Short,
val numberControlsLastThreeYears: Short,
val numberInfractionsLastFiveYears: Short,
val numberGearSeizuresLastFiveYears: Short,
val numberSpeciesSeizuresLastFiveYears: Short,
val numberVesselSeizuresLastFiveYears: Short,
val controlRateRiskFactor: Double,
val lastControlDatetime: ZonedDateTime? = null,
val impactRiskFactor: Double,
val probabilityRiskFactor: Double,
Expand All @@ -26,7 +26,7 @@ data class RiskFactorDataOutput(
companion object {
fun fromVesselRiskFactor(vesselRiskFactor: VesselRiskFactor) =
RiskFactorDataOutput(
gearOnboard = vesselRiskFactor.gearOnboard?.map { GearLastPositionDataOutput.fromGearLastPosition(it) },
gearOnboard = vesselRiskFactor.gearOnboard?.map { GearLastPositionDataOutput.fromGearLastPosition(it) } ?: listOf(),
segments = vesselRiskFactor.segments,
segmentHighestImpact = vesselRiskFactor.segmentHighestImpact,
segmentHighestPriority = vesselRiskFactor.segmentHighestPriority,
Expand All @@ -35,7 +35,7 @@ data class RiskFactorDataOutput(
SpeciesLastPositionDataOutput.fromSpeciesLastPosition(
it,
)
},
} ?: listOf(),
controlPriorityLevel = vesselRiskFactor.controlPriorityLevel,
controlRateRiskFactor = vesselRiskFactor.controlRateRiskFactor,
numberControlsLastFiveYears = vesselRiskFactor.numberControlsLastFiveYears,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ data class LastPositionEntity(
@Column(name = "trip_number")
val tripNumber: String? = null,
@Column(name = "latitude")
val latitude: Double? = null,
val latitude: Double,
@Column(name = "longitude")
val longitude: Double? = null,
val longitude: Double,
@Column(name = "estimated_current_latitude")
val estimatedCurrentLatitude: Double? = null,
@Column(name = "estimated_current_longitude")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ data class PositionEntity(
@Column(name = "network_type")
@Enumerated(EnumType.STRING)
val networkType: NetworkType? = null,
@Column(name = "speed")
val speed: Double? = null,
@Column(name = "course")
val course: Double? = null,
// Mandatory fields
@Enumerated(EnumType.STRING)
@Column(name = "position_type")
Expand All @@ -55,10 +59,6 @@ data class PositionEntity(
val latitude: Double,
@Column(name = "longitude")
val longitude: Double,
@Column(name = "speed")
val speed: Double? = null,
@Column(name = "course")
val course: Double? = null,
@Column(name = "date_time")
val dateTime: ZonedDateTime,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { VesselSearch } from '@features/VesselSearch'
import { FormError, FormErrorCode } from '@libs/FormError'
import { Legend, useNewWindow } from '@mtes-mct/monitor-ui'
import { useFormikContext } from 'formik'
import { useMemo } from 'react'
import styled from 'styled-components'

import { UNKNOWN_VESSEL } from '../../../../../../domain/entities/vessel/vessel'
import { VesselSearch } from '../../../../../VesselSearch'

import type { SilencedAlertFormValues } from '../types'
import type { Vessel } from '@features/Vessel/Vessel.types'
Expand All @@ -14,15 +14,19 @@ export function VesselField() {
const { errors, setValues, values } = useFormikContext<SilencedAlertFormValues>()
const { newWindowContainerRef } = useNewWindow()

const defaultValue: Partial<Vessel.VesselIdentity> = useMemo(
const defaultValue: Vessel.VesselIdentity = useMemo(
() => ({
externalReferenceNumber: values.externalReferenceNumber ?? undefined,
flagState: values.flagState ?? '',
internalReferenceNumber: values.internalReferenceNumber ?? undefined,
ircs: values.ircs ?? undefined,
vesselId: values.vesselId ?? undefined,
vesselIdentifier: values.vesselIdentifier ?? undefined,
vesselName: values.vesselName ?? undefined
beaconNumber: undefined,
districtCode: undefined,
externalReferenceNumber: values.externalReferenceNumber,
flagState: values.flagState ?? UNKNOWN_VESSEL.flagState,
internalReferenceNumber: values.internalReferenceNumber,
ircs: values.ircs,
mmsi: undefined,
vesselId: values.vesselId,
vesselIdentifier: values.vesselIdentifier,
vesselLength: undefined,
vesselName: values.vesselName
}),
[
values.flagState,
Expand All @@ -35,7 +39,7 @@ export function VesselField() {
]
)

const handleVesselSearchChange = (nextVessel: Partial<Vessel.VesselIdentity> | undefined) => {
const handleVesselSearchChange = (nextVessel: Vessel.VesselIdentity | undefined) => {
if (!nextVessel) {
setValues({
...values,
Expand All @@ -59,7 +63,7 @@ export function VesselField() {
setValues({
...values,
externalReferenceNumber: nextVessel.externalReferenceNumber ?? undefined,
flagState: nextVessel.flagState?.toUpperCase(),
flagState: nextVessel.flagState.toUpperCase(),
internalReferenceNumber: nextVessel.internalReferenceNumber ?? undefined,
ircs: nextVessel.ircs ?? undefined,
vesselId: nextVessel.vesselId ?? undefined,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,17 @@ export function VesselField() {
}

return {
districtCode: values.districtCode ?? null,
externalReferenceNumber: values.externalReferenceNumber ?? null,
flagState: values.flagState ?? '',
internalReferenceNumber: values.internalReferenceNumber ?? null,
ircs: values.ircs ?? null,
beaconNumber: undefined,
districtCode: values.districtCode,
externalReferenceNumber: values.externalReferenceNumber,
flagState: values.flagState ?? UNKNOWN_VESSEL.flagState,
internalReferenceNumber: values.internalReferenceNumber,
ircs: values.ircs,
mmsi: undefined,
vesselId: values.vesselId,
vesselName: values.vesselName ?? null
vesselIdentifier: undefined,
vesselLength: undefined,
vesselName: values.vesselName
}
}, [
values.flagState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ export const updateActionGearsOnboard =
}

const nextGears = gearOnboard
.filter(gear => !!gear.gear)
.map(gear => {
const gearByCode = gearsByCode[gear.gear]
const gearByCode = gearsByCode[gear.gear as string]
if (!gearByCode) {
throw new FrontendError('`gearByCode` is undefined.')
}
Expand Down
19 changes: 9 additions & 10 deletions frontend/src/features/RiskFactor/types.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
import { Vessel } from '@features/Vessel/Vessel.types'
import { z } from 'zod'

import { numberOrUndefined, stringOrUndefined } from '../../types'
import { stringOrUndefined } from '../../types'

// TODO Check which of these types are nullable or not
export const RiskFactorSchema = z.strictObject({
controlPriorityLevel: z.number(),
controlRateRiskFactor: z.number(),
detectabilityRiskFactor: z.number(),
gearOnboard: z.array(Vessel.DeclaredLogbookGearSchema).optional(),
gearOnboard: z.array(Vessel.DeclaredLogbookGearSchema),
impactRiskFactor: z.number(),
lastControlDatetime: stringOrUndefined,
numberControlsLastFiveYears: numberOrUndefined,
numberControlsLastThreeYears: numberOrUndefined,
numberGearSeizuresLastFiveYears: numberOrUndefined,
numberInfractionsLastFiveYears: numberOrUndefined,
numberSpeciesSeizuresLastFiveYears: numberOrUndefined,
numberVesselSeizuresLastFiveYears: numberOrUndefined,
numberControlsLastFiveYears: z.number(),
numberControlsLastThreeYears: z.number(),
numberGearSeizuresLastFiveYears: z.number(),
numberInfractionsLastFiveYears: z.number(),
numberSpeciesSeizuresLastFiveYears: z.number(),
numberVesselSeizuresLastFiveYears: z.number(),
probabilityRiskFactor: z.number(),
riskFactor: z.number(),
segmentHighestImpact: stringOrUndefined,
segmentHighestPriority: stringOrUndefined,
segments: z.array(z.string()),
speciesOnboard: z.array(Vessel.DeclaredLogbookSpeciesSchema).optional()
speciesOnboard: z.array(Vessel.DeclaredLogbookSpeciesSchema)
})

export type RiskFactor = z.infer<typeof RiskFactorSchema>
18 changes: 8 additions & 10 deletions frontend/src/features/Vessel/Vessel.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,19 +141,17 @@ export namespace Vessel {
vessel: Vessel.EnrichedVessel
}

// TODO Check which of these types are nullable or not
export const DeclaredLogbookGearSchema = z.strictObject({
dimensions: stringOrUndefined,
gear: stringOrUndefined,
mesh: numberOrUndefined
})

// TODO Check which of these types are nullable or not
export const DeclaredLogbookSpeciesSchema = z.strictObject({
faoZone: stringOrUndefined,
gear: stringOrUndefined,
species: stringOrUndefined,
weight: numberOrUndefined
faoZone: z.string(),
gear: z.string(),
species: z.string(),
weight: z.number()
})
export type DeclaredLogbookSpecies = z.infer<typeof DeclaredLogbookSpeciesSchema>

Expand All @@ -162,7 +160,7 @@ export namespace Vessel {
alerts: z.array(z.union([z.nativeEnum(PendingAlertValueType), z.literal('PNO_LAN_WEIGHT_TOLERANCE_ALERT')])),
beaconMalfunctionId: numberOrUndefined,
beaconNumber: numberOrUndefined,
course: z.number(),
course: numberOrUndefined,
dateTime: z.string(),
departureDateTime: stringOrUndefined,
destination: stringOrUndefined,
Expand Down Expand Up @@ -196,7 +194,7 @@ export namespace Vessel {
riskFactor: numberOrUndefined,
segments: z.array(z.string()),
speciesOnboard: z.array(DeclaredLogbookSpeciesSchema),
speed: z.number(),
speed: numberOrUndefined,
totalWeightOnboard: numberOrUndefined,
tripNumber: stringOrUndefined,
underCharter: booleanOrUndefined,
Expand Down Expand Up @@ -261,13 +259,13 @@ export namespace Vessel {
}
export type VesselEnhancedLastPositionWebGLObject = Vessel.VesselEnhancedObject & {
coordinates: number[]
course: number
course: number | undefined
filterPreview: number // 0 is False, 1 is True - for WebGL
hasBeaconMalfunction: boolean
isAtPort: boolean | undefined
isFiltered: number // 0 is False, 1 is True - for WebGL
lastPositionSentAt: number
speed: number
speed: number | undefined
vesselFeatureId: VesselFeatureId
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ function convertToEnhancedLastPositions(
filterPreview: 0,
flagState: vessel.flagState,
fleetSegmentsArray: vessel.segments ? vessel.segments.map(segment => segment.replace(' ', '')) : [],
gearsArray: vessel.gearOnboard ? Array.from(new Set(vessel.gearOnboard.map(gear => gear.gear))) : [],
gearsArray: vessel.gearOnboard
? Array.from(new Set(vessel.gearOnboard.map(gear => gear.gear).filter((gear): gear is string => !!gear)))
: [],
hasAlert: !!vessel.alerts?.length,
hasBeaconMalfunction: !!vessel.beaconMalfunctionId,
hasInfractionSuspicion:
Expand Down

0 comments on commit 26664f2

Please sign in to comment.