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;
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;
SecureRandom random = new SecureRandom();
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())));
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);
}
// 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;
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);
}
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);
}
}