chore(iam): enhance dev data initialization with test metering points and communities
This commit is contained in:
parent
765cbb0ec7
commit
a8686718db
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user