From 0885a460c4506d3a37fc82ae79b32b3340d170f5 Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Fri, 15 Aug 2025 02:14:54 +0300 Subject: [PATCH] remake init data json dump Small bug fix --- .../src/app/services/spinner.service.ts | 4 +- .../controllers/JsonDumpController.java | 15 ++-- .../initData/InitDataConfiguration.java | 2 +- .../jambotron/initData/InitDataService.java | 77 ++++++++++++++++--- .../jambotron/jsonDump/JsonDumpService.java | 15 ++-- .../jambotron/security/WebSecurityConfig.java | 1 - .../resources/{import => initData}/roles.json | 0 .../resources/{import => initData}/users.json | 0 8 files changed, 80 insertions(+), 34 deletions(-) rename src/main/resources/{import => initData}/roles.json (100%) rename src/main/resources/{import => initData}/users.json (100%) diff --git a/jambotron-ui/src/app/services/spinner.service.ts b/jambotron-ui/src/app/services/spinner.service.ts index 5c7aef5..c4fa063 100644 --- a/jambotron-ui/src/app/services/spinner.service.ts +++ b/jambotron-ui/src/app/services/spinner.service.ts @@ -10,10 +10,10 @@ export class SpinnerService { } show() { - this.visibility.next(false); + this.visibility.next(true); } hide() { - this.visibility.next(true); + this.visibility.next(false); } } diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/JsonDumpController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/JsonDumpController.java index 3d75495..6dab15f 100644 --- a/src/main/java/com/jambotronGroup/jambotron/controllers/JsonDumpController.java +++ b/src/main/java/com/jambotronGroup/jambotron/controllers/JsonDumpController.java @@ -4,7 +4,6 @@ import com.jambotronGroup.jambotron.jsonDump.JsonDumpService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -17,15 +16,11 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; - -import static java.util.stream.Collectors.toList; @RestController @RequestMapping("/api/admin/json-dump") @@ -79,27 +74,27 @@ public class JsonDumpController { // ==================== IMPORT ENDPOINTS ==================== - @PostMapping("/import/users") + @PostMapping("/initData/users") public ResponseEntity> importUsers() { return performImport(() -> _jsonDumpService.importUsers(), "users"); } - @PostMapping("/import/tutorials") + @PostMapping("/initData/tutorials") public ResponseEntity> importTutorials() { return performImport(() -> _jsonDumpService.importTutorials(), "tutorials"); } - @PostMapping("/import/roles") + @PostMapping("/initData/roles") public ResponseEntity> importRoles() { return performImport(() -> _jsonDumpService.importRoles(), "roles"); } - @PostMapping("/import/users/file") + @PostMapping("/initData/users/file") public ResponseEntity> importUsersFromFile(@RequestParam("file") MultipartFile file) { return importFromFile(file, (path) -> _jsonDumpService.importUsers(path), "users"); } - @PostMapping("/import/tutorials/file") + @PostMapping("/initData/tutorials/file") public ResponseEntity> importTutorialsFromFile(@RequestParam("file") MultipartFile file) { return importFromFile(file, (path) -> _jsonDumpService.importTutorials(path), "tutorials"); } diff --git a/src/main/java/com/jambotronGroup/jambotron/initData/InitDataConfiguration.java b/src/main/java/com/jambotronGroup/jambotron/initData/InitDataConfiguration.java index 93d2fb1..1c6b836 100644 --- a/src/main/java/com/jambotronGroup/jambotron/initData/InitDataConfiguration.java +++ b/src/main/java/com/jambotronGroup/jambotron/initData/InitDataConfiguration.java @@ -15,7 +15,7 @@ public class InitDataConfiguration { @PostConstruct public void init() { - _initDataService.importData(); + _initDataService.initData(); } } diff --git a/src/main/java/com/jambotronGroup/jambotron/initData/InitDataService.java b/src/main/java/com/jambotronGroup/jambotron/initData/InitDataService.java index 73ee140..4f8ac94 100644 --- a/src/main/java/com/jambotronGroup/jambotron/initData/InitDataService.java +++ b/src/main/java/com/jambotronGroup/jambotron/initData/InitDataService.java @@ -13,11 +13,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; +import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashSet; @@ -32,7 +34,7 @@ public class InitDataService { private static final Logger _logger = LoggerFactory.getLogger(InitDataService.class); - private ObjectMapper _mapper; + protected ObjectMapper _mapper; @Autowired private ResourceLoader _resources; @@ -42,8 +44,53 @@ public class InitDataService { @Autowired private UserRepository _userRepository; + + private final Path _initDataPath = Path.of("/jambotron-data/initData/"); + public InitDataService(){ + _mapper = new ObjectMapper(); + + + } + + private void extractInitData(){ + _logger.info("Extracting init data to {}", _initDataPath.toAbsolutePath()); + if(!_initDataPath.toFile().exists()) { + _logger.info("Creating init data directory at {}", _initDataPath.toAbsolutePath()); + try { + Files.createDirectories(_initDataPath); + } catch (Exception e) { + _logger.error("Failed to create init data directory", e); + } + } + extractJsonFile("roles.json"); + extractJsonFile("users.json"); + } + + private void extractJsonFile(String fileName) { + try { + ClassPathResource resource = new ClassPathResource("initData/"+ fileName); + + + Path targetPath = _initDataPath.resolve(fileName); + if (!Files.exists(targetPath)) { + try (InputStream inputStream = resource.getInputStream()) { + Files.copy(resource.getInputStream(), targetPath); + } + + _logger.info("Copied {} to {}", fileName, targetPath.toAbsolutePath()); + } else { + try (InputStream inputStream = resource.getInputStream()) { + Files.copy(resource.getInputStream(), targetPath, java.nio.file.StandardCopyOption.REPLACE_EXISTING); + } + + _logger.warn("{} already exists, REPLACE", targetPath.toAbsolutePath()); + } + + } catch (Exception e) { + _logger.error("Failed to extract JSON file: {}", fileName, e); + } } @Transactional @@ -122,23 +169,31 @@ public class InitDataService { return _mapper.readValue(json, type); } - public void importData() { - try { - Resource resource = _resources.getResource("classpath:import/roles.json"); - if (resource.exists()) { + public void initData() { - importRoles(resource.getFile().toPath()); + extractInitData(); + + _logger.info("Initializing data import from {}", _initDataPath.toAbsolutePath()); + + try { + + Path rolesFile = _initDataPath.resolve("roles.json"); + + if (rolesFile.toFile().exists()) { + + importRoles(rolesFile); } else { - _logger.warn("Roles import file not found: {}", resource.getFilename()); + _logger.warn("Roles import file not found: {}", rolesFile.getFileName()); } - resource = _resources.getResource("classpath:import/users.json"); - if (resource.exists()) { - importUsers(resource.getFile().toPath()); + Path usersFile = _initDataPath.resolve("users.json"); + + if (usersFile.toFile().exists()) { + importUsers(usersFile); } else { - _logger.warn("Users import file not found: {}", resource.getFilename()); + _logger.warn("Users import file not found: {}", usersFile.getFileName()); } } catch (Exception e) { _logger.error("Error importing data", e); diff --git a/src/main/java/com/jambotronGroup/jambotron/jsonDump/JsonDumpService.java b/src/main/java/com/jambotronGroup/jambotron/jsonDump/JsonDumpService.java index 0c39dbf..58fcc55 100644 --- a/src/main/java/com/jambotronGroup/jambotron/jsonDump/JsonDumpService.java +++ b/src/main/java/com/jambotronGroup/jambotron/jsonDump/JsonDumpService.java @@ -50,16 +50,16 @@ public class JsonDumpService extends InitDataService { private final Path _extractedPath = _root.resolve("extracted"); - private final ObjectMapper _mapper; + //private final ObjectMapper _mapper; @Autowired - private final UserRepository _userRepository; + private UserRepository _userRepository; @Autowired - private final RoleRepository _roleRepository; + private RoleRepository _roleRepository; @Autowired - private final TutorialRepository _tutorialRepository; + private TutorialRepository _tutorialRepository; @Value("${app.json.dump.cleanup.enabled:true}") private boolean _cleanupEnabled; @@ -70,11 +70,8 @@ public class JsonDumpService extends InitDataService { @Value("${app.json.dump.archive.enabled:true}") private boolean _archiveEnabled; - public JsonDumpService(ObjectMapper mapper, UserRepository userRepository, RoleRepository roleRepository, TutorialRepository tutorialRepository) { - _mapper = mapper; - _userRepository = userRepository; - _roleRepository = roleRepository; - _tutorialRepository = tutorialRepository; + public JsonDumpService() { + } private static String getFileNameWithTimestamp(String prefix) { diff --git a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java index 985aa58..11de5f7 100644 --- a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java +++ b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java @@ -1,6 +1,5 @@ package com.jambotronGroup.jambotron.security; -import com.jambotronGroup.jambotron.initData.InitDataService; import com.jambotronGroup.jambotron.security.jwt.AuthEntryPointJwt; import com.jambotronGroup.jambotron.security.jwt.AuthTokenFilter; import com.jambotronGroup.jambotron.security.services.UserDetailsServiceImpl; diff --git a/src/main/resources/import/roles.json b/src/main/resources/initData/roles.json similarity index 100% rename from src/main/resources/import/roles.json rename to src/main/resources/initData/roles.json diff --git a/src/main/resources/import/users.json b/src/main/resources/initData/users.json similarity index 100% rename from src/main/resources/import/users.json rename to src/main/resources/initData/users.json