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);