remake init data
json dump Small bug fix
This commit is contained in:
@@ -74,27 +74,27 @@ public class JsonDumpController {
|
||||
|
||||
// ==================== IMPORT ENDPOINTS ====================
|
||||
|
||||
@PostMapping("/initData/users")
|
||||
public ResponseEntity<Map<String, Object>> importUsers() {
|
||||
@PostMapping("/restore/users")
|
||||
public ResponseEntity<Map<String, Object>> restoreUsers() {
|
||||
return performImport(() -> _jsonDumpService.importUsers(), "users");
|
||||
}
|
||||
|
||||
@PostMapping("/initData/tutorials")
|
||||
public ResponseEntity<Map<String, Object>> importTutorials() {
|
||||
@PostMapping("/restore/tutorials")
|
||||
public ResponseEntity<Map<String, Object>> restoreTutorials() {
|
||||
return performImport(() -> _jsonDumpService.importTutorials(), "tutorials");
|
||||
}
|
||||
|
||||
@PostMapping("/initData/roles")
|
||||
public ResponseEntity<Map<String, Object>> importRoles() {
|
||||
@PostMapping("/restore/roles")
|
||||
public ResponseEntity<Map<String, Object>> restoreRoles() {
|
||||
return performImport(() -> _jsonDumpService.importRoles(), "roles");
|
||||
}
|
||||
|
||||
@PostMapping("/initData/users/file")
|
||||
@PostMapping("/import/users/file")
|
||||
public ResponseEntity<Map<String, Object>> importUsersFromFile(@RequestParam("file") MultipartFile file) {
|
||||
return importFromFile(file, (path) -> _jsonDumpService.importUsers(path), "users");
|
||||
}
|
||||
|
||||
@PostMapping("/initData/tutorials/file")
|
||||
@PostMapping("/import/tutorials/file")
|
||||
public ResponseEntity<Map<String, Object>> importTutorialsFromFile(@RequestParam("file") MultipartFile file) {
|
||||
return importFromFile(file, (path) -> _jsonDumpService.importTutorials(path), "tutorials");
|
||||
}
|
||||
|
||||
@@ -124,42 +124,41 @@ public class InitDataService {
|
||||
|
||||
List<UserDto> items = readList(jsonFile, new TypeReference<List<UserDto>>() {});
|
||||
for (UserDto dto : items) {
|
||||
User user = new User();
|
||||
if (dto.getId() != null) user.setId(dto.getId());
|
||||
user.setUsername(dto.getUsername());
|
||||
user.setEmail(dto.getEmail());
|
||||
// Expecting already-hashed values; do not import plain text secrets
|
||||
user.setPassword(dto.getPassword());
|
||||
if(!_userRepository.existsByUsername(dto.getUsername())) {
|
||||
|
||||
// Resolve roles by enum name
|
||||
Set<Role> roles = new HashSet<>();
|
||||
if (dto.getRoles() != null) {
|
||||
for (RoleDto roleDto : dto.getRoles()) {
|
||||
ERole erole = ERole.valueOf(roleDto.getName().name());
|
||||
Role role = rolesByName.get(erole);
|
||||
if (role == null) {
|
||||
// Optionally create missing roles on the fly
|
||||
role = new Role();
|
||||
role.setName(erole);
|
||||
role = _roleRepository.save(role);
|
||||
rolesByName.put(erole, role);
|
||||
User user = new User();
|
||||
if (dto.getId() != null) user.setId(dto.getId());
|
||||
user.setUsername(dto.getUsername());
|
||||
user.setEmail(dto.getEmail());
|
||||
// Expecting already-hashed values; do not import plain text secrets
|
||||
user.setPassword(dto.getPassword());
|
||||
|
||||
// Resolve roles by enum name
|
||||
Set<Role> roles = new HashSet<>();
|
||||
if (dto.getRoles() != null) {
|
||||
for (RoleDto roleDto : dto.getRoles()) {
|
||||
ERole erole = ERole.valueOf(roleDto.getName().name());
|
||||
Role role = rolesByName.get(erole);
|
||||
if (role == null) {
|
||||
// Optionally create missing roles on the fly
|
||||
role = new Role();
|
||||
role.setName(erole);
|
||||
role = _roleRepository.save(role);
|
||||
rolesByName.put(erole, role);
|
||||
}
|
||||
roles.add(role);
|
||||
}
|
||||
roles.add(role);
|
||||
}
|
||||
}
|
||||
user.setRoles(roles);
|
||||
user.setRoles(roles);
|
||||
|
||||
if(!_userRepository.existsByUsername(user.getUsername())) {
|
||||
_userRepository.save(user);
|
||||
|
||||
_logger.info("Imported user: {} with roles: {}", user.getUsername(), user.getRoles().stream()
|
||||
.map(Role::getName).collect(Collectors.toList()).stream().map(ERole::toString)
|
||||
.collect(Collectors.joining(", ")));
|
||||
} else {
|
||||
_logger.warn("User with username {} already exists, SKIPPING import", user.getUsername());
|
||||
_logger.info("Imported user: {} with roles: {}", user.getUsername(), user.getRoles().stream()
|
||||
.map(Role::getName).collect(Collectors.toList()).stream().map(ERole::toString)
|
||||
.collect(Collectors.joining(", ")));
|
||||
_logger.warn("User with username {} already exists, SKIPPING import", dto.getUsername());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,6 +167,12 @@ public class JsonDumpService extends InitDataService {
|
||||
List<TutorialDto> items = super.readList(jsonFile, new TypeReference<List<TutorialDto>>() {});
|
||||
|
||||
for (TutorialDto dto : items) {
|
||||
|
||||
if(_tutorialRepository.findByUserIdAndTitle(dto.getUserID(), dto.getTitle()).size()> 0) {
|
||||
_logger.warn("Tutorial with title [{}] already exists for userID [{}], SKIPPING import", dto.getTitle(), dto.getUserID());
|
||||
continue;
|
||||
}
|
||||
|
||||
Tutorial t = new Tutorial();
|
||||
t.setId(dto.getId());
|
||||
t.setTitle(dto.getTitle());
|
||||
@@ -193,16 +199,17 @@ public class JsonDumpService extends InitDataService {
|
||||
} else {
|
||||
throw new IllegalArgumentException("Missing user with ROLE_ADMIN to assign tutorial: " + dto.getTitle());
|
||||
}
|
||||
} else {
|
||||
User user = usersById.get(dto.getUserID());
|
||||
//user = _entityManager.merge(user); // Ensure user is managed by EntityManager
|
||||
//user.setRoles(null); // because we don't want to load roles to user object
|
||||
t.setUser(user);
|
||||
}
|
||||
User user = usersById.get(dto.getUserID());
|
||||
//user = _entityManager.merge(user); // Ensure user is managed by EntityManager
|
||||
//user.setRoles(null); // because we don't want to load roles to user object
|
||||
t.setUser(user);
|
||||
|
||||
if(_tutorialRepository.findByUserIdAndTitle(t.getUser().getId(), t.getTitle()).size()> 0) {
|
||||
_logger.warn("Tutorial with title [{}] already exists for user [{}], SKIPPING import", t.getTitle(), t.getUser().getUsername());
|
||||
continue;
|
||||
if(_tutorialRepository.findByTitle(t.getTitle()).size() > 0) {
|
||||
t.setTitle(t.getTitle() + " (imported) " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||
}
|
||||
|
||||
_tutorialRepository.saveAndFlush(t);
|
||||
//_tutorialRepository.save(t);
|
||||
_logger.info("Imported tutorial: {} with user: {}", t.getTitle(), t.getUser().getUsername());
|
||||
|
||||
@@ -17,4 +17,6 @@ public interface TutorialRepository extends JpaRepository<Tutorial, Long> {
|
||||
List<Tutorial> findBytobepublished(boolean tobepublished);
|
||||
List<Tutorial> findByIdAndTobepublished(Long id,boolean tobepublished);
|
||||
List<Tutorial> findByTitleContaining(String title);
|
||||
|
||||
List<Tutorial> findByTitle(String title);
|
||||
}
|
||||
Reference in New Issue
Block a user