chore(iam): enhance dev data initialization with test metering points and communities

This commit is contained in:
Bernhard Müller 2026-07-23 15:02:35 +02:00
parent 765cbb0ec7
commit a8686718db

View File

@ -1,5 +1,10 @@
package at.mueller.eeg.backend.iam.config; 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.ParticipantType;
import at.mueller.eeg.backend.iam.domain.RegistrationStatus; import at.mueller.eeg.backend.iam.domain.RegistrationStatus;
import at.mueller.eeg.backend.iam.domain.User; 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.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.security.SecureRandom; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Component @Component
@ -23,40 +28,60 @@ public class AdminDataInitializer implements CommandLineRunner {
private final UserRepository userRepository; private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder; 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_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_FIRST_NAME = "Admin";
private static final String ADMIN_LAST_NAME = "Administrator"; 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 @Override
public void run(String... args) { public void run(String... args) {
userRepository.findByEmail(ADMIN_EMAIL).ifPresentOrElse( userRepository.findByEmail(ADMIN_EMAIL).ifPresentOrElse(
user -> log.info("Admin-User {} existiert bereits.", ADMIN_EMAIL), user -> log.info("Admin-User {} existiert bereits.", ADMIN_EMAIL),
() -> { () -> {
String generatedPassword = generateRandomPassword(); createAdminUser();
createAdminUser(generatedPassword); User testUser = createTestUser();
createTestUser(); MeteringPoint meteringPoint = createMeteringPoint(testUser);
EnergyCommunity community = createBegCommunity();
createMembership(meteringPoint, community);
System.out.println(""" System.out.println("""
======================================================================== ========================================================================
INITIALER ADMIN-BENUTZER WURDE ERSTELLT DEV-DATEN WURDEN ERSTELLT
======================================================================== ========================================================================
ADMIN:
E-Mail: admin@eeg-portal.at E-Mail: admin@eeg-portal.at
Passwort: %s Passwort: admin123!
TEST-USER: TEST-USER:
E-Mail: test@example.com E-Mail: test@example.com
Passwort: Test1234! 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(); User admin = new User();
admin.setEmail(ADMIN_EMAIL); admin.setEmail(ADMIN_EMAIL);
admin.setPasswordHash(passwordEncoder.encode(password)); admin.setPasswordHash(passwordEncoder.encode(ADMIN_PASSWORD));
admin.setFirstName(ADMIN_FIRST_NAME); admin.setFirstName(ADMIN_FIRST_NAME);
admin.setLastName(ADMIN_LAST_NAME); admin.setLastName(ADMIN_LAST_NAME);
admin.setParticipantType(ParticipantType.PRIVATE); admin.setParticipantType(ParticipantType.PRIVATE);
@ -68,10 +93,10 @@ public class AdminDataInitializer implements CommandLineRunner {
userRepository.save(admin); userRepository.save(admin);
} }
private void createTestUser() { private User createTestUser() {
User testUser = new User(); User testUser = new User();
testUser.setEmail("test@example.com"); testUser.setEmail(TEST_EMAIL);
testUser.setPasswordHash(passwordEncoder.encode("Test1234!")); testUser.setPasswordHash(passwordEncoder.encode(TEST_PASSWORD));
testUser.setFirstName("Test"); testUser.setFirstName("Test");
testUser.setLastName("Benutzer"); testUser.setLastName("Benutzer");
testUser.setParticipantType(ParticipantType.PRIVATE); testUser.setParticipantType(ParticipantType.PRIVATE);
@ -80,39 +105,35 @@ public class AdminDataInitializer implements CommandLineRunner {
testUser.setStatus(RegistrationStatus.PENDING); testUser.setStatus(RegistrationStatus.PENDING);
testUser.setEnabled(false); testUser.setEnabled(false);
testUser.setEmailVerified(true); testUser.setEmailVerified(true);
userRepository.save(testUser); return userRepository.save(testUser);
} }
private String generateRandomPassword() { private MeteringPoint createMeteringPoint(User user) {
String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; MeteringPoint point = new MeteringPoint();
String lower = "abcdefghijklmnopqrstuvwxyz"; point.setUserId(user.getId());
String digits = "0123456789"; point.setAtNumber(TEST_AT_NUMBER);
String special = "!@#$%&*"; point.setType(PointType.CONSUMER);
String all = upper + lower + digits + special; point.setMakoState(MakoState.ACTIVE);
point.setGridOperatorId("Wiener Netze GmbH");
SecureRandom random = new SecureRandom(); return meteringPointRepository.save(point);
StringBuilder password = new StringBuilder(16);
// 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 private EnergyCommunity createBegCommunity() {
char[] chars = password.toString().toCharArray(); EnergyCommunity community = new EnergyCommunity();
for (int i = chars.length - 1; i > 0; i--) { community.setEdaEcId("BEG-TEST-001");
int j = random.nextInt(i + 1); community.setType(CommunityType.BEG);
char tmp = chars[i]; community.setName("Test-BEG Wien");
chars[i] = chars[j]; community.setGridOperatorId("Wiener Netze GmbH");
chars[j] = tmp; return energyCommunityRepository.save(community);
} }
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);
} }
} }