From e927dfc46d76e575bbdef26e73d23c5e0b6ee502 Mon Sep 17 00:00:00 2001
From: dre0059 <eliska.dreveniakova@vsb.cz>
Date: Fri, 25 Apr 2025 23:40:24 +0200
Subject: [PATCH] =?UTF-8?q?Zmena=20stylovania=20grafov=20-=20pr=C3=ADprava?=
 =?UTF-8?q?=20na=20tret=C3=AD,=20kompletn=C3=BD=20graf?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 data/demo.mv.db                               | Bin 14921728 -> 14921728 bytes
 .../controller/StatisticsController.java      |  47 +++++++++++++++---
 .../repository/DocumentRepository.java        |  17 +------
 .../repository/ReferenceRepository.java       |  13 +++++
 src/main/resources/templates/statistics.html  |   2 +-
 5 files changed, 56 insertions(+), 23 deletions(-)

diff --git a/data/demo.mv.db b/data/demo.mv.db
index 7454a2b717bca086ba694b4c3425baa4d43f456b..4776c8ec4a71454d5ff7b0224e7905e703e36cf4 100644
GIT binary patch
delta 13761
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
V_yu?a`~x@#-pq}h{zv-l{{d)z$jtx%

delta 8510
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
MetvMz2kg=R2F<@<c>n+a

diff --git a/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java b/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java
index 6bf4eae..8a8348b 100644
--- a/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java
+++ b/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java
@@ -2,9 +2,11 @@ package com.dre0059.articleprocessor.controller;
 
 import com.dre0059.articleprocessor.model.Dokument;
 import com.dre0059.articleprocessor.repository.DocumentRepository;
+import com.dre0059.articleprocessor.repository.ReferenceRepository;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -13,29 +15,62 @@ import java.util.stream.Collectors;
 public class StatisticsController {
 
     private final DocumentRepository documentRepository;
+    private final ReferenceRepository referenceRepository;
 
-    public StatisticsController(DocumentRepository documentRepository) {
+    public StatisticsController(DocumentRepository documentRepository,
+                                ReferenceRepository referenceRepository) {
         this.documentRepository = documentRepository;
+        this.referenceRepository = referenceRepository;
     }
 
     @GetMapping("/statistics")
-    public String statistics(Model model) {
+    public String statistics(
+            @RequestParam(value = "category", required = false, defaultValue = "") String category,
+            Model model
+    ) {
+        // 1) Všetky dokumenty
         List<Dokument> documents = documentRepository.findAll();
 
-        // Status count
+        // 2) Status count
         Map<String, Long> statusCount = documents.stream()
                 .collect(Collectors.groupingBy(Dokument::getStatus, Collectors.counting()));
 
-        // odfiltruj PDF ktoré nemajú kategoriu
+        // 3) Category count (len tie, ktoré majú kategóriu)
         Map<String, Long> categoryCount = documents.stream()
-                .filter(doc -> doc.getCategory() != null) // 💡 Tu je fix
+                .filter(d -> d.getCategory() != null)
                 .collect(Collectors.groupingBy(
-                        doc -> doc.getCategory().getName(),
+                        d -> d.getCategory().getName(),
                         Collectors.counting()
                 ));
 
+        // 4) Zoznam všetkých kategórií (poradie podľa vstupu do mapy)
+        List<String> categories = new ArrayList<>(categoryCount.keySet());
+
+        // 5) Vyberieme "selectedCategory":
+        //    - ak prišlo z parametra, použijeme ho
+        //    - inak vezmeme prvú kategóriu zo zoznamu (ak existuje)
+        String selectedCategory = category.trim().isEmpty()
+                ? (categories.isEmpty() ? "" : categories.get(0))
+                : category.trim();
+
+        // 6) Spočítame referencie podľa rokov pre vybranú kategóriu
+        Map<Integer, Long> referenceCounts = new LinkedHashMap<>();
+        if (!selectedCategory.isEmpty()) {
+            List<Object[]> raw = referenceRepository
+                    .countReferencesByYearForCategory(selectedCategory);
+            // raw: [ [year, count], [year, count], ... ] už zoradené podľa roku v JPQL
+            raw.forEach(record -> {
+                Integer year = (Integer) record[0];
+                Long count = (Long) record[1];
+                referenceCounts.put(year, count);
+            });
+        }
+
+        // 7) Pridáme všetko do modelu
         model.addAttribute("statusCount", statusCount);
         model.addAttribute("categoryCount", categoryCount);
+        model.addAttribute("referenceCounts", referenceCounts);
+        model.addAttribute("selectedCategory", selectedCategory);
 
         return "statistics";
     }
diff --git a/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java b/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java
index fb94ac6..7d5c73e 100644
--- a/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java
+++ b/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java
@@ -46,20 +46,5 @@ public interface DocumentRepository extends JpaRepository<Dokument, Long> {
     )
     List<Dokument> getReferencedDocumentsById(@Param("id") Long fromDocumentId);
 
-}
-
-/*
-    // save only if all authors are the same
-    @Query("""
-        SELECT COUNT(d) > 0
-        FROM Dokument d
-        WHERE d.title = :title
-        AND SIZE(d.authors) = :authorCount
-        AND EXISTS (
-            SELECT 1 FROM Dokument d2 JOIN d2.authors a2
-            WHERE d2.id = d.id AND a2 IN :authors
-        )
-        """)
-    boolean existsByTitleAndAuthors(@Param("title") String title, @Param("authors") List<Author> authors, @Param("authorCount") int authorCount);
 
- */
\ No newline at end of file
+}
diff --git a/src/main/java/com/dre0059/articleprocessor/repository/ReferenceRepository.java b/src/main/java/com/dre0059/articleprocessor/repository/ReferenceRepository.java
index f5cee29..2551ed8 100644
--- a/src/main/java/com/dre0059/articleprocessor/repository/ReferenceRepository.java
+++ b/src/main/java/com/dre0059/articleprocessor/repository/ReferenceRepository.java
@@ -2,8 +2,21 @@ package com.dre0059.articleprocessor.repository;
 
 import com.dre0059.articleprocessor.model.Reference;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 import java.util.List;
 
 public interface ReferenceRepository extends JpaRepository<Reference, Long> {
+
+    @Query("""
+       SELECT r.toDocument.publicationYear, COUNT(r)
+       FROM Reference r
+       WHERE r.fromDocument.category.name = :category
+       GROUP BY r.toDocument.publicationYear
+       ORDER BY r.toDocument.publicationYear
+    """)
+    List<Object[]> countReferencesByYearForCategory(@Param("category") String category);
+
+
 }
diff --git a/src/main/resources/templates/statistics.html b/src/main/resources/templates/statistics.html
index 18fa6da..bdae897 100644
--- a/src/main/resources/templates/statistics.html
+++ b/src/main/resources/templates/statistics.html
@@ -3,7 +3,7 @@
 <head>
     <meta charset="UTF-8">
     <title>Document Statistics</title>
-    <script src="https://cdn.plot.ly/plotly-2.24.1.min.js"></script>
+    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
     <link rel="stylesheet" th:href="@{/webjars/bootstrap/5.1.3/css/bootstrap.min.css}">
     <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
 
-- 
GitLab