From a8686718db83a63cda607dd94af75b82db14107d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernhard=20M=C3=BCller?= Date: Thu, 23 Jul 2026 15:02:35 +0200 Subject: [PATCH] chore(iam): enhance dev data initialization with test metering points and communities --- .../iam/config/AdminDataInitializer.java | 105 +++++++++++------- 1 file changed, 63 insertions(+), 42 deletions(-) diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/config/AdminDataInitializer.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/config/AdminDataInitializer.java index 4741133..8273e0a 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/config/AdminDataInitializer.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/config/AdminDataInitializer.java @@ -1,5 +1,10 @@ package at.mueller.eeg.backend.iam.config; +import at.mueller.eeg.backend.community.domain.*; +import at.mueller.eeg.backend.community.domain.state.MakoState; +import at.mueller.eeg.backend.community.repository.EnergyCommunityRepository; +import at.mueller.eeg.backend.community.repository.MembershipRepository; +import at.mueller.eeg.backend.community.repository.MeteringPointRepository; import at.mueller.eeg.backend.iam.domain.ParticipantType; import at.mueller.eeg.backend.iam.domain.RegistrationStatus; import at.mueller.eeg.backend.iam.domain.User; @@ -12,7 +17,7 @@ import org.springframework.context.annotation.Profile; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; -import java.security.SecureRandom; +import java.time.LocalDate; import java.time.LocalDateTime; @Component @@ -23,40 +28,60 @@ public class AdminDataInitializer implements CommandLineRunner { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; + private final MeteringPointRepository meteringPointRepository; + private final EnergyCommunityRepository energyCommunityRepository; + private final MembershipRepository membershipRepository; private static final String ADMIN_EMAIL = "admin@eeg-portal.at"; + private static final String ADMIN_PASSWORD = "admin123!"; private static final String ADMIN_FIRST_NAME = "Admin"; private static final String ADMIN_LAST_NAME = "Administrator"; + private static final String TEST_EMAIL = "test@example.com"; + private static final String TEST_PASSWORD = "Test1234!"; + private static final String TEST_AT_NUMBER = "AT0010000000000000000000001234567"; + @Override public void run(String... args) { userRepository.findByEmail(ADMIN_EMAIL).ifPresentOrElse( user -> log.info("Admin-User {} existiert bereits.", ADMIN_EMAIL), () -> { - String generatedPassword = generateRandomPassword(); - createAdminUser(generatedPassword); - createTestUser(); + createAdminUser(); + User testUser = createTestUser(); + MeteringPoint meteringPoint = createMeteringPoint(testUser); + EnergyCommunity community = createBegCommunity(); + createMembership(meteringPoint, community); System.out.println(""" ======================================================================== - INITIALER ADMIN-BENUTZER WURDE ERSTELLT + DEV-DATEN WURDEN ERSTELLT ======================================================================== + ADMIN: E-Mail: admin@eeg-portal.at - Passwort: %s + Passwort: admin123! TEST-USER: E-Mail: test@example.com Passwort: Test1234! + + ZÄHLPUNKT: + AT-Nummer: %s + Typ: CONSUMER + Status: ACTIVE + + ENERGIEGEMEINSCHAFT: + Name: Test-BEG Wien + Typ: BEG ======================================================================== - """.formatted(generatedPassword)); + """.formatted(TEST_AT_NUMBER)); } ); } - private void createAdminUser(String password) { + private void createAdminUser() { User admin = new User(); admin.setEmail(ADMIN_EMAIL); - admin.setPasswordHash(passwordEncoder.encode(password)); + admin.setPasswordHash(passwordEncoder.encode(ADMIN_PASSWORD)); admin.setFirstName(ADMIN_FIRST_NAME); admin.setLastName(ADMIN_LAST_NAME); admin.setParticipantType(ParticipantType.PRIVATE); @@ -68,10 +93,10 @@ public class AdminDataInitializer implements CommandLineRunner { userRepository.save(admin); } - private void createTestUser() { + private User createTestUser() { User testUser = new User(); - testUser.setEmail("test@example.com"); - testUser.setPasswordHash(passwordEncoder.encode("Test1234!")); + testUser.setEmail(TEST_EMAIL); + testUser.setPasswordHash(passwordEncoder.encode(TEST_PASSWORD)); testUser.setFirstName("Test"); testUser.setLastName("Benutzer"); testUser.setParticipantType(ParticipantType.PRIVATE); @@ -80,39 +105,35 @@ public class AdminDataInitializer implements CommandLineRunner { testUser.setStatus(RegistrationStatus.PENDING); testUser.setEnabled(false); testUser.setEmailVerified(true); - userRepository.save(testUser); + return userRepository.save(testUser); } - private String generateRandomPassword() { - String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - String lower = "abcdefghijklmnopqrstuvwxyz"; - String digits = "0123456789"; - String special = "!@#$%&*"; - String all = upper + lower + digits + special; + private MeteringPoint createMeteringPoint(User user) { + MeteringPoint point = new MeteringPoint(); + point.setUserId(user.getId()); + point.setAtNumber(TEST_AT_NUMBER); + point.setType(PointType.CONSUMER); + point.setMakoState(MakoState.ACTIVE); + point.setGridOperatorId("Wiener Netze GmbH"); + return meteringPointRepository.save(point); + } - SecureRandom random = new SecureRandom(); - StringBuilder password = new StringBuilder(16); + private EnergyCommunity createBegCommunity() { + EnergyCommunity community = new EnergyCommunity(); + community.setEdaEcId("BEG-TEST-001"); + community.setType(CommunityType.BEG); + community.setName("Test-BEG Wien"); + community.setGridOperatorId("Wiener Netze GmbH"); + return energyCommunityRepository.save(community); + } - // Mindestens ein Zeichen aus jeder Klasse - password.append(upper.charAt(random.nextInt(upper.length()))); - password.append(lower.charAt(random.nextInt(lower.length()))); - password.append(digits.charAt(random.nextInt(digits.length()))); - password.append(special.charAt(random.nextInt(special.length()))); - - // Rest zufällig füllen - for (int i = 4; i < 16; i++) { - password.append(all.charAt(random.nextInt(all.length()))); - } - - // Mischen - char[] chars = password.toString().toCharArray(); - for (int i = chars.length - 1; i > 0; i--) { - int j = random.nextInt(i + 1); - char tmp = chars[i]; - chars[i] = chars[j]; - chars[j] = tmp; - } - - return new String(chars); + private void createMembership(MeteringPoint point, EnergyCommunity community) { + Membership membership = new Membership(); + membership.setMeteringPoint(point); + membership.setEnergyCommunity(community); + membership.setPriorityLevel(1); + membership.setStatus(MembershipStatus.ACTIVE); + membership.setValidFrom(LocalDate.now()); + membershipRepository.save(membership); } }