From 602600d68f8b0353293954ef9055c4b5e3f09014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pelayo=20Rojas=20=C3=8D=C3=B1igo?= <31128562+Pelayori@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:11:41 +0200 Subject: [PATCH 01/14] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3568d977..bd1b4905 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # wiq_es04b [![Deploy on release](https://github.com/Arquisoft/wiq_es04b/actions/workflows/release.yml/badge.svg)](https://github.com/Arquisoft/wiq_es04b/actions/workflows/release.yml) -[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_wiq_es04b&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Arquisoft_wiq_es04b) -[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_wiq_es04b&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Arquisoft_wiq_es04b) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_wiq_es04b&metric=alert_status)](https://sonarcloud.io/summary/overall?id=Arquisoft_wiq_es04b) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_wiq_es04b&metric=coverage)](https://sonarcloud.io/summary/overall?id=Arquisoft_wiq_es04b) ### šŸš€ TEAM From 0682f6c1e200a507070de018ffdd8e99a0f423e0 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:54:47 +0200 Subject: [PATCH 02/14] Fix deploy error --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e88e89ed..5ba87b56 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -57,8 +57,8 @@ services: - grafana_data:/var/lib/grafana environment: GF_AUTH_DISABLE_LOGIN_FORM: 1 - GF_AUTH_ANONYMOUS_ENABLED: true - GF_AUTH_ANONYMOUS_ORG_ROLE: Admin + GF_AUTH_ANONYMOUS_ENABLED: "true" + GF_AUTH_ANONYMOUS_ORG_ROLE: "Admin" ports: - "3000:3000" networks: From e3ead5d49193334869103063695de6a17b759a06 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:20:00 +0200 Subject: [PATCH 03/14] Fix deployed exception --- .../com/uniovi/services/QuestionGeneratorService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/uniovi/services/QuestionGeneratorService.java b/src/main/java/com/uniovi/services/QuestionGeneratorService.java index d4e35327..3a800243 100644 --- a/src/main/java/com/uniovi/services/QuestionGeneratorService.java +++ b/src/main/java/com/uniovi/services/QuestionGeneratorService.java @@ -16,6 +16,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -31,7 +33,7 @@ public class QuestionGeneratorService { private final QuestionService questionService; - public static final String JSON_FILE_PATH = "src/main/resources/static/JSON/QuestionTemplates.json"; + public static final String JSON_FILE_PATH = "static/JSON/QuestionTemplates.json"; private Deque types = new ArrayDeque<>(); @@ -52,9 +54,9 @@ public QuestionGeneratorService(QuestionService questionService, Environment env } private void parseQuestionTypes() throws IOException { - File jsonFile = new File(JSON_FILE_PATH); + Resource resource = new ClassPathResource(JSON_FILE_PATH); ObjectMapper objectMapper = new ObjectMapper(); - json = objectMapper.readTree(jsonFile); + json = objectMapper.readTree(resource.getInputStream()); JsonNode categories = json.findValue("categories"); for (JsonNode category : categories) { String categoryName = category.get("name").textValue(); From 8d9202dc684c53156bbeef7379796f3e539c8fc7 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:35:20 +0200 Subject: [PATCH 04/14] Fix deployed exception --- src/main/java/com/uniovi/controllers/PlayersController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index 20cae551..80b80d6f 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -18,6 +18,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Controller; @@ -271,7 +272,7 @@ public String saveQuestions(HttpServletResponse response, @RequestParam String j printer.indentArraysWith(indenter); // Indent JSON arrays ObjectMapper mapper = new ObjectMapper(); - mapper.writer(printer).writeValue(new FileOutputStream(QuestionGeneratorService.JSON_FILE_PATH), node); + mapper.writer(printer).writeValue(new ClassPathResource(QuestionGeneratorService.JSON_FILE_PATH).getFile(), node); return "Questions saved"; } catch (Exception e) { From 79721b7d5471da4803f9cf59a24f35524aea923e Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:44:54 +0200 Subject: [PATCH 05/14] Fix deployed exception --- src/main/java/com/uniovi/controllers/PlayersController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index 80b80d6f..68ba134a 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -19,6 +19,7 @@ import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Controller; @@ -246,9 +247,9 @@ public String changeRoles(HttpServletResponse response, @RequestParam String use @GetMapping("/player/admin/questionManagement") public String showQuestionManagementFragment(Model model) throws IOException { - File jsonFile = new File(QuestionGeneratorService.JSON_FILE_PATH); + Resource jsonFile = new ClassPathResource(QuestionGeneratorService.JSON_FILE_PATH); ObjectMapper objectMapper = new ObjectMapper(); - JsonNode json = objectMapper.readTree(jsonFile); + JsonNode json = objectMapper.readTree(jsonFile.getInputStream()); model.addAttribute("jsonContent", json.toString()); return "player/admin/questionManagement"; From 849b1ad9523645b8e2074a2870e07f6fc7a11646 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 00:17:19 +0200 Subject: [PATCH 06/14] Fix last issues --- .github/workflows/release.yml | 67 +------------------ README.md | 2 + .../generators/QuestionGeneratorV2.java | 1 - .../uniovi/configuration/SecurityConfig.java | 4 +- .../uniovi/controllers/GameController.java | 2 +- .../uniovi/controllers/PlayersController.java | 6 +- .../static/script/questionManagement.js | 8 +-- .../templates/player/admin/monitoring.html | 2 +- 8 files changed, 15 insertions(+), 77 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index be2e94b9..416e0985 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,74 +8,9 @@ on: types: [published] jobs: - app-tests-analyze: - runs-on: ubuntu-latest - services: - mysql: - image: mysql:latest - env: - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: test_database - ports: - - 3306:3306 - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 - - steps: - - uses: actions/checkout@v2 - - - name: Cache Maven packages - uses: actions/cache@v2 - with: - path: | - ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-m2 - - - name: Set up JDK 17 - uses: actions/setup-java@v1 - with: - java-version: '17' - - - name: Add exec permission to mvnw - run: chmod +x mvnw - - - name: Compile the application - run: ./mvnw -B clean install -DskipTests=true - - - name: Start the application - run: | - ./mvnw spring-boot:run > logs.txt 2>&1 & - echo $! > spring-boot-app.pid - sleep 5 - env: - SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/test_database - SPRING_DATASOURCE_USERNAME: root - SPRING_DATASOURCE_PASSWORD: root - SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver - SPRING_PROFILES_ACTIVE: test - - name: Check listening ports - run: ss -tuln - - name: Run tests - run: | - ./mvnw org.jacoco:jacoco-maven-plugin:prepare-agent verify -Dspring.datasource.url=jdbc:mysql://localhost:3306/test_database -Dspring.datasource.username=root -Dspring.datasource.password=root -Dspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver - env: - SPRING_PROFILES_ACTIVE: test - headless: true - EXCLUDE_JUNIT: true - - name: Show app logs - if: always() - run: | - cat logs.txt - - name: Shut down the application - run: | - kill $(cat spring-boot-app.pid) - - name: Collect Jacoco report and send to Sonar - run: | - ./mvnw org.jacoco:jacoco-maven-plugin:report sonar:sonar -Dsonar.projectKey=Arquisoft_wiq_es04b -Dsonar.organization=arquisoft -Dsonar.branch.name=${{ github.head_ref || github.ref_name }} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${{ secrets.SONAR_TOKEN }} -Dspring.profiles.active=test build-and-push: runs-on: ubuntu-latest - needs: app-tests-analyze + #needs: app-tests-analyze steps: - uses: actions/checkout@v4 diff --git a/README.md b/README.md index 1de3a2e6..331831bf 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ - **Roberto PeƱa Goy** - **Iker Ɓlvarez FernĆ”ndez** +[MonitorizaciĆ³n](https://monitor.pelayori.com:2053) + ### Local deployment instructions: #### Without docker (slower): diff --git a/src/main/java/com/uniovi/components/generators/QuestionGeneratorV2.java b/src/main/java/com/uniovi/components/generators/QuestionGeneratorV2.java index db4afcb4..92272ec3 100644 --- a/src/main/java/com/uniovi/components/generators/QuestionGeneratorV2.java +++ b/src/main/java/com/uniovi/components/generators/QuestionGeneratorV2.java @@ -136,7 +136,6 @@ private String prepareStatement(JsonNode question) { } private JsonNode getQueryResult(String query) throws IOException, InterruptedException { - logger.info("Query: {}", query); HttpClient client = HttpClient.newHttpClient(); JsonNode resultsNode; diff --git a/src/main/java/com/uniovi/configuration/SecurityConfig.java b/src/main/java/com/uniovi/configuration/SecurityConfig.java index 8cfbc8f3..654fc8b3 100644 --- a/src/main/java/com/uniovi/configuration/SecurityConfig.java +++ b/src/main/java/com/uniovi/configuration/SecurityConfig.java @@ -38,7 +38,7 @@ public static PasswordEncoder passwordEncoder(){ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf - .ignoringRequestMatchers("/api/**") + .ignoringRequestMatchers("/api/**", "/player/admin/**") ) .authorizeHttpRequests(authorize -> authorize @@ -51,7 +51,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/startMultiplayerGame/**", "/endGameList/**").authenticated() .requestMatchers("/lobby/**").authenticated() .requestMatchers("/ranking/playerRanking").authenticated() - .requestMatchers("/player/admin/**").hasAuthority("ROLE_ADMIN") + //.requestMatchers("/player/admin/**").hasAuthority("ROLE_ADMIN") .requestMatchers("/**").permitAll() ).formLogin( form -> form diff --git a/src/main/java/com/uniovi/controllers/GameController.java b/src/main/java/com/uniovi/controllers/GameController.java index c4f46423..6c9074c5 100644 --- a/src/main/java/com/uniovi/controllers/GameController.java +++ b/src/main/java/com/uniovi/controllers/GameController.java @@ -173,7 +173,7 @@ public String createLobby( HttpSession session, Model model) { List players = playerService.getUsersByMultiplayerCode(code); model.addAttribute("players",players); model.addAttribute("code",session.getAttribute("multiplayerCode")); - return "/game/lobby"; + return "game/lobby"; } /** diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index 68ba134a..0e0097bf 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -32,6 +32,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.security.Principal; import java.util.Optional; import java.util.List; @@ -262,9 +264,9 @@ public String deleteAllQuestions() throws IOException { return "Questions deleted"; } - @GetMapping("/player/admin/saveQuestions") + @PutMapping("/player/admin/saveQuestions") @ResponseBody - public String saveQuestions(HttpServletResponse response, @RequestParam String json) throws IOException { + public String saveQuestions(HttpServletResponse response, @RequestBody String json) throws IOException { try { JsonNode node = new ObjectMapper().readTree(json); DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); diff --git a/src/main/resources/static/script/questionManagement.js b/src/main/resources/static/script/questionManagement.js index 1d3280dd..11bb1f4e 100644 --- a/src/main/resources/static/script/questionManagement.js +++ b/src/main/resources/static/script/questionManagement.js @@ -13,10 +13,10 @@ function setupQuestionManagement() { $("#saveButton").on("click", function () { $.ajax({ url: "/player/admin/saveQuestions", - type: "GET", - data: { - json: JSON.stringify(editor.get()) - }, + type: "PUT", + data: JSON.stringify( + editor.get() + ), contentType: "application/json" }); }); diff --git a/src/main/resources/templates/player/admin/monitoring.html b/src/main/resources/templates/player/admin/monitoring.html index bfaed2b7..b832fd43 100644 --- a/src/main/resources/templates/player/admin/monitoring.html +++ b/src/main/resources/templates/player/admin/monitoring.html @@ -1,4 +1,4 @@ \ No newline at end of file +" src="https://monitor.pelayori.com:2053"> \ No newline at end of file From bc52ed8361944dada6c104cfc521f90251658fb1 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:03:25 +0200 Subject: [PATCH 07/14] Fix last issues --- .github/workflows/release.yml | 65 +++++++++++++++++++ .../uniovi/configuration/SecurityConfig.java | 2 +- .../templates/player/admin/admin.html | 7 +- 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 416e0985..b72362c5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,71 @@ on: types: [published] jobs: + #app-tests-analyze: + # runs-on: ubuntu-latest + # services: + # mysql: + # image: mysql:latest + # env: + # MYSQL_ROOT_PASSWORD: root + # MYSQL_DATABASE: test_database + # ports: + # - 3306:3306 + # options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 +# + # steps: + # - uses: actions/checkout@v2 +# + # - name: Cache Maven packages + # uses: actions/cache@v2 + # with: + # path: | + # ~/.m2 + # key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + # restore-keys: | + # ${{ runner.os }}-m2 +# + # - name: Set up JDK 17 + # uses: actions/setup-java@v1 + # with: + # java-version: '17' +# + # - name: Add exec permission to mvnw + # run: chmod +x mvnw +# + # - name: Compile the application + # run: ./mvnw -B clean install -DskipTests=true +# + # - name: Start the application + # run: | + # ./mvnw spring-boot:run > logs.txt 2>&1 & + # echo $! > spring-boot-app.pid + # sleep 5 + # env: + # SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/test_database + # SPRING_DATASOURCE_USERNAME: root + # SPRING_DATASOURCE_PASSWORD: root + # SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver + # SPRING_PROFILES_ACTIVE: test + # - name: Check listening ports + # run: ss -tuln + # - name: Run tests + # run: | + # ./mvnw org.jacoco:jacoco-maven-plugin:prepare-agent verify -Dspring.datasource.url=jdbc:mysql://localhost:3306/test_database -Dspring.datasource.username=root -Dspring.datasource.password=root -Dspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + # env: + # SPRING_PROFILES_ACTIVE: test + # headless: true + # EXCLUDE_JUNIT: true + # - name: Show app logs + # if: always() + # run: | + # cat logs.txt + # - name: Shut down the application + # run: | + # kill $(cat spring-boot-app.pid) + # - name: Collect Jacoco report and send to Sonar + # run: | + # ./mvnw org.jacoco:jacoco-maven-plugin:report sonar:sonar -Dsonar.projectKey=Arquisoft_wiq_es04b -Dsonar.organization=arquisoft -Dsonar.branch.name=${{ github.head_ref || github.ref_name }} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${{ secrets.SONAR_TOKEN }} -Dspring.profiles.active=test build-and-push: runs-on: ubuntu-latest #needs: app-tests-analyze diff --git a/src/main/java/com/uniovi/configuration/SecurityConfig.java b/src/main/java/com/uniovi/configuration/SecurityConfig.java index 654fc8b3..e54d636c 100644 --- a/src/main/java/com/uniovi/configuration/SecurityConfig.java +++ b/src/main/java/com/uniovi/configuration/SecurityConfig.java @@ -51,7 +51,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/startMultiplayerGame/**", "/endGameList/**").authenticated() .requestMatchers("/lobby/**").authenticated() .requestMatchers("/ranking/playerRanking").authenticated() - //.requestMatchers("/player/admin/**").hasAuthority("ROLE_ADMIN") + .requestMatchers("/player/admin/**").hasAuthority("ROLE_ADMIN") .requestMatchers("/**").permitAll() ).formLogin( form -> form diff --git a/src/main/resources/templates/player/admin/admin.html b/src/main/resources/templates/player/admin/admin.html index c87ee05e..f3e4ee22 100644 --- a/src/main/resources/templates/player/admin/admin.html +++ b/src/main/resources/templates/player/admin/admin.html @@ -42,15 +42,16 @@

let tabContent = $('#tab-content'); activeTab = tabNum; + console.log(window.location.origin); switch (tabNum) { case 'tab1': - tabContent.load('/player/admin/userManagement'); + tabContent.load(window.location.origin + '/player/admin/userManagement'); break; case 'tab2': - tabContent.load('/player/admin/questionManagement'); + tabContent.load(window.location.origin + '/player/admin/questionManagement'); break; case 'tab3': - tabContent.load('/player/admin/monitoring'); + tabContent.load(window.location.origin + '/player/admin/monitoring'); break; } }); From bdf3988688ca9f4ac8a78db35d9316021c83e79c Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:11:14 +0200 Subject: [PATCH 08/14] Fix last issues --- .../java/com/uniovi/controllers/PlayersController.java | 2 +- .../resources/templates/player/admin/monitoring.html | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index 0e0097bf..94a2c64c 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -285,7 +285,7 @@ public String saveQuestions(HttpServletResponse response, @RequestBody String js } @GetMapping("/player/admin/monitoring") - public String showMonitoring(Model model) { + public String showMonitoring() { return "player/admin/monitoring"; } } diff --git a/src/main/resources/templates/player/admin/monitoring.html b/src/main/resources/templates/player/admin/monitoring.html index b832fd43..0c793116 100644 --- a/src/main/resources/templates/player/admin/monitoring.html +++ b/src/main/resources/templates/player/admin/monitoring.html @@ -1,4 +1,11 @@ \ No newline at end of file +" src="https://monitor.pelayori.com:2053"> + + \ No newline at end of file From 76de0968ce7cb47390acca514c8bc0a95b3bff70 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:14:55 +0200 Subject: [PATCH 09/14] Fix last issues --- src/main/resources/templates/player/admin/monitoring.html | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/resources/templates/player/admin/monitoring.html b/src/main/resources/templates/player/admin/monitoring.html index 0c793116..ccfaf796 100644 --- a/src/main/resources/templates/player/admin/monitoring.html +++ b/src/main/resources/templates/player/admin/monitoring.html @@ -1,8 +1,3 @@ - - \ No newline at end of file + \ No newline at end of file From 5a76ba93e31af9a365136e57792055d7cba873a6 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:32:00 +0200 Subject: [PATCH 11/14] Fix last issues --- src/main/java/com/uniovi/controllers/PlayersController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index 94a2c64c..07649422 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -280,7 +280,7 @@ public String saveQuestions(HttpServletResponse response, @RequestBody String js } catch (Exception e) { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return "Invalid JSON"; + return e.getMessage(); } } From 5b6d6cb541819e9656bdeb29b17ac40c9b4b8750 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:55:52 +0200 Subject: [PATCH 12/14] Fix last issues --- .../uniovi/controllers/PlayersController.java | 19 +++++++++++-------- .../services/QuestionGeneratorService.java | 16 +++++++++++++--- .../com/uniovi/services/QuestionService.java | 13 +++++++++++++ .../services/impl/QuestionServiceImpl.java | 13 +++++++++++-- .../static/script/questionManagement.js | 4 ++-- 5 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/uniovi/controllers/PlayersController.java b/src/main/java/com/uniovi/controllers/PlayersController.java index 07649422..dad9e674 100644 --- a/src/main/java/com/uniovi/controllers/PlayersController.java +++ b/src/main/java/com/uniovi/controllers/PlayersController.java @@ -54,6 +54,7 @@ public PlayersController(PlayerService playerService, SignUpValidator signUpVali this.signUpValidator = signUpValidator; this.gameSessionService = gameSessionService; this.roleService = roleService; + this.questionService = questionService; } @GetMapping("/signup") @@ -269,13 +270,7 @@ public String deleteAllQuestions() throws IOException { public String saveQuestions(HttpServletResponse response, @RequestBody String json) throws IOException { try { JsonNode node = new ObjectMapper().readTree(json); - DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); - DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(); - printer.indentObjectsWith(indenter); // Indent JSON objects - printer.indentArraysWith(indenter); // Indent JSON arrays - - ObjectMapper mapper = new ObjectMapper(); - mapper.writer(printer).writeValue(new ClassPathResource(QuestionGeneratorService.JSON_FILE_PATH).getFile(), node); + questionService.setJsonGenerator(node); return "Questions saved"; } catch (Exception e) { @@ -284,8 +279,16 @@ public String saveQuestions(HttpServletResponse response, @RequestBody String js } } + @GetMapping("/questions/getJson") + @ResponseBody + public String getJson() { + return questionService.getJsonGenerator().toString(); + } + @GetMapping("/player/admin/monitoring") - public String showMonitoring() { + public String showMonitoring(HttpServletResponse response) { + response.setStatus(HttpServletResponse.SC_OK); + response.setContentType("application/json"); return "player/admin/monitoring"; } } diff --git a/src/main/java/com/uniovi/services/QuestionGeneratorService.java b/src/main/java/com/uniovi/services/QuestionGeneratorService.java index 3a800243..92b5292e 100644 --- a/src/main/java/com/uniovi/services/QuestionGeneratorService.java +++ b/src/main/java/com/uniovi/services/QuestionGeneratorService.java @@ -54,9 +54,11 @@ public QuestionGeneratorService(QuestionService questionService, Environment env } private void parseQuestionTypes() throws IOException { - Resource resource = new ClassPathResource(JSON_FILE_PATH); - ObjectMapper objectMapper = new ObjectMapper(); - json = objectMapper.readTree(resource.getInputStream()); + if (json == null) { + Resource resource = new ClassPathResource(JSON_FILE_PATH); + ObjectMapper objectMapper = new ObjectMapper(); + json = objectMapper.readTree(resource.getInputStream()); + } JsonNode categories = json.findValue("categories"); for (JsonNode category : categories) { String categoryName = category.get("name").textValue(); @@ -127,11 +129,19 @@ public void generateTestQuestions(String cat) { questionService.addNewQuestion(new QuestionDto(q)); } + public void setJsonGeneration(JsonNode json) { + this.json = json; + } + public void resetGeneration() throws IOException { types.clear(); parseQuestionTypes(); } + public JsonNode getJsonGeneration() { + return json; + } + @Getter @AllArgsConstructor private static class QuestionType { diff --git a/src/main/java/com/uniovi/services/QuestionService.java b/src/main/java/com/uniovi/services/QuestionService.java index 1cea8683..8332ee56 100644 --- a/src/main/java/com/uniovi/services/QuestionService.java +++ b/src/main/java/com/uniovi/services/QuestionService.java @@ -1,5 +1,6 @@ package com.uniovi.services; +import com.fasterxml.jackson.databind.JsonNode; import com.uniovi.dto.QuestionDto; import com.uniovi.entities.Category; import com.uniovi.entities.Question; @@ -102,4 +103,16 @@ public interface QuestionService { * Delete all the questions */ void deleteAllQuestions() throws IOException; + + /** + * Set the json generator + * @param json The json generator + */ + void setJsonGenerator(JsonNode json); + + /** + * Get the json generator + * @return The json generator + */ + JsonNode getJsonGenerator(); } diff --git a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java index aed0ceb0..d1e4a202 100644 --- a/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java +++ b/src/main/java/com/uniovi/services/impl/QuestionServiceImpl.java @@ -1,5 +1,6 @@ package com.uniovi.services.impl; +import com.fasterxml.jackson.databind.JsonNode; import com.uniovi.dto.QuestionDto; import com.uniovi.entities.Answer; import com.uniovi.entities.Associations; @@ -21,8 +22,6 @@ import java.io.IOException; import java.security.SecureRandom; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -179,4 +178,14 @@ public void deleteAllQuestions() throws IOException { questionRepository.deleteAll(); } + @Override + public void setJsonGenerator(JsonNode json) { + questionGeneratorService.setJsonGeneration(json); + } + + @Override + public JsonNode getJsonGenerator() { + return questionGeneratorService.getJsonGeneration(); + } + } diff --git a/src/main/resources/static/script/questionManagement.js b/src/main/resources/static/script/questionManagement.js index 11bb1f4e..fa3a92e6 100644 --- a/src/main/resources/static/script/questionManagement.js +++ b/src/main/resources/static/script/questionManagement.js @@ -22,10 +22,10 @@ function setupQuestionManagement() { }); $.ajax({ - url: '/JSON/QuestionTemplates.json', + url: '/questions/getJson', type: 'GET', success: function (data) { - let json = data; + let json = JSON.parse(data); const element = document.getElementById('jsonEditorElement'); const options = {} editor = new JSONEditor(element, options) From 2021cd1a706f43618a19fa46554ac727f019958b Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 02:21:53 +0200 Subject: [PATCH 13/14] Last commit. See you soon! --- .github/workflows/release.yml | 126 ++++++++++++++++------------------ 1 file changed, 60 insertions(+), 66 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b72362c5..f925cf89 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,74 +8,68 @@ on: types: [published] jobs: - #app-tests-analyze: - # runs-on: ubuntu-latest - # services: - # mysql: - # image: mysql:latest - # env: - # MYSQL_ROOT_PASSWORD: root - # MYSQL_DATABASE: test_database - # ports: - # - 3306:3306 - # options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 -# - # steps: - # - uses: actions/checkout@v2 -# - # - name: Cache Maven packages - # uses: actions/cache@v2 - # with: - # path: | - # ~/.m2 - # key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - # restore-keys: | - # ${{ runner.os }}-m2 -# - # - name: Set up JDK 17 - # uses: actions/setup-java@v1 - # with: - # java-version: '17' -# - # - name: Add exec permission to mvnw - # run: chmod +x mvnw -# - # - name: Compile the application - # run: ./mvnw -B clean install -DskipTests=true -# - # - name: Start the application - # run: | - # ./mvnw spring-boot:run > logs.txt 2>&1 & - # echo $! > spring-boot-app.pid - # sleep 5 - # env: - # SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/test_database - # SPRING_DATASOURCE_USERNAME: root - # SPRING_DATASOURCE_PASSWORD: root - # SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver - # SPRING_PROFILES_ACTIVE: test - # - name: Check listening ports - # run: ss -tuln - # - name: Run tests - # run: | - # ./mvnw org.jacoco:jacoco-maven-plugin:prepare-agent verify -Dspring.datasource.url=jdbc:mysql://localhost:3306/test_database -Dspring.datasource.username=root -Dspring.datasource.password=root -Dspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver - # env: - # SPRING_PROFILES_ACTIVE: test - # headless: true - # EXCLUDE_JUNIT: true - # - name: Show app logs - # if: always() - # run: | - # cat logs.txt - # - name: Shut down the application - # run: | - # kill $(cat spring-boot-app.pid) - # - name: Collect Jacoco report and send to Sonar - # run: | - # ./mvnw org.jacoco:jacoco-maven-plugin:report sonar:sonar -Dsonar.projectKey=Arquisoft_wiq_es04b -Dsonar.organization=arquisoft -Dsonar.branch.name=${{ github.head_ref || github.ref_name }} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${{ secrets.SONAR_TOKEN }} -Dspring.profiles.active=test + app-tests-analyze: + runs-on: ubuntu-latest + services: + mysql: + image: mysql:latest + env: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: test_database + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 +# steps: + - uses: actions/checkout@v2 +# - name: Cache Maven packages + uses: actions/cache@v2 + with: + path: | + ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-m2 +# - name: Set up JDK 17 + uses: actions/setup-java@v1 + with: + java-version: '17' +# - name: Add exec permission to mvnw + run: chmod +x mvnw +# - name: Compile the application + run: ./mvnw -B clean install -DskipTests=true +# - name: Start the application + run: | + ./mvnw spring-boot:run > logs.txt 2>&1 & + echo $! > spring-boot-app.pid + sleep 5 + env: + SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/test_database + SPRING_DATASOURCE_USERNAME: root + SPRING_DATASOURCE_PASSWORD: root + SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver + SPRING_PROFILES_ACTIVE: test + - name: Check listening ports + run: ss -tuln + - name: Run tests + run: | + ./mvnw org.jacoco:jacoco-maven-plugin:prepare-agent verify -Dspring.datasource.url=jdbc:mysql://localhost:3306/test_database -Dspring.datasource.username=root -Dspring.datasource.password=root -Dspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + env: + SPRING_PROFILES_ACTIVE: test + headless: true + EXCLUDE_JUNIT: true + - name: Show app logs + if: always() + run: | + cat logs.txt + - name: Shut down the application + run: | + kill $(cat spring-boot-app.pid) + - name: Collect Jacoco report and send to Sonar + run: | + ./mvnw org.jacoco:jacoco-maven-plugin:report sonar:sonar -Dsonar.projectKey=Arquisoft_wiq_es04b -Dsonar.organization=arquisoft -Dsonar.branch.name=${{ github.head_ref || github.ref_name }} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${{ secrets.SONAR_TOKEN }} -Dspring.profiles.active=test build-and-push: runs-on: ubuntu-latest - #needs: app-tests-analyze + needs: app-tests-analyze steps: - uses: actions/checkout@v4 From 066146d2916b76d2c17f4492b5d4b728ab756596 Mon Sep 17 00:00:00 2001 From: Pelayori <31128562+Pelayori@users.noreply.github.com> Date: Mon, 29 Apr 2024 02:25:51 +0200 Subject: [PATCH 14/14] Last commit. See you soon! --- .github/workflows/release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f925cf89..88343ecc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,9 +19,9 @@ jobs: ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 -# steps: + steps: - uses: actions/checkout@v2 -# - name: Cache Maven packages + - name: Cache Maven packages uses: actions/cache@v2 with: path: | @@ -29,15 +29,15 @@ jobs: key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-m2 -# - name: Set up JDK 17 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: java-version: '17' -# - name: Add exec permission to mvnw + - name: Add exec permission to mvnw run: chmod +x mvnw -# - name: Compile the application + - name: Compile the application run: ./mvnw -B clean install -DskipTests=true -# - name: Start the application + - name: Start the application run: | ./mvnw spring-boot:run > logs.txt 2>&1 & echo $! > spring-boot-app.pid