diff --git a/pom.xml b/pom.xml index 4d0e39d7..ec8c2f82 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ ${java.version} ${java.version} UTF-8 - 3.4.2 + 3.4.3 2024.0.0 8.0 4.4 diff --git a/src/main/java/de/muenchen/dave/controller/OptionsmenueSettingsController.java b/src/main/java/de/muenchen/dave/controller/OptionsmenueSettingsController.java new file mode 100644 index 00000000..fe57758d --- /dev/null +++ b/src/main/java/de/muenchen/dave/controller/OptionsmenueSettingsController.java @@ -0,0 +1,27 @@ +package de.muenchen.dave.controller; + +import de.muenchen.dave.domain.dtos.OptionsmenueSettingsDTO; +import de.muenchen.dave.services.OptionsmenueSettingsService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/settings-optionsmenue") +@RequiredArgsConstructor +public class OptionsmenueSettingsController { + + private final OptionsmenueSettingsService optionsmenueSettingsService; + + @GetMapping(value = "/messstelle/all", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getAllOptionsmenueSettingsForMessstellen() { + final var settings = optionsmenueSettingsService.getAllOptionsmenueSettingsForMessstellen(); + return ResponseEntity.ok(settings); + } + +} diff --git a/src/main/java/de/muenchen/dave/domain/OptionsmenueSettings.java b/src/main/java/de/muenchen/dave/domain/OptionsmenueSettings.java new file mode 100644 index 00000000..24dc8047 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/OptionsmenueSettings.java @@ -0,0 +1,106 @@ +package de.muenchen.dave.domain; + +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import java.util.List; + +@Entity +@Table( + uniqueConstraints = { + @UniqueConstraint( + name = "unique_optionsmenuesettings_fahrzeugklasse_intervall", + columnNames = { "fahrzeugklasse", "intervall" } + ) + } +) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class OptionsmenueSettings extends BaseEntity { + + @Column + @Enumerated(EnumType.STRING) + private Fahrzeugklasse fahrzeugklasse; + + @Column + @Enumerated(EnumType.STRING) + private ZaehldatenIntervall intervall; + + @Column(name = "kraftfahrzeugverkehr_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List kraftfahrzeugverkehrChoosableIntervals; + + @Column(name = "schwerverkehr_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List schwerverkehrChoosableIntervals; + + @Column(name = "gueterverkehr_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List gueterverkehrChoosableIntervals; + + @Column(name = "schwerverkehrsanteil_prozent_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List schwerverkehrsanteilProzentChoosableIntervals; + + @Column(name = "gueterverkehrsanteil_prozent_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List gueterverkehrsanteilProzentChoosableIntervals; + + @Column(name = "radverkehr_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List radverkehrChoosableIntervals; + + @Column(name = "fussverkehr_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List fussverkehrChoosableIntervals; + + @Column(name = "lastkraftwagen_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List lastkraftwagenChoosableIntervals; + + @Column(name = "lastzuege_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List lastzuegeChoosableIntervals; + + @Column(name = "busse_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List busseChoosableIntervals; + + @Column(name = "kraftraeder_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List kraftraederChoosableIntervals; + + @Column(name = "personenkraftwagen_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List personenkraftwagenChoosableIntervals; + + @Column(name = "lieferwagen_choosable_intervals") + @JdbcTypeCode(SqlTypes.JSON) + @Enumerated(EnumType.STRING) + private List lieferwagenChoosableIntervals; + +} diff --git a/src/main/java/de/muenchen/dave/domain/dtos/OptionsmenueSettingsDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/OptionsmenueSettingsDTO.java new file mode 100644 index 00000000..094214cb --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/dtos/OptionsmenueSettingsDTO.java @@ -0,0 +1,41 @@ +package de.muenchen.dave.domain.dtos; + +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; +import lombok.Data; + +import java.util.List; + +@Data +public class OptionsmenueSettingsDTO { + + private Fahrzeugklasse fahrzeugklasse; + + private ZaehldatenIntervall intervall; + + private List kraftfahrzeugverkehrChoosableIntervals; + + private List schwerverkehrChoosableIntervals; + + private List gueterverkehrChoosableIntervals; + + private List schwerverkehrsanteilProzentChoosableIntervals; + + private List gueterverkehrsanteilProzentChoosableIntervals; + + private List radverkehrChoosableIntervals; + + private List fussverkehrChoosableIntervals; + + private List lastkraftwagenChoosableIntervals; + + private List lastzuegeChoosableIntervals; + + private List busseChoosableIntervals; + + private List kraftraederChoosableIntervals; + + private List personenkraftwagenChoosableIntervals; + + private List lieferwagenChoosableIntervals; +} diff --git a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessfaehigkeitDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessfaehigkeitDTO.java index ae396884..9f3c97ce 100644 --- a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessfaehigkeitDTO.java +++ b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessfaehigkeitDTO.java @@ -1,5 +1,7 @@ package de.muenchen.dave.domain.dtos.messstelle; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; import lombok.Data; import lombok.NoArgsConstructor; @@ -11,6 +13,6 @@ public class EditMessfaehigkeitDTO implements Serializable { private String gueltigBis; private String gueltigAb; - private String fahrzeugklassen; - private String intervall; + private Fahrzeugklasse fahrzeugklasse; + private ZaehldatenIntervall intervall; } diff --git a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessquerschnittDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessquerschnittDTO.java index d32c43ba..05302da2 100644 --- a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessquerschnittDTO.java +++ b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessquerschnittDTO.java @@ -17,7 +17,7 @@ public class EditMessquerschnittDTO implements Serializable { private String lageMessquerschnitt; private String fahrtrichtung; private Integer anzahlFahrspuren; - private String fahrzeugKlassen; + private String fahrzeugklasse; private String detektierteVerkehrsarten; private String hersteller; private Integer anzahlDetektoren; diff --git a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessstelleDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessstelleDTO.java index c0332e97..793815d0 100644 --- a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessstelleDTO.java +++ b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/EditMessstelleDTO.java @@ -1,5 +1,6 @@ package de.muenchen.dave.domain.dtos.messstelle; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import lombok.Data; import java.io.Serializable; @@ -21,7 +22,7 @@ public class EditMessstelleDTO implements Serializable { private String abbaudatum; private String datumLetztePlausibleMessung; - private String fahrzeugKlassen; + private Fahrzeugklasse fahrzeugklasse; private String detektierteVerkehrsarten; private String hersteller; diff --git a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessfaehigkeitDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessfaehigkeitDTO.java index 1c12b1d8..d6439919 100644 --- a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessfaehigkeitDTO.java +++ b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessfaehigkeitDTO.java @@ -1,5 +1,6 @@ package de.muenchen.dave.domain.dtos.messstelle; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import de.muenchen.dave.domain.enums.ZaehldatenIntervall; import lombok.Data; import lombok.NoArgsConstructor; @@ -12,6 +13,6 @@ public class ReadMessfaehigkeitDTO implements Serializable { private String gueltigBis; private String gueltigAb; - private String fahrzeugklassen; + private Fahrzeugklasse fahrzeugklasse; private ZaehldatenIntervall intervall; } diff --git a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessstelleInfoDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessstelleInfoDTO.java index 18138342..49207efa 100644 --- a/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessstelleInfoDTO.java +++ b/src/main/java/de/muenchen/dave/domain/dtos/messstelle/ReadMessstelleInfoDTO.java @@ -1,5 +1,6 @@ package de.muenchen.dave.domain.dtos.messstelle; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import lombok.Data; import java.io.Serializable; @@ -14,7 +15,7 @@ public class ReadMessstelleInfoDTO implements Serializable { private String standort; private String stadtbezirk; private Integer stadtbezirkNummer; - private String fahrzeugKlassen; + private Fahrzeugklasse fahrzeugklasse; private String detektierteVerkehrsarten; private String hersteller; private Double longitude; diff --git a/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messfaehigkeit.java b/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messfaehigkeit.java index 6a8b92bc..48009de2 100644 --- a/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messfaehigkeit.java +++ b/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messfaehigkeit.java @@ -1,5 +1,7 @@ package de.muenchen.dave.domain.elasticsearch.detektor; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.elasticsearch.annotations.Field; @@ -15,6 +17,6 @@ public class Messfaehigkeit { LocalDate gueltigAb; @Field(type = FieldType.Date, pattern = "dd.MM.uuuu") LocalDate gueltigBis; - String fahrzeugklassen; - String intervall; + Fahrzeugklasse fahrzeugklasse; + ZaehldatenIntervall intervall; } diff --git a/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messstelle.java b/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messstelle.java index 842de725..6c23593d 100644 --- a/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messstelle.java +++ b/src/main/java/de/muenchen/dave/domain/elasticsearch/detektor/Messstelle.java @@ -1,5 +1,6 @@ package de.muenchen.dave.domain.elasticsearch.detektor; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import de.muenchen.dave.domain.enums.MessstelleStatus; import lombok.Data; import org.springframework.data.annotation.Id; @@ -35,8 +36,11 @@ public class Messstelle { Integer stadtbezirkNummer; String bemerkung; - String fahrzeugKlassen; + + Fahrzeugklasse fahrzeugklasse; + String detektierteVerkehrsarten; + String hersteller; @Field(type = FieldType.Date, pattern = "dd.MM.uuuu") diff --git a/src/main/java/de/muenchen/dave/domain/enums/Fahrzeugklasse.java b/src/main/java/de/muenchen/dave/domain/enums/Fahrzeugklasse.java new file mode 100644 index 00000000..a51df708 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/enums/Fahrzeugklasse.java @@ -0,0 +1,13 @@ +package de.muenchen.dave.domain.enums; + +public enum Fahrzeugklasse { + + RAD, + + SUMME_KFZ, + + ZWEI_PLUS_EINS, + + ACHT_PLUS_EINS; + +} diff --git a/src/main/java/de/muenchen/dave/domain/mapper/FahrzeugklassenMapper.java b/src/main/java/de/muenchen/dave/domain/mapper/FahrzeugklassenMapper.java new file mode 100644 index 00000000..78e9ea2f --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/mapper/FahrzeugklassenMapper.java @@ -0,0 +1,44 @@ +package de.muenchen.dave.domain.mapper; + +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.geodateneai.gen.model.MessfaehigkeitDto; +import de.muenchen.dave.geodateneai.gen.model.MessstelleDto; +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; + +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) +public interface FahrzeugklassenMapper { + + default Fahrzeugklasse map(final MessstelleDto.FahrzeugklasseEnum fahrzeugklasse) { + final Fahrzeugklasse mappingTarget; + if (MessstelleDto.FahrzeugklasseEnum.ZWEI_PLUS_EINS == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.ZWEI_PLUS_EINS; + } else if (MessstelleDto.FahrzeugklasseEnum.ACHT_PLUS_EINS == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.ACHT_PLUS_EINS; + } else if (MessstelleDto.FahrzeugklasseEnum.SUMME_KFZ == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.SUMME_KFZ; + } else if (MessstelleDto.FahrzeugklasseEnum.RAD == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.RAD; + } else { + mappingTarget = null; + } + return mappingTarget; + } + + default Fahrzeugklasse map(final MessfaehigkeitDto.FahrzeugklasseEnum fahrzeugklasse) { + final Fahrzeugklasse mappingTarget; + if (MessfaehigkeitDto.FahrzeugklasseEnum.ZWEI_PLUS_EINS == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.ZWEI_PLUS_EINS; + } else if (MessfaehigkeitDto.FahrzeugklasseEnum.ACHT_PLUS_EINS == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.ACHT_PLUS_EINS; + } else if (MessfaehigkeitDto.FahrzeugklasseEnum.SUMME_KFZ == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.SUMME_KFZ; + } else if (MessfaehigkeitDto.FahrzeugklasseEnum.RAD == fahrzeugklasse) { + mappingTarget = Fahrzeugklasse.RAD; + } else { + mappingTarget = null; + } + return mappingTarget; + } + +} diff --git a/src/main/java/de/muenchen/dave/domain/mapper/OptionsmenueSettingsMapper.java b/src/main/java/de/muenchen/dave/domain/mapper/OptionsmenueSettingsMapper.java new file mode 100644 index 00000000..85e4bf13 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/mapper/OptionsmenueSettingsMapper.java @@ -0,0 +1,13 @@ +package de.muenchen.dave.domain.mapper; + +import de.muenchen.dave.domain.OptionsmenueSettings; +import de.muenchen.dave.domain.dtos.OptionsmenueSettingsDTO; +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; + +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) +public interface OptionsmenueSettingsMapper { + + OptionsmenueSettingsDTO toDto(final OptionsmenueSettings optionsmenueSettings); + +} diff --git a/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleMapper.java b/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleMapper.java index 4c76e2a5..4f4098c3 100644 --- a/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleMapper.java +++ b/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleMapper.java @@ -14,7 +14,6 @@ import de.muenchen.dave.domain.elasticsearch.detektor.Messquerschnitt; import de.muenchen.dave.domain.elasticsearch.detektor.Messstelle; import de.muenchen.dave.domain.enums.MessstelleStatus; -import de.muenchen.dave.domain.enums.ZaehldatenIntervall; import de.muenchen.dave.domain.mapper.StadtbezirkMapper; import de.muenchen.dave.util.DaveConstants; import de.muenchen.dave.util.SuchwortUtil; @@ -66,7 +65,7 @@ default void bean2editDtoAfterMapping(@MappingTarget EditMessstelleDTO dto, Mess @Mapping(target = "stadtbezirkNummer", ignore = true) @Mapping(target = "bemerkung", ignore = true) @Mapping(target = "hersteller", ignore = true) - @Mapping(target = "fahrzeugKlassen", ignore = true) + @Mapping(target = "fahrzeugklasse", ignore = true) @Mapping(target = "detektierteVerkehrsarten", ignore = true) @Mapping(target = "datumLetztePlausibleMessung", ignore = true) @Mapping(target = "punkt", ignore = true) @@ -161,22 +160,8 @@ default void messfaehigkeitBean2MessfaehigkeitDtoAftermapping(@MappingTarget Edi } } - @Mapping(target = "intervall", ignore = true) ReadMessfaehigkeitDTO messfaehigkeitBean2ReadMessfaehigkeitDto(Messfaehigkeit bean); List messfaehigkeitBean2ReadMessfaehigkeitDto(List bean); - @AfterMapping - default void messfaehigkeitBean2MessfaehigkeitDtoAftermapping(@MappingTarget ReadMessfaehigkeitDTO dto, Messfaehigkeit bean) { - if (StringUtils.equalsIgnoreCase(ZaehldatenIntervall.STUNDE_KOMPLETT.getMinutesPerIntervall().toString(), bean.getIntervall())) { - dto.setIntervall(ZaehldatenIntervall.STUNDE_KOMPLETT); - } else if (StringUtils.equalsIgnoreCase(ZaehldatenIntervall.STUNDE_HALB.getMinutesPerIntervall().toString(), bean.getIntervall())) { - dto.setIntervall(ZaehldatenIntervall.STUNDE_HALB); - } else if (StringUtils.equalsIgnoreCase(ZaehldatenIntervall.STUNDE_VIERTEL.getMinutesPerIntervall().toString(), bean.getIntervall())) { - dto.setIntervall(ZaehldatenIntervall.STUNDE_VIERTEL); - } else { - dto.setIntervall(ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT); - } - } - } diff --git a/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleReceiverMapper.java b/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleReceiverMapper.java index 3f96130e..3fa85a9e 100644 --- a/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleReceiverMapper.java +++ b/src/main/java/de/muenchen/dave/domain/mapper/detektor/MessstelleReceiverMapper.java @@ -5,6 +5,8 @@ import de.muenchen.dave.domain.elasticsearch.detektor.Messfaehigkeit; import de.muenchen.dave.domain.elasticsearch.detektor.Messquerschnitt; import de.muenchen.dave.domain.elasticsearch.detektor.Messstelle; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; +import de.muenchen.dave.domain.mapper.FahrzeugklassenMapper; import de.muenchen.dave.domain.mapper.StadtbezirkMapper; import de.muenchen.dave.geodateneai.gen.model.MessfaehigkeitDto; import de.muenchen.dave.geodateneai.gen.model.MessquerschnittDto; @@ -22,13 +24,15 @@ import org.mapstruct.MappingTarget; import org.springframework.data.elasticsearch.core.geo.GeoPoint; -import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; -@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) +@Mapper( + uses = FahrzeugklassenMapper.class, + componentModel = MappingConstants.ComponentModel.SPRING +) public interface MessstelleReceiverMapper { Messstelle createMessstelle(MessstelleDto dto, @Context StadtbezirkMapper stadtbezirkMapper); @@ -66,14 +70,6 @@ default void createMessstelleAfterMapping(@MappingTarget Messstelle bean, Messst if (CollectionUtils.isEmpty(bean.getMessquerschnitte())) { bean.setMessquerschnitte(new ArrayList<>()); } - - if (CollectionUtils.isNotEmpty(bean.getMessfaehigkeiten())) { - bean.getMessfaehigkeiten().forEach(messfaehigkeit -> { - if (LocalDate.now().isBefore(messfaehigkeit.getGueltigBis())) { - bean.setFahrzeugKlassen(messfaehigkeit.getFahrzeugklassen()); - } - }); - } } @AfterMapping @@ -101,6 +97,22 @@ default void createMessquerschnittAfterMapping(@MappingTarget Messquerschnitt be @Mapping(target = "standort", ignore = true) Messquerschnitt updateMessquerschnitt(@MappingTarget Messquerschnitt existing, MessquerschnittDto dto, @Context StadtbezirkMapper stadtbezirkMapper); + default ZaehldatenIntervall map(final MessfaehigkeitDto.IntervallEnum intervall) { + final ZaehldatenIntervall mappingTarget; + if (MessfaehigkeitDto.IntervallEnum.STUNDE_VIERTEL == intervall) { + mappingTarget = ZaehldatenIntervall.STUNDE_VIERTEL; + } else if (MessfaehigkeitDto.IntervallEnum.STUNDE_VIERTEL_EINGESCHRAENKT == intervall) { + mappingTarget = ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT; + } else if (MessfaehigkeitDto.IntervallEnum.STUNDE_HALB == intervall) { + mappingTarget = ZaehldatenIntervall.STUNDE_HALB; + } else if (MessfaehigkeitDto.IntervallEnum.STUNDE_KOMPLETT == intervall) { + mappingTarget = ZaehldatenIntervall.STUNDE_KOMPLETT; + } else { + mappingTarget = null; + } + return mappingTarget; + } + @Mapping(target = "kalendertag", ignore = true) UnauffaelligerTag dto2Entity(final UnauffaelligerTagDto dto, @Context final Kalendertag kalendertag); diff --git a/src/main/java/de/muenchen/dave/repositories/relationaldb/OptionsmenueSettingsRepository.java b/src/main/java/de/muenchen/dave/repositories/relationaldb/OptionsmenueSettingsRepository.java new file mode 100644 index 00000000..be7754e2 --- /dev/null +++ b/src/main/java/de/muenchen/dave/repositories/relationaldb/OptionsmenueSettingsRepository.java @@ -0,0 +1,13 @@ +/* + * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik + * der Landeshauptstadt München, 2020 + */ +package de.muenchen.dave.repositories.relationaldb; + +import de.muenchen.dave.domain.OptionsmenueSettings; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.UUID; + +public interface OptionsmenueSettingsRepository extends JpaRepository { +} diff --git a/src/main/java/de/muenchen/dave/services/OptionsmenueSettingsService.java b/src/main/java/de/muenchen/dave/services/OptionsmenueSettingsService.java new file mode 100644 index 00000000..4848b0a4 --- /dev/null +++ b/src/main/java/de/muenchen/dave/services/OptionsmenueSettingsService.java @@ -0,0 +1,28 @@ +package de.muenchen.dave.services; + +import de.muenchen.dave.domain.dtos.OptionsmenueSettingsDTO; +import de.muenchen.dave.domain.mapper.OptionsmenueSettingsMapper; +import de.muenchen.dave.repositories.relationaldb.OptionsmenueSettingsRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class OptionsmenueSettingsService { + + private final OptionsmenueSettingsRepository optionsmenueSettingsRepository; + + private final OptionsmenueSettingsMapper optionsmenueSettingsMapper; + + public List getAllOptionsmenueSettingsForMessstellen() { + return optionsmenueSettingsRepository + .findAll() + .stream() + .map(optionsmenueSettingsMapper::toDto) + .toList(); + } +} diff --git a/src/main/java/de/muenchen/dave/services/messstelle/MessstelleService.java b/src/main/java/de/muenchen/dave/services/messstelle/MessstelleService.java index e7cc0f9d..ee97c08c 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/MessstelleService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/MessstelleService.java @@ -46,8 +46,8 @@ public Messstelle getMessstelleByMstId(final String mstId) { } public ReadMessstelleInfoDTO readMessstelleInfo(final String messstelleId) { - final Messstelle byIdOrThrowException = messstelleIndexService.findByIdOrThrowException(messstelleId); - return messstelleMapper.bean2readDto(byIdOrThrowException, stadtbezirkMapper); + final var messstelle = messstelleIndexService.findByIdOrThrowException(messstelleId); + return messstelleMapper.bean2readDto(messstelle, stadtbezirkMapper); } public ReadMessstelleInfoDTO readMessstelleInfoByMstId(final String mstId) { @@ -56,10 +56,10 @@ public ReadMessstelleInfoDTO readMessstelleInfoByMstId(final String mstId) { } public EditMessstelleDTO getMessstelleToEdit(final String messstelleId) { - final Messstelle byIdOrThrowException = messstelleIndexService.findByIdOrThrowException(messstelleId); - byIdOrThrowException.setMessfaehigkeiten( - byIdOrThrowException.getMessfaehigkeiten().stream().sorted(Comparator.comparing(Messfaehigkeit::getGueltigAb)).collect(Collectors.toList())); - return messstelleMapper.bean2editDto(byIdOrThrowException, stadtbezirkMapper); + final var messstelle = messstelleIndexService.findByIdOrThrowException(messstelleId); + messstelle.setMessfaehigkeiten( + messstelle.getMessfaehigkeiten().stream().sorted(Comparator.comparing(Messfaehigkeit::getGueltigAb)).collect(Collectors.toList())); + return messstelleMapper.bean2editDto(messstelle, stadtbezirkMapper); } public BackendIdDTO updateMessstelle(final EditMessstelleDTO dto) { diff --git a/src/main/resources/api/geodateneai.json b/src/main/resources/api/geodateneai.json index 8975361d..f33c5b7a 100644 --- a/src/main/resources/api/geodateneai.json +++ b/src/main/resources/api/geodateneai.json @@ -48,22 +48,22 @@ "required": true }, "responses": { - "500": { - "description": "Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten.", + "200": { + "description": "Intervalle erfolgreich abgefragt.", "content": { "application/hal+json": { "schema": { - "$ref": "#/components/schemas/InformationResponseDto" + "$ref": "#/components/schemas/IntervalResponseDto" } } } }, - "200": { - "description": "Intervalle erfolgreich abgefragt.", + "500": { + "description": "Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten.", "content": { "application/hal+json": { "schema": { - "$ref": "#/components/schemas/IntervalResponseDto" + "$ref": "#/components/schemas/InformationResponseDto" } } } @@ -259,22 +259,22 @@ } ], "responses": { - "500": { - "description": "Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten.", + "200": { + "description": "Nicht Plausible Tage erfolgreich abgefragt.", "content": { "application/hal+json": { "schema": { - "$ref": "#/components/schemas/InformationResponseDto" + "$ref": "#/components/schemas/NichtPlausibleTageDto" } } } }, - "200": { - "description": "Nicht Plausible Tage erfolgreich abgefragt.", + "500": { + "description": "Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten.", "content": { "application/hal+json": { "schema": { - "$ref": "#/components/schemas/NichtPlausibleTageDto" + "$ref": "#/components/schemas/InformationResponseDto" } } } @@ -687,11 +687,25 @@ "type": "string", "format": "date" }, - "fahrzeugklassen": { - "type": "string" + "fahrzeugklasse": { + "type": "string", + "enum": [ + "RAD", + "SUMME_KFZ", + "ZWEI_PLUS_EINS", + "ACHT_PLUS_EINS", + "UNBEKANNT" + ] }, "intervall": { - "type": "string" + "type": "string", + "enum": [ + "STUNDE_VIERTEL", + "STUNDE_VIERTEL_EINGESCHRAENKT", + "STUNDE_HALB", + "STUNDE_KOMPLETT", + "UNBEKANNT" + ] } } }, @@ -769,8 +783,15 @@ "type": "string", "format": "date" }, - "fahrzeugKlassen": { - "type": "string" + "fahrzeugklasse": { + "type": "string", + "enum": [ + "RAD", + "SUMME_KFZ", + "ZWEI_PLUS_EINS", + "ACHT_PLUS_EINS", + "UNBEKANNT" + ] }, "detektierteVerkehrsarten": { "type": "string" diff --git a/src/main/resources/db/migration/V5__add-settings-for-optionsmenu.sql b/src/main/resources/db/migration/V5__add-settings-for-optionsmenu.sql new file mode 100644 index 00000000..cb0c6f43 --- /dev/null +++ b/src/main/resources/db/migration/V5__add-settings-for-optionsmenu.sql @@ -0,0 +1,22 @@ +CREATE TABLE IF NOT EXISTS dave.optionsmenuesettings ( + id character varying(36) NOT NULL, + created_time timestamp without time zone NOT NULL, + version bigint, + fahrzeugklasse character varying(255), + intervall character varying(255), + kraftfahrzeugverkehr_choosable_intervals jsonb, + schwerverkehr_choosable_intervals jsonb, + gueterverkehr_choosable_intervals jsonb, + schwerverkehrsanteil_prozent_choosable_intervals jsonb, + gueterverkehrsanteil_prozent_choosable_intervals jsonb, + radverkehr_choosable_intervals jsonb, + fussverkehr_choosable_intervals jsonb, + lastkraftwagen_choosable_intervals jsonb, + lastzuege_choosable_intervals jsonb, + busse_choosable_intervals jsonb, + kraftraeder_choosable_intervals jsonb, + personenkraftwagen_choosable_intervals jsonb, + lieferwagen_choosable_intervals jsonb, + CONSTRAINT optionsmenuesettings_pkey PRIMARY KEY (id), + CONSTRAINT unique_optionsmenuesettings_fahrzeugklasse_intervall UNIQUE (fahrzeugklasse, intervall) +); \ No newline at end of file diff --git a/src/test/java/de/muenchen/dave/domain/elasticsearch/MessfaehigkeitRandomFactory.java b/src/test/java/de/muenchen/dave/domain/elasticsearch/MessfaehigkeitRandomFactory.java index 6c08cd26..6ff28a20 100644 --- a/src/test/java/de/muenchen/dave/domain/elasticsearch/MessfaehigkeitRandomFactory.java +++ b/src/test/java/de/muenchen/dave/domain/elasticsearch/MessfaehigkeitRandomFactory.java @@ -2,11 +2,14 @@ import com.github.javafaker.Faker; import de.muenchen.dave.domain.elasticsearch.detektor.Messfaehigkeit; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; import de.muenchen.dave.geodateneai.gen.model.MessfaehigkeitDto; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; public class MessfaehigkeitRandomFactory { @@ -14,8 +17,8 @@ public class MessfaehigkeitRandomFactory { public static Messfaehigkeit getMessfaehigkeit() { final Messfaehigkeit messfaehigkeit = new Messfaehigkeit(); - messfaehigkeit.setFahrzeugklassen(fakerInstance.pokemon().location()); - messfaehigkeit.setIntervall(fakerInstance.pokemon().location()); + messfaehigkeit.setFahrzeugklasse(Fahrzeugklasse.values()[ThreadLocalRandom.current().nextInt(Fahrzeugklasse.values().length)]); + messfaehigkeit.setIntervall(ZaehldatenIntervall.values()[ThreadLocalRandom.current().nextInt(ZaehldatenIntervall.values().length)]); messfaehigkeit .setGueltigAb(LocalDate.of(fakerInstance.number().numberBetween(2000, 2020), fakerInstance.number().numberBetween(1, 12), fakerInstance.number() .numberBetween(1, 28))); @@ -34,8 +37,9 @@ public static List getSomeMessfaehigkeiten() { public static MessfaehigkeitDto getMessfaehigkeitDto() { final MessfaehigkeitDto dto = new MessfaehigkeitDto(); - dto.setFahrzeugklassen(fakerInstance.pokemon().location()); - dto.setIntervall(fakerInstance.pokemon().location()); + dto.setFahrzeugklasse( + MessfaehigkeitDto.FahrzeugklasseEnum.values()[ThreadLocalRandom.current().nextInt(MessfaehigkeitDto.FahrzeugklasseEnum.values().length)]); + dto.setIntervall(MessfaehigkeitDto.IntervallEnum.values()[ThreadLocalRandom.current().nextInt(MessfaehigkeitDto.IntervallEnum.values().length)]); dto.setGueltigAb(LocalDate.of(fakerInstance.number().numberBetween(2000, 2020), fakerInstance.number().numberBetween(1, 12), fakerInstance.number() .numberBetween(1, 28))); dto.setGueltigBis(LocalDate.of(fakerInstance.number().numberBetween(2000, 2020), fakerInstance.number().numberBetween(1, 12), fakerInstance.number() diff --git a/src/test/java/de/muenchen/dave/domain/elasticsearch/MessstelleRandomFactory.java b/src/test/java/de/muenchen/dave/domain/elasticsearch/MessstelleRandomFactory.java index b149e29d..5667d69b 100644 --- a/src/test/java/de/muenchen/dave/domain/elasticsearch/MessstelleRandomFactory.java +++ b/src/test/java/de/muenchen/dave/domain/elasticsearch/MessstelleRandomFactory.java @@ -2,6 +2,7 @@ import com.github.javafaker.Faker; import de.muenchen.dave.domain.elasticsearch.detektor.Messstelle; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import de.muenchen.dave.domain.enums.MessstelleStatus; import de.muenchen.dave.geodateneai.gen.model.MessstelleDto; import org.springframework.data.elasticsearch.core.geo.GeoPoint; @@ -10,6 +11,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; public class MessstelleRandomFactory { private static final Faker fakerInstance = Faker.instance(); @@ -20,7 +22,7 @@ public static Messstelle getMessstelle() { messstelle.setMstId(fakerInstance.number().digits(10)); messstelle.setName(fakerInstance.pokemon().name()); messstelle.setStatus(MessstelleStatus.IN_BESTAND); - messstelle.setFahrzeugKlassen(fakerInstance.pokemon().name()); + messstelle.setFahrzeugklasse(Fahrzeugklasse.values()[ThreadLocalRandom.current().nextInt(Fahrzeugklasse.values().length)]); messstelle.setDetektierteVerkehrsarten("KFZ"); messstelle.setHersteller(fakerInstance.pokemon().name()); messstelle.setRealisierungsdatum( @@ -60,7 +62,8 @@ public static MessstelleDto getMessstelleDto() { dto.setMstId(UUID.randomUUID().toString()); dto.setName(fakerInstance.pokemon().name()); dto.setStatus(MessstelleDto.StatusEnum.IN_BESTAND); - dto.setFahrzeugKlassen(fakerInstance.pokemon().name()); + dto.setFahrzeugklasse( + MessstelleDto.FahrzeugklasseEnum.values()[ThreadLocalRandom.current().nextInt(MessstelleDto.FahrzeugklasseEnum.values().length)]); dto.setDetektierteVerkehrsarten("KFZ"); dto.setHersteller(fakerInstance.pokemon().name()); dto.setRealisierungsdatum( diff --git a/src/test/java/de/muenchen/dave/domain/mapper/MessstelleMapperTests.java b/src/test/java/de/muenchen/dave/domain/mapper/MessstelleMapperTests.java index 509212f5..bcf8fbbf 100644 --- a/src/test/java/de/muenchen/dave/domain/mapper/MessstelleMapperTests.java +++ b/src/test/java/de/muenchen/dave/domain/mapper/MessstelleMapperTests.java @@ -11,6 +11,7 @@ import de.muenchen.dave.domain.elasticsearch.MessstelleRandomFactory; import de.muenchen.dave.domain.elasticsearch.detektor.Messquerschnitt; import de.muenchen.dave.domain.elasticsearch.detektor.Messstelle; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import de.muenchen.dave.domain.mapper.detektor.MessstelleMapper; import de.muenchen.dave.domain.mapper.detektor.MessstelleMapperImpl; import de.muenchen.dave.util.SuchwortUtil; @@ -50,7 +51,7 @@ void testBean2readDto() { expected.setMessquerschnitte(this.mapper.bean2readDto(bean.getMessquerschnitte())); expected.setMessfaehigkeiten(this.mapper.messfaehigkeitBean2ReadMessfaehigkeitDto(bean.getMessfaehigkeiten())); expected.setHersteller(bean.getHersteller()); - expected.setFahrzeugKlassen(bean.getFahrzeugKlassen()); + expected.setFahrzeugklasse(bean.getFahrzeugklasse()); expected.setDetektierteVerkehrsarten(bean.getDetektierteVerkehrsarten()); expected.setKommentar(bean.getKommentar()); expected.setLageplanVorhanden(bean.getLageplanVorhanden()); @@ -92,7 +93,7 @@ void testBean2editDto() { expected.setLongitude(bean.getPunkt().getLon()); expected.setLatitude(bean.getPunkt().getLat()); expected.setHersteller(bean.getHersteller()); - expected.setFahrzeugKlassen(bean.getFahrzeugKlassen()); + expected.setFahrzeugklasse(bean.getFahrzeugklasse()); expected.setDetektierteVerkehrsarten(bean.getDetektierteVerkehrsarten()); expected.setSichtbarDatenportal(bean.getSichtbarDatenportal()); @@ -125,7 +126,7 @@ void testUpdateMessstelle() { updatedData.setStatus("darf nicht aktualisiert werden"); updatedData.setBemerkung("darf nicht aktualisiert werden"); updatedData.setHersteller("darf nicht aktualisiert werden"); - updatedData.setFahrzeugKlassen("darf nicht aktualisiert werden"); + updatedData.setFahrzeugklasse(Fahrzeugklasse.RAD); updatedData.setDetektierteVerkehrsarten("darf nicht aktualisiert werden"); updatedData.setStadtbezirkNummer(666); updatedData.setRealisierungsdatum("1999-11-11"); @@ -159,7 +160,7 @@ void testUpdateMessstelle() { expected.setMessquerschnitte(bean.getMessquerschnitte()); expected.setPunkt(new GeoPoint(updatedData.getLatitude(), updatedData.getLongitude())); expected.setHersteller(bean.getHersteller()); - expected.setFahrzeugKlassen(bean.getFahrzeugKlassen()); + expected.setFahrzeugklasse(bean.getFahrzeugklasse()); expected.setDetektierteVerkehrsarten(bean.getDetektierteVerkehrsarten()); expected.setMessfaehigkeiten(bean.getMessfaehigkeiten()); diff --git a/src/test/java/de/muenchen/dave/domain/mapper/MessstelleReceiverMapperTests.java b/src/test/java/de/muenchen/dave/domain/mapper/MessstelleReceiverMapperTests.java index befa8702..9d99aaf4 100644 --- a/src/test/java/de/muenchen/dave/domain/mapper/MessstelleReceiverMapperTests.java +++ b/src/test/java/de/muenchen/dave/domain/mapper/MessstelleReceiverMapperTests.java @@ -12,7 +12,9 @@ import de.muenchen.dave.geodateneai.gen.model.MessstelleDto; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.reflect.FieldUtils; import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.data.elasticsearch.core.geo.GeoPoint; @@ -27,7 +29,13 @@ @Slf4j class MessstelleReceiverMapperTests { - private final MessstelleReceiverMapper mapper = new MessstelleReceiverMapperImpl(); + private MessstelleReceiverMapper mapper; + + @BeforeEach + void beforeEach() throws IllegalAccessException { + mapper = new MessstelleReceiverMapperImpl(); + FieldUtils.writeField(mapper, "fahrzeugklassenMapper", new FahrzeugklassenMapperImpl(), true); + } @Test void testCreateMessstelle() { @@ -49,7 +57,7 @@ void testCreateMessstelle() { expected.setGeprueft(false); expected.setSuchwoerter(new ArrayList<>()); expected.setHersteller(dto.getHersteller()); - expected.setFahrzeugKlassen(dto.getFahrzeugKlassen()); + expected.setFahrzeugklasse(new FahrzeugklassenMapperImpl().map(dto.getFahrzeugklasse())); expected.setDetektierteVerkehrsarten(dto.getDetektierteVerkehrsarten()); final String stadtbezirkBezeichnung = "Schwabing-West"; final Set stadtbezirke = new HashSet<>(Splitter.on("-").omitEmptyStrings().trimResults().splitToList(stadtbezirkBezeichnung)); @@ -118,7 +126,7 @@ void testUpdateMessstelle() { expected.setAbbaudatum(updatedData.getAbbaudatum()); expected.setDatumLetztePlausibleMessung(updatedData.getDatumLetztePlausibleMessung()); expected.setHersteller(updatedData.getHersteller()); - expected.setFahrzeugKlassen(updatedData.getFahrzeugKlassen()); + expected.setFahrzeugklasse(new FahrzeugklassenMapperImpl().map(updatedData.getFahrzeugklasse())); expected.setDetektierteVerkehrsarten(updatedData.getDetektierteVerkehrsarten()); expected.setSuchwoerter(new ArrayList<>()); expected.getSuchwoerter().addAll(bean.getCustomSuchwoerter()); diff --git a/src/test/java/de/muenchen/dave/services/OptionsmenueSettingsServiceTest.java b/src/test/java/de/muenchen/dave/services/OptionsmenueSettingsServiceTest.java new file mode 100644 index 00000000..17dc9aef --- /dev/null +++ b/src/test/java/de/muenchen/dave/services/OptionsmenueSettingsServiceTest.java @@ -0,0 +1,90 @@ +package de.muenchen.dave.services; + +import de.muenchen.dave.domain.OptionsmenueSettings; +import de.muenchen.dave.domain.dtos.OptionsmenueSettingsDTO; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; +import de.muenchen.dave.domain.enums.ZaehldatenIntervall; +import de.muenchen.dave.domain.mapper.OptionsmenueSettingsMapperImpl; +import de.muenchen.dave.repositories.relationaldb.OptionsmenueSettingsRepository; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; +import org.mockito.quality.Strictness; + +import java.util.List; + +@ExtendWith(MockitoExtension.class) +@MockitoSettings(strictness = Strictness.LENIENT) +class OptionsmenueSettingsServiceTest { + + private OptionsmenueSettingsService optionsmenueSettingsService; + + @Mock + private OptionsmenueSettingsRepository optionsmenueSettingsRepository; + + @BeforeEach + void setup() { + optionsmenueSettingsService = new OptionsmenueSettingsService(optionsmenueSettingsRepository, new OptionsmenueSettingsMapperImpl()); + Mockito.reset(optionsmenueSettingsRepository); + } + + @Test + void getByReadMessfaehigkeit() { + final var optionsmenueSettings1 = new OptionsmenueSettings(); + optionsmenueSettings1.setIntervall(ZaehldatenIntervall.STUNDE_KOMPLETT); + optionsmenueSettings1.setFahrzeugklasse(Fahrzeugklasse.ACHT_PLUS_EINS); + optionsmenueSettings1.setKraftfahrzeugverkehrChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_HALB, ZaehldatenIntervall.STUNDE_KOMPLETT)); + + final var optionsmenueSettings2 = new OptionsmenueSettings(); + optionsmenueSettings2.setIntervall(ZaehldatenIntervall.STUNDE_HALB); + optionsmenueSettings2.setFahrzeugklasse(Fahrzeugklasse.ACHT_PLUS_EINS); + optionsmenueSettings2.setKraftfahrzeugverkehrChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_VIERTEL)); + + final var optionsmenueSettings3 = new OptionsmenueSettings(); + optionsmenueSettings3.setIntervall(ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT); + optionsmenueSettings3.setFahrzeugklasse(Fahrzeugklasse.ZWEI_PLUS_EINS); + optionsmenueSettings3.setBusseChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_VIERTEL)); + + final var optionsmenueSettings4 = new OptionsmenueSettings(); + optionsmenueSettings4.setIntervall(null); + optionsmenueSettings4.setFahrzeugklasse(null); + optionsmenueSettings4.setRadverkehrChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_HALB)); + optionsmenueSettings4.setLastkraftwagenChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_HALB)); + + Mockito.when(optionsmenueSettingsRepository.findAll()) + .thenReturn(List.of(optionsmenueSettings1, optionsmenueSettings2, optionsmenueSettings3, optionsmenueSettings4)); + + final var expectedOptionsmenueSettings1 = new OptionsmenueSettingsDTO(); + expectedOptionsmenueSettings1.setIntervall(ZaehldatenIntervall.STUNDE_KOMPLETT); + expectedOptionsmenueSettings1.setFahrzeugklasse(Fahrzeugklasse.ACHT_PLUS_EINS); + expectedOptionsmenueSettings1.setKraftfahrzeugverkehrChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_HALB, ZaehldatenIntervall.STUNDE_KOMPLETT)); + + final var expectedOptionsmenueSettings2 = new OptionsmenueSettingsDTO(); + expectedOptionsmenueSettings2.setIntervall(ZaehldatenIntervall.STUNDE_HALB); + expectedOptionsmenueSettings2.setFahrzeugklasse(Fahrzeugklasse.ACHT_PLUS_EINS); + expectedOptionsmenueSettings2.setKraftfahrzeugverkehrChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_VIERTEL)); + + final var expectedOptionsmenueSettings3 = new OptionsmenueSettingsDTO(); + expectedOptionsmenueSettings3.setIntervall(ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT); + expectedOptionsmenueSettings3.setFahrzeugklasse(Fahrzeugklasse.ZWEI_PLUS_EINS); + expectedOptionsmenueSettings3.setBusseChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_VIERTEL)); + + final var expectedOptionsmenueSettings4 = new OptionsmenueSettingsDTO(); + expectedOptionsmenueSettings4.setIntervall(null); + expectedOptionsmenueSettings4.setFahrzeugklasse(null); + expectedOptionsmenueSettings4.setRadverkehrChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_HALB)); + expectedOptionsmenueSettings4.setLastkraftwagenChoosableIntervals(List.of(ZaehldatenIntervall.STUNDE_HALB)); + + final var result = optionsmenueSettingsService.getAllOptionsmenueSettingsForMessstellen(); + + Assertions.assertThat(result) + .isEqualTo(List.of(expectedOptionsmenueSettings1, expectedOptionsmenueSettings2, expectedOptionsmenueSettings3, expectedOptionsmenueSettings4)); + + Mockito.verify(optionsmenueSettingsRepository, Mockito.times(1)).findAll(); + } +} diff --git a/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java b/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java index 22097f7e..65c3beca 100644 --- a/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java +++ b/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java @@ -10,6 +10,7 @@ import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO; import de.muenchen.dave.domain.dtos.messstelle.ReadMessquerschnittDTO; import de.muenchen.dave.domain.dtos.messstelle.ReadMessstelleInfoDTO; +import de.muenchen.dave.domain.enums.Fahrzeugklasse; import de.muenchen.dave.geodateneai.gen.model.IntervalDto; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -283,7 +284,7 @@ ReadMessstelleInfoDTO getMessstelle() { readMessstelleInfoDTO.setStandort("Hauptstraße 1"); readMessstelleInfoDTO.setStadtbezirk("Mitte"); readMessstelleInfoDTO.setStadtbezirkNummer(1); - readMessstelleInfoDTO.setFahrzeugKlassen("PKW, LKW"); + readMessstelleInfoDTO.setFahrzeugklasse(Fahrzeugklasse.ZWEI_PLUS_EINS); readMessstelleInfoDTO.setDetektierteVerkehrsarten("PKW, LKW, Motorrad"); readMessstelleInfoDTO.setHersteller("Messung GmbH"); readMessstelleInfoDTO.setLongitude(10.12345);