1
All checks were successful
Build and Push Docker Images / build-and-push-backend (push) Successful in 29s
Build and Push Docker Images / build-and-push-frontend (push) Successful in 30s
Build and Push Docker Images / deploy-to-k8s (push) Successful in 50s

This commit is contained in:
Zuev
2026-03-13 00:07:54 +03:00
parent 75b1ad166e
commit 6ea420e529

View File

@@ -1,5 +1,8 @@
package com.magistr.app.config; package com.magistr.app.config;
import com.magistr.app.config.tenant.TenantConfig;
import com.magistr.app.config.tenant.TenantContext;
import com.magistr.app.config.tenant.TenantRoutingDataSource;
import com.magistr.app.model.Role; import com.magistr.app.model.Role;
import com.magistr.app.model.User; import com.magistr.app.model.User;
import com.magistr.app.repository.UserRepository; import com.magistr.app.repository.UserRepository;
@@ -18,14 +21,32 @@ public class DataInitializer implements CommandLineRunner {
private final UserRepository userRepository; private final UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder; private final BCryptPasswordEncoder passwordEncoder;
private final TenantRoutingDataSource routingDataSource;
public DataInitializer(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder) { public DataInitializer(UserRepository userRepository,
BCryptPasswordEncoder passwordEncoder,
TenantRoutingDataSource routingDataSource) {
this.userRepository = userRepository; this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder; this.passwordEncoder = passwordEncoder;
this.routingDataSource = routingDataSource;
} }
@Override @Override
public void run(String... args) { public void run(String... args) {
// Создаём admin в каждом тенанте
for (TenantConfig tenant : routingDataSource.getTenantConfigs().values()) {
try {
TenantContext.setCurrentTenant(tenant.getDomain());
initAdmin(tenant.getDomain());
} catch (Exception e) {
log.error("Failed to init admin for tenant '{}': {}", tenant.getDomain(), e.getMessage());
} finally {
TenantContext.clear();
}
}
}
private void initAdmin(String tenantDomain) {
Optional<User> existing = userRepository.findByUsername("admin"); Optional<User> existing = userRepository.findByUsername("admin");
if (existing.isEmpty()) { if (existing.isEmpty()) {
@@ -34,17 +55,9 @@ public class DataInitializer implements CommandLineRunner {
admin.setPassword(passwordEncoder.encode("admin")); admin.setPassword(passwordEncoder.encode("admin"));
admin.setRole(Role.ADMIN); admin.setRole(Role.ADMIN);
userRepository.save(admin); userRepository.save(admin);
log.info("Created default admin user"); log.info("[{}] Created default admin user (admin/admin)", tenantDomain);
} else { } else {
User admin = existing.get(); log.info("[{}] Admin user already exists", tenantDomain);
if (!passwordEncoder.matches("admin", admin.getPassword())) {
admin.setPassword(passwordEncoder.encode("admin"));
admin.setRole(Role.ADMIN);
userRepository.save(admin);
log.info("Reset admin password (hash was invalid)");
} else {
log.info("Admin user already exists with correct password");
}
} }
} }
} }