# BugReport

<img src="frontend/public/bugreport.svg" alt="BugReport logo" height="100" align="left" />

BugReport je webová aplikácia na sledovanie a správu chýb (bug tracking system) s jednoduchým a intuitívnym používateľským rozhraním. Aplikácia umožňuje pridávať, upravovať, kategorizovať a sledovať stav bug reportov pomocou Kanban-štýl rozhrania s drag-and-drop funkcionalitou.

<br /><br /><br />

## 🚀 Funkcie

- **Kanban rozhranie** - vizuálne sledovanie stavu bug reportov v štyroch kategóriách (Nezaradené, Čakajúce, Rozpracované, Blokované)
- **Drag-and-drop** - jednoduché presúvanie reportov medzi kategóriami
- **Prioritizácia** - nastavenie priority reportov (Nízka, Stredná, Vysoká, Kritická)
- **Kategorizácia** - zaradenie reportov do skupín (Control Panel, Task.Platon.sk, WebsiteIP, Antispam)
- **Detailný pohľad** - zobrazenie a úprava detailov reportu
- **REST API** - prístup k dátam cez API endpoint

## 🔷 Diagram stavov pre BUG

<img src="frontend/src/assets/images/FlowDiagram.drawio.svg" />

## 🖼️ Screenshot
<img src="doc/Screenshot_2025-05-17_111345.png" />

## 🖥️ Technológie

### ⚙️ Backend

- PHP
- SQLite databáza
- [TPsoft/DBmodel](https://gitea.tpsoft.org/TPsoft.org/DBmodel) - PHP databázové rozšírenie
- [TPsoft/APIlite](https://gitea.tpsoft.org/TPsoft.org/APIlite) - Jednoduchý nástroj pre zostavenie API

### 📺 Frontend

- [Vue.js 3](https://vuejs.org/) - JavaScript framework
- [Vue Router](https://router.vuejs.org/) - smerovanie v aplikácii
- [Vuedraggable](https://github.com/SortableJS/vue.draggable.next) - drag-and-drop funkcionalita
- [Font Awesome](https://fontawesome.com/) - ikony
- [Mitt](https://github.com/developit/mitt) - knižnica pre správu udalostí
- [Vite](https://vitejs.dev/) - build nástroj

## 🌳 Štruktúra projektu

```
BugReport/
├── backend/                          # Backend aplikácia (PHP)
│   ├── config/                       # Konfigurácia aplikácie
│   ├── public/                       # Vstupný bod aplikácie, tu nasmerovat vo webserveri DOCUMENT ROOT
│   ├── scripts/                      # Skripty pre pred-spracovanie, build a ine
│   ├── src/                          # Zdrojový kód
│   │   ├── Models/                   # Classy pre jednotlive DB tabulky pouziva TPsoft\DBmodel
│   │   ├── API.php                   # Logika pre API BugReport pouziva TPsoft\APIlite
│   │   ├── Init.php                  # Inicializacia pripojenia k DB, kontroly a iné
│   │   └── Maintenance.php           # Údržba pre projekt, zatiaľ hlavne pre upgrade databazovej štruktúry, používa \TPsoft\DBmodel\Maintenance
│   └── test/                         # Testovacie skripty
├── data/                             # Dáta aplikácie
│   ├── attachments/                  # Súborové uložisko príloh
│   └── database.db                   # SQLite databáza
├── doc/                              # Dokumentácia a iné súbory počas vývoja
└── frontend/                         # Frontend aplikácia (Vue.js)
    ├── public/                       # Statické súbory
    ├── scripts/                      # Skripty pre build
    └── src/                          # Zdrojový kód
        ├── assets/                   # Assety (CSS, obrázky)
        ├── components/               # Vue komponenty
        ├── views/                    # Vue stránky
        ├── App.vue                   # Hlavná Vue komponenta
        ├── backend.js                # Komunikácia s API
        ├── events.js                 # Správa udalostí
        ├── main.js                   # Vstupný bod Vue aplikácie
        └── router.js                 # Vue Router konfigurácia
```

## 🛠️ Inštalácia a spustenie

### 📋 Požiadavky

- PHP 8.2 alebo novší
- Webový server (Apache, Nginx)
- Node.js a npm pre vývoj frontendu

### ⚙️ Backend

1. Skopírujte súbory do webového adresára
2. Uistite sa, že adresár `data` má práva na zápis
3. Nastavte DOCUMENT ROOT na adresár `backend/public`
3. Prístup k aplikácii cez webový prehliadač

### 📺 Frontend (pre vývoj)

1. Prejdite do adresára`frontend`
2. Nainštalujte závislosti:
   ```
   npm install
   ```
3. Spustite vývojový server:
   ```
   npm run dev
   ```
4. Pre build produkčnej verzie:
   ```
   npm run build
   ```

## 📖 API dokumentácia

API je dostupné cez `API.php` endpoint fyzicky umiestnený v DOCUMENT ROOT `backend/public/API.php`. Všetky požiadavky vracajú JSON odpoveď.kompletnú a aktuálnu dokumentáciu je možné získať aj HTML formáte `API.php?format=html`.

### 🚏 Dostupné endpointy

| Akcia                | Popis                                  | Parametre                                                       |
| -------------------- | -------------------------------------- | --------------------------------------------------------------- |
| `help`             | Zobrazí nápovedu                     | -                                                               |
| `add`              | Pridá nový report                    | `title`, `description`, `status`, `group`, `priority` |
| `update`           | Aktualizuje report                     | `report_id`, `report_data` (JSON)                           |
| `delete`           | Vymaže report                         | `report_id`                                                   |
| `get`              | Získa jeden report                    | `report_id`                                                   |
| `getAll`           | Získa všetky reporty                 | `status` (voliteľné)                                        |
| `getAllGrouped`    | Získa reporty zoskupené podľa stavu | `status` (voliteľné)                                        |
| `updateOrdNum`     | Aktualizuje poradie reportov           | `ordnums` (JSON)                                              |
| `updateStatus`     | Aktualizuje stav reportu               | `report_id`, `status`                                       |
| `attachmentAdd`    | Pridá prílohu k reportu              | `report_id`, `attachment_type`, `attachment_content`      |
| `attachmentUpdate` | Aktualizuje prílohu                   | `attachment_id`, `attachment_content`                       |
| `attachmentGetAll` | Získa všetky prílohy reportu        | `report_id`                                                   |

### 🔍 Príklad API volania

```javascript
// Získanie všetkých reportov
fetch('api.php?action=getAll')
  .then(response => response.json())
  .then(data => console.log(data));

// Pridanie nového reportu
fetch('api.php?action=add', {
  method: 'POST',
  body: new FormData(document.querySelector('form'))
})
  .then(response => response.json())
  .then(data => console.log(data));
```

## 🏗️ Stavy reportov

| ID | Stav          |
| -- | ------------- |
| 0  | Nezaradené   |
| 1  | Čakajúce    |
| 2  | Rozpracované |
| 3  | Blokované    |
| 4  | Vyriešený   |

## 📣 Priority reportov

| ID | Priorita  |
| -- | --------- |
| 0  | Nízka    |
| 1  | Stredná  |
| 2  | Vysoká   |
| 3  | Kritická |

## 🕸️ Skupiny reportov

- `cp` - Control Panel
- `task` - Task.Platon.sk
- `websiteip` - WebsiteIP
- `antispam` - Antispam

## ✨ Plánované vylepšenia - Planned Features
- Skupiny reportov v samostatnej tabuľke s CRUD manažmentom

## ⚖️ Licencia

Tento projekt je licencovaný pod [MIT licenciou](https://opensource.org/licenses/MIT).
