diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/KitaFinderEaiApplication.java b/src/main/java/de/muenchen/rbs/kitafindereai/KitaFinderEaiApplication.java index 76a7d4c..92156a1 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/KitaFinderEaiApplication.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/KitaFinderEaiApplication.java @@ -1,32 +1,13 @@ package de.muenchen.rbs.kitafindereai; -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class KitaFinderEaiApplication implements CommandLineRunner { - - @Override - public void run(String... arg0) throws Exception { - if (arg0.length > 0 && arg0[0].equals("exitcode")) { - throw new ExitException(); - } - } +public class KitaFinderEaiApplication { public static void main(String[] args) throws Exception { new SpringApplication(KitaFinderEaiApplication.class).run(args); } - class ExitException extends RuntimeException implements ExitCodeGenerator { - private static final long serialVersionUID = 1L; - - @Override - public int getExitCode() { - return 10; - } - - } - } diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderApiAdapter.java b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderApiAdapter.java index 0f4d333..85b5ab3 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderApiAdapter.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderApiAdapter.java @@ -23,7 +23,9 @@ import lombok.extern.slf4j.Slf4j; /** + * Adapter handling calls to kitafinder. * + * @author m.zollbrecht */ @Slf4j @Component diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderService.java b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderService.java index 2effeee..d97ad5d 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderService.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/KitaFinderService.java @@ -16,7 +16,10 @@ import lombok.extern.slf4j.Slf4j; /** + * Service to call kitafinder using stored config data in the form of + * {@linkplain KitafinderKitaKonfigData}. * + * @author m.zollbrecht */ @Slf4j @Service diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderExport.java b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderExport.java index 08bdc44..a20e8b0 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderExport.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderExport.java @@ -11,7 +11,9 @@ import lombok.NoArgsConstructor; /** + * Wrapper of kitafinder-export data. * + * @author m.zollbrecht */ @Data @NoArgsConstructor diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKind.java b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKind.java index 718ee1c..3cda6cb 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKind.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKind.java @@ -11,7 +11,9 @@ import lombok.NoArgsConstructor; /** + * A child as received from kitafinder. * + * @author m.zollbrecht */ @Data @NoArgsConstructor diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKindList.java b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKindList.java index da02b3d..cd3c292 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKindList.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/adapter/kitaplaner/model/KitafinderKindList.java @@ -14,7 +14,9 @@ import lombok.NoArgsConstructor; /** + * A list of children as received from kitafinder. * + * @author m.zollbrecht */ @Data @NoArgsConstructor diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/api/InternalApiController.java b/src/main/java/de/muenchen/rbs/kitafindereai/api/InternalApiController.java index 3773b4f..7a0d88a 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/api/InternalApiController.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/api/InternalApiController.java @@ -15,8 +15,9 @@ import org.springframework.web.bind.annotation.RestController; import de.muenchen.rbs.kitafindereai.data.KitafinderKitaKonfigData; -import de.muenchen.rbs.kitafindereai.data.KitafinderKitaKonfigDataDto; +import de.muenchen.rbs.kitafindereai.data.KitafinderKitaKonfigDataReadDto; import de.muenchen.rbs.kitafindereai.data.KitafinderKitaKonfigDataRepository; +import de.muenchen.rbs.kitafindereai.data.KitafinderKitaKonfigDataWriteDto; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Schema; @@ -40,29 +41,42 @@ public class InternalApiController { ModelMapper mapper; @PostMapping("kitadata/{kibigWebId}") - public ResponseEntity saveKitafinderKitaKonfig( + public ResponseEntity saveKitafinderKitaKonfig( @Parameter(in = ParameterIn.PATH, description = "kibigWebId der Einrichtung für die Kinddaten abgerufen werden", required = true, schema = @Schema(type = "string", description = "KibigwebId 162(für München) - 001 (für Städtisch) - \\d (Art/Form der Einrichtung) - \\d{3} (Nummer der Einrichtung)", example = "1620018207")) @PathVariable("kibigWebId") String kibigWebId, - @RequestBody KitafinderKitaKonfigData data) { - if (!kibigWebId.equals(data.getKibigwebId())) { - ResponseEntity.unprocessableEntity().build(); - } + @RequestBody KitafinderKitaKonfigDataWriteDto data) { + log.info("Endpoint POST kitadata/{} was called. Updating/saving the received data...", kibigWebId); + Optional kitaKonfig = repository.findById(kibigWebId); + + // retrieve existing data or get default + KitafinderKitaKonfigData kitaKonfigData = kitaKonfig.orElseGet(() -> { + KitafinderKitaKonfigData defaultData = new KitafinderKitaKonfigData(); + defaultData.setKibigwebId(kibigWebId); + return defaultData; + }); - data.setPassword(encryptor.encrypt(data.getPassword())); - KitafinderKitaKonfigData savedData = repository.save(data); + // Update with POSTed values + kitaKonfigData.setPassword(encryptor.encrypt(data.getPassword())); + kitaKonfigData.setKitaIdExtern(data.getKitaIdExtern()); + kitaKonfigData.setTraeger(data.getTraeger()); + + // save + KitafinderKitaKonfigData savedData = repository.save(kitaKonfigData); - KitafinderKitaKonfigDataDto dto = mapper.map(savedData, KitafinderKitaKonfigDataDto.class); + // return saved data + KitafinderKitaKonfigDataReadDto dto = mapper.map(savedData, KitafinderKitaKonfigDataReadDto.class); return ResponseEntity.ok().body(dto); } @GetMapping("kitadata/{kibigWebId}") - public ResponseEntity getKitafinderKitaKonfig( + public ResponseEntity getKitafinderKitaKonfig( @Parameter(in = ParameterIn.PATH, description = "kibigWebId der Einrichtung für die Kinddaten abgerufen werden", required = true, schema = @Schema(type = "string", description = "KibigwebId 162(für München) - 001 (für Städtisch) - \\d (Art/Form der Einrichtung) - \\d{3} (Nummer der Einrichtung)", example = "1620018207")) @PathVariable("kibigWebId") String kibigWebId) { + log.info("Endpoint GET kitadata/{} was called. Retrieving the stored data...", kibigWebId); Optional kitaKonfig = repository.findById(kibigWebId); if (kitaKonfig.isEmpty()) { return ResponseEntity.notFound().build(); } else { - KitafinderKitaKonfigDataDto dto = mapper.map(kitaKonfig.get(), KitafinderKitaKonfigDataDto.class); + KitafinderKitaKonfigDataReadDto dto = mapper.map(kitaKonfig.get(), KitafinderKitaKonfigDataReadDto.class); return ResponseEntity.ok().body(dto); } } diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/api/KitaAppApiController.java b/src/main/java/de/muenchen/rbs/kitafindereai/api/KitaAppApiController.java index c8849cc..2c69ee4 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/api/KitaAppApiController.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/api/KitaAppApiController.java @@ -58,7 +58,7 @@ public class KitaAppApiController { @GetMapping("einrichtungen/{kibigWebId}/mitGruppenUndKindern") public ResponseEntity getGroupsWithKidsByKibigwebid( @Parameter(in = ParameterIn.PATH, description = "kibigWebId der Einrichtung für die Kinddaten abgerufen werden", required = true, schema = @Schema(type = "string", description = "KibigwebId 162(für München) - 001 (für Städtisch) - \\d (Art/Form der Einrichtung) - \\d{3} (Nummer der Einrichtung)", example = "1620018207")) @PathVariable("kibigWebId") String kibigWebId) { - log.info("Endpoint einrichtungen/{}/mitGruppenUndKindern called.", kibigWebId); + log.info("Endpoint GET einrichtungen/{}/mitGruppenUndKindern called.", kibigWebId); KitafinderExport export = kitaFinderService.exportKitaData(kibigWebId); Institute institute = mapper.map(export.getDatensaetze(), Institute.class); diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/api/model/ChildAddress.java b/src/main/java/de/muenchen/rbs/kitafindereai/api/model/ChildAddress.java index e84acdf..f0e8c95 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/api/model/ChildAddress.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/api/model/ChildAddress.java @@ -8,7 +8,7 @@ import lombok.NoArgsConstructor; /** - * Adresse des Kindes. Wird aus der Adresse der SB1 | SB2 bzw. der abweichenden (ABW) Adresse berechnet. Berechnung abhängig von [WOHNHAFT_BEI] + * Adress */ @Data @NoArgsConstructor diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/api/model/Parent.java b/src/main/java/de/muenchen/rbs/kitafindereai/api/model/Parent.java index 082daac..3a1c240 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/api/model/Parent.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/api/model/Parent.java @@ -36,7 +36,7 @@ public class Parent { // Kitafinder-Column [SB1_NACHNAME | SB2_NACHNAME | ABW_NACHNAME] private String lastName; - enum ParentType { + public enum ParentType { sb1, sb2, abw; } diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/config/ApiErrorHandlingControllerAdvice.java b/src/main/java/de/muenchen/rbs/kitafindereai/config/ApiErrorHandlingControllerAdvice.java index 78bff60..e13a1bf 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/config/ApiErrorHandlingControllerAdvice.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/config/ApiErrorHandlingControllerAdvice.java @@ -18,8 +18,7 @@ import lombok.RequiredArgsConstructor; /** - * ControllerAdvice für globales Handling von Exceptions, die z.B. von Services geworfen werden - * können. + * ControllerAdvice for global handling of exceptions. * * @author m.zollbrecht */ diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/config/ModelMapperConfiguration.java b/src/main/java/de/muenchen/rbs/kitafindereai/config/ModelMapperConfiguration.java index 13a7c5d..db5bdae 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/config/ModelMapperConfiguration.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/config/ModelMapperConfiguration.java @@ -4,10 +4,15 @@ */ package de.muenchen.rbs.kitafindereai.config; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Locale; import java.util.Optional; +import org.modelmapper.Converter; import org.modelmapper.ModelMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -15,15 +20,22 @@ import de.muenchen.rbs.kitafindereai.adapter.kitaplaner.model.KitafinderKind; import de.muenchen.rbs.kitafindereai.adapter.kitaplaner.model.KitafinderKindList; import de.muenchen.rbs.kitafindereai.api.model.Child; +import de.muenchen.rbs.kitafindereai.api.model.ChildAddress; import de.muenchen.rbs.kitafindereai.api.model.Group; import de.muenchen.rbs.kitafindereai.api.model.Institute; +import de.muenchen.rbs.kitafindereai.api.model.Parent; +import de.muenchen.rbs.kitafindereai.api.model.Parent.ParentType; /** * Create a ModelMapper to expose as a Bean. + * + * @author m.zollbrecht */ @Configuration public class ModelMapperConfiguration { + public static DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd'.'MM'.'yyyy", Locale.GERMAN); + @Bean public ModelMapper modelMapper() { ModelMapper mapper = new ModelMapper(); @@ -58,10 +70,48 @@ public ModelMapper modelMapper() { } }); + Converter dateConverter = context -> { + if (context.getSource() == null || context.getSource().length() == 0) { + return null; + } + return LocalDate.parse(context.getSource(), DATE_FORMATTER); + }; + + Converter adressConverter = context -> { + if (context == null || context.getSource() == null) { + return null; + } + // TODO: dependent on WOHNHAFT_BEI + ChildAddress adress = new ChildAddress(); + adress.setCity(context.getSource().getSB1_ORT()); + adress.setStreet(context.getSource().getSB1_STRASSE()); + adress.setStreetNo(context.getSource().getSB1_HAUSNUMMER()); + adress.setZipCode(context.getSource().getSB1_POSTLEITZAHL()); + return adress; + }; + + Converter> parentConverter = context -> { + if (context == null || context.getSource() == null) { + return null; + } + // TODO: add ABW + List parents = List.of( + new Parent(ParentType.sb1, context.getSource().getSB1_VORNAME(), + context.getSource().getSB1_NACHNAME()), + new Parent(ParentType.sb2, context.getSource().getSB2_VORNAME(), + context.getSource().getSB2_NACHNAME())); + return parents; + }; + mapper.createTypeMap(KitafinderKind.class, Child.class).addMappings(m -> { + m.map(KitafinderKind::getKIND_ID_EXTERN, Child::setChildId); m.map(KitafinderKind::getKIND_VORNAME, Child::setFirstName); m.map(KitafinderKind::getKIND_NACHNAME, Child::setLastName); - // TODO remaining props + m.using(dateConverter).map(KitafinderKind::getKIND_GEBDATUM, Child::setBirthday); + m.using(dateConverter).map(KitafinderKind::getVER_VERTRAG_AB, Child::setCareStart); + m.using(dateConverter).map(KitafinderKind::getVER_KUENDIGUNG_ZUM, Child::setCareEnd); + m.using(adressConverter).map(k -> k, Child::setAddress); + m.using(parentConverter).map(k -> k, Child::setParents); }); return mapper; diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/config/RestTemplateConfiguration.java b/src/main/java/de/muenchen/rbs/kitafindereai/config/RestTemplateConfiguration.java index 04ec701..13b42ff 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/config/RestTemplateConfiguration.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/config/RestTemplateConfiguration.java @@ -11,6 +11,8 @@ /** * Configures the {@link RestTemplate} + * + * @author m.zollbrecht */ @Configuration public class RestTemplateConfiguration { diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/config/SecurityConfiguration.java b/src/main/java/de/muenchen/rbs/kitafindereai/config/SecurityConfiguration.java index 895d1b9..95dd3aa 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/config/SecurityConfiguration.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/config/SecurityConfiguration.java @@ -14,18 +14,13 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.User.UserBuilder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.oauth2.jwt.JwtClaimValidator; -import org.springframework.security.oauth2.jwt.JwtDecoder; -import org.springframework.security.oauth2.jwt.JwtDecoders; -import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; -import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector; -import org.springframework.security.oauth2.server.resource.introspection.SpringOpaqueTokenIntrospector; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; +import de.muenchen.rbs.kitafindereai.api.InternalApiController; +import de.muenchen.rbs.kitafindereai.api.KitaAppApiController; import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.OAuthFlow; import io.swagger.v3.oas.annotations.security.OAuthFlows; @@ -34,6 +29,8 @@ /** * The central class for configuration of all security aspects. + * + * @author m.zollbrecht */ @Slf4j @Configuration @@ -41,6 +38,7 @@ @EnableMethodSecurity(prePostEnabled = true) public class SecurityConfiguration { + /** Security for {@link InternalApiController} */ @Bean @Order(1) @Profile("!no-security") @@ -52,6 +50,7 @@ public SecurityFilterChain internalApiSecurityFilterChain(HttpSecurity http) thr return http.build(); } + /** Security for {@link KitaAppApiController} */ @Bean @Order(2) @Profile("!no-security") @@ -65,12 +64,16 @@ public SecurityFilterChain kitaAppApiSecurityFilterChain(HttpSecurity http) thro return http.build(); } + /** + * Security for remaining endpoints. + * Excluding Swagger UI and spring actuators. + */ @Bean @Order(3) @Profile("!no-security") public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests((authorize) -> authorize - .requestMatchers("/actuator/info", "/actuator/health/**", "/explorer/**", + .requestMatchers("/actuator/info", "/actuator/health/**", "/swagger-ui/**", "/v3/api-docs/**") .permitAll() .anyRequest().authenticated()) @@ -80,16 +83,23 @@ public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws return http.build(); } + /** + * UserDetailsService for BasicAuth + * + * @param user User for BasicAuth + * @param password Password for BasicAuth + * @return UserDetailsService for BasicAuth + */ @Bean @Profile("!no-security") public UserDetailsService userDetailsService(@Value("${app.internalApi.authentication.user}") String user, @Value("${app.internalApi.authentication.password}") String password) { - UserBuilder users = User.withDefaultPasswordEncoder(); - UserDetails userDetails = users.username(user).password(password).build(); + UserDetails userDetails = User.withDefaultPasswordEncoder().username(user).password(password).build(); return new InMemoryUserDetailsManager(userDetails); } + /** Security-config for profile 'no-security' */ @Bean @Profile("no-security") public SecurityFilterChain noSecurityFilterChain(HttpSecurity http) @@ -100,6 +110,7 @@ public SecurityFilterChain noSecurityFilterChain(HttpSecurity http) return http.build(); } + /** Swagger-API config for security */ @Configuration @SecurityScheme(name = "OAUTH2", type = SecuritySchemeType.OAUTH2, flows = @OAuthFlows(clientCredentials = @OAuthFlow(tokenUrl = "${app.security.token-url}"))) @SecurityScheme(name = "BasicAuth", type = SecuritySchemeType.HTTP, scheme = "basic") diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/config/TextEncoderConfiguration.java b/src/main/java/de/muenchen/rbs/kitafindereai/config/TextEncoderConfiguration.java index 54a7316..8251fdd 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/config/TextEncoderConfiguration.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/config/TextEncoderConfiguration.java @@ -12,16 +12,18 @@ /** * General configuration for encryption and decryption. + * + * @author m.zollbrecht */ @Configuration public class TextEncoderConfiguration { @Value("${app.passwordEncoder.encryptor.password}") private String password; - + @Value("${app.passwordEncoder.encryptor.salt}") private String salt; - + @Bean public TextEncryptor encryptor() { return Encryptors.delux(password, salt); diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigData.java b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigData.java index 3394da7..7d1701a 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigData.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigData.java @@ -13,7 +13,9 @@ import lombok.Data; /** - * In der EAI gespeicherte Daten zu einer Einrichtung ({@link Institute}) + * Stored data for {@link Institute}s. Used for calls to kitafinder. + * + * @author m.zollbrecht */ @Entity @Data diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataDto.java b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataReadDto.java similarity index 77% rename from src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataDto.java rename to src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataReadDto.java index e6961b5..9dbe20e 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataDto.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataReadDto.java @@ -8,10 +8,12 @@ import lombok.Data; /** - * DTO für {@link KitafinderKitaKonfigData} + * DTO for {@link KitafinderKitaKonfigData} + * + * @author m.zollbrecht */ @Data -public class KitafinderKitaKonfigDataDto { +public class KitafinderKitaKonfigDataReadDto { @Size(max = 255) private String kibigwebId; diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataRepository.java b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataRepository.java index 80b661b..42ca567 100644 --- a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataRepository.java +++ b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataRepository.java @@ -7,7 +7,7 @@ import org.springframework.data.repository.CrudRepository; /** - * Repository zu {@link KitafinderKitaKonfigData}. + * Repository for {@link KitafinderKitaKonfigData}. * * @author m.zollbrecht * diff --git a/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataWriteDto.java b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataWriteDto.java new file mode 100644 index 0000000..79e77fb --- /dev/null +++ b/src/main/java/de/muenchen/rbs/kitafindereai/data/KitafinderKitaKonfigDataWriteDto.java @@ -0,0 +1,28 @@ +/* + * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik + * der Landeshauptstadt München, 2024 + */ +package de.muenchen.rbs.kitafindereai.data; + +import jakarta.validation.constraints.Size; +import lombok.Data; + +/** + * DTO for {@link KitafinderKitaKonfigData} + * + * @author m.zollbrecht + */ +@Data +public class KitafinderKitaKonfigDataWriteDto { + + // kibigwebid is part of url in this case. + + @Size(max = 255) + private String kitaIdExtern; + + @Size(max = 255) + private String traeger; + + @Size(max = 255) + private String password; +} diff --git a/src/test/java/de/muenchen/rbs/kitafindereai/PasswordEncoderTest.java b/src/test/java/de/muenchen/rbs/kitafindereai/PasswordEncoderTest.java index 61790a9..1fb291d 100644 --- a/src/test/java/de/muenchen/rbs/kitafindereai/PasswordEncoderTest.java +++ b/src/test/java/de/muenchen/rbs/kitafindereai/PasswordEncoderTest.java @@ -9,28 +9,33 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.crypto.encrypt.TextEncryptor; +/** + * Tests for {@link TextEncryptor} + * + * @author m.zollbrecht + */ @SpringBootTest class PasswordEncoderTest { - + @Autowired private TextEncryptor encoder; - @Test - void passwordEncryption() { - int length = 50; - boolean useLetters = true; - boolean useNumbers = true; - - for (int i = 0; i < 100; i++) { - String password = RandomStringUtils.random(length, useLetters, useNumbers); - - String encodedString = encoder.encrypt(password); - // fits in the corresponding column - assertThat(encodedString.length()).isLessThanOrEqualTo(255); - String decryptedPassword = encoder.decrypt(encodedString); - // properly decodes - assertEquals(password, decryptedPassword); - } - } + @Test + void passwordEncryption() { + int length = 50; + boolean useLetters = true; + boolean useNumbers = true; + + for (int i = 0; i < 100; i++) { + String password = RandomStringUtils.random(length, useLetters, useNumbers); + + String encodedString = encoder.encrypt(password); + // fits in the corresponding column + assertThat(encodedString.length()).isLessThanOrEqualTo(255); + String decryptedPassword = encoder.decrypt(encodedString); + // properly decodes + assertEquals(password, decryptedPassword); + } + } } diff --git a/src/test/java/de/muenchen/rbs/kitafindereai/mapper/ModelMapperTest.java b/src/test/java/de/muenchen/rbs/kitafindereai/mapper/ModelMapperTest.java index e6b3285..e805943 100644 --- a/src/test/java/de/muenchen/rbs/kitafindereai/mapper/ModelMapperTest.java +++ b/src/test/java/de/muenchen/rbs/kitafindereai/mapper/ModelMapperTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.time.LocalDate; import java.util.List; import java.util.Optional; @@ -15,6 +16,11 @@ import de.muenchen.rbs.kitafindereai.api.model.Institute; import de.muenchen.rbs.kitafindereai.config.ModelMapperConfiguration; +/** + * Tests for {@link ModelMapperConfiguration} + * + * @author m.zollbrecht + */ class ModelMapperTest { private ModelMapper mapper = new ModelMapperConfiguration().modelMapper(); @@ -24,11 +30,29 @@ void mapsKind() { KitafinderKind source = new KitafinderKind(); source.setKIND_VORNAME("vorname Test"); source.setKIND_NACHNAME("nachname Test"); + source.setKIND_ID_EXTERN("id extern Test"); + source.setKIND_GEBDATUM("28.10.2018"); + source.setVER_VERTRAG_AB("01.09.2020"); + source.setVER_KUENDIGUNG_ZUM("31.10.2020"); + source.setSB1_ORT("München"); + source.setSB1_STRASSE("Dingolfinger Str."); + source.setSB1_HAUSNUMMER("21a"); + source.setSB1_POSTLEITZAHL("80559"); + source.setSB1_VORNAME("sb1 vorname Test"); + source.setSB1_NACHNAME("sb1 nachname Test"); + source.setSB2_VORNAME("sb2 vorname Test"); + source.setSB2_NACHNAME("sb2 nachname Test"); Child dest = mapper.map(source, Child.class); + assertThat(dest.getChildId()).isEqualTo(source.getKIND_ID_EXTERN()); assertThat(dest.getFirstName()).isEqualTo(source.getKIND_VORNAME()); - assertThat(dest.getLastName()).isEqualTo(source.getKIND_NACHNAME()); + assertThat(dest.getBirthday()) + .isEqualTo(LocalDate.parse(source.getKIND_GEBDATUM(), ModelMapperConfiguration.DATE_FORMATTER)); + assertThat(dest.getCareStart()) + .isEqualTo(LocalDate.parse(source.getVER_VERTRAG_AB(), ModelMapperConfiguration.DATE_FORMATTER)); + assertThat(dest.getCareEnd()) + .isEqualTo(LocalDate.parse(source.getVER_KUENDIGUNG_ZUM(), ModelMapperConfiguration.DATE_FORMATTER)); } @Test