Projects/3BIT/winter-semester/IIS/xnecasr00/doc.html
2026-04-14 19:28:46 +02:00

176 lines
11 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2"/>
<title>Projekt IIS</title>
<style type="text/css">
table { border-collapse: collapse; }
td, th { border: 1px solid black; padding: 0.3em 0.5em; text-align: left; }
dt { font-weight: bold; margin-top: 0.5em; }
</style>
</head>
<body>
<!-- Zkontrolujte prosím nastavení kódování v hlavičce dokumentu
podle použitého editoru -->
<h1>Vinařství</h1> <!-- Nahradte názvem svého zadání -->
<dl>
<dt>Autoři</dt>
<dd>Roman Nečas <!-- Nahraďte skutečným jménem a e-mailem autora a popisem činnosti -->
<a href="mailto:xnecasr00@stud.fit.vutbr.cz">xnecasr00@stud.fit.vutbr.cz</a> -
<ul>
<li>ERD: Tabuľky pre sklizeň, variáciu odrody, vinohradnícky riadok, odrodu a víno</li>
<li>Implementácia prípadov použitia:
<ul>
<li>Vinár - Kalendár, úprava plánovaných úloh a zberu, vedenie záznamov o zozbieraných hroznách, zaraďovanie vína do predaja</li>
<li>Zákazník - Nakupovanie vína, história nákupov</li>
<li>Návštevník - Prezeranie katalógu vín, prezeranie základných informácií o vinárstve</li>
</ul>
</li>
</ul>
</dd>
<dd>Tomáš Foltyn <!-- Nahraďte skutečným jménem a e-mailem autora a popisem činnosti -->
<a href="mailto:xfolty21@stud.fit.vutbr.cz">xfolty21@stud.fit.vutbr.cz</a> -
<ul>
<li>ERD: Tabuľky pre plánovanie, ošetrenie, zalievanie, hnojenie, rez, postrek</li>
<li>Implementácia prípadov použitia:
<ul>
<li>Vinár - správa vinohradníckych riadkov (mapa), plánovanie ošetrení, plánovanie zavlažovania, rezu vinice, sklizne</li>
</ul>
<li>Inštalácia aplikácie na server</li>
</li>
</ul>
</dd>
<dd>Kristián Pribila <!-- Nahraďte skutečným jménem a e-mailem autora a popisem činnosti -->
<a href="mailto:xpribik00@stud.fit.vutbr.cz">xpribik00@stud.fit.vutbr.cz</a> -
<ul>
<li>ERD: Tabuľky pre nákup, užívateľa, vinára, pracovníka a zákazníka</li>
<li>Implementácia prípadov použitia:
<ul>
<li>Administrátor - správa uživateľov a ich rolí, správa plánovaných akcií</li>
<li>Pracovník vinárstva - zaznamenávanie prevedených činností vo vinici, vykonanie zberu hrozna</li>
</ul>
<li>Prihlasovanie a registrácia</li>
</li>
</ul>
</dd>
<dt>URL aplikace</dt>
<dd><a href="http://www.stud.fit.vutbr.cz/~xnecasr00/IIS">http://www.stud.fit.vutbr.cz/~xnecasr00/IIS</a></dd>
</dl>
<h2>Uživatelé systému pro testování</h2>
<table>
<tr><th>Login</th><th>Heslo</th><th>Role</th></tr>
<tr><td>admin</td><td>password</td><td>Administrátor</td></tr>
<tr><td>winemaker</td><td>password</td><td>Vinař</td></tr>
<tr><td>employee</td><td>password</td><td>Pracovník vinařství</td></tr>
<tr><td>customer</td><td>password</td><td>Zákazník</td></tr>
<tr><td></td><td></td><td>Návštevník</td></tr>
</table>
<h3>Video</h3>
<a href="https://nextcloud.fit.vutbr.cz/s/g3ycQrXQwwFmpPX">https://nextcloud.fit.vutbr.cz/s/g3ycQrXQwwFmpPX</a>
<h2>Implementace</h2>
<h3>Administrátor</h3>
<ul>
<li><strong>Správa užívateľov a ich rolí</strong> - <code>app/Http/Controllers/Admin/UserController.php</code>
<br/>Views: <code>resources/views/admin/users/</code> (index, create, edit)</li>
<li><strong>Správa plánovaných akcií/udalostí</strong> - <code>app/Http/Controllers/Admin/EventController.php</code>
<br/>Views: <code>resources/views/admin/events/</code> (index, create, edit)</li>
</ul>
<h3>Vinár (Winemaker)</h3>
<ul>
<li><strong>Dashboard a kalendár</strong> - <code>app/Http/Controllers/WinemakerController.php</code>
<br/>Views: <code>resources/views/winemaker/dashboard/</code> (index, planned-tasks, completed-activities)</li>
<li><strong>Správa vinohradníckych riadkov</strong> - <code>app/Http/Controllers/VineyardRowController.php</code>, <code>app/Http/Controllers/VineyardMapController.php</code>
<br/>Views: <code>resources/views/vineyard-rows/</code>, <code>resources/views/vineyard/map/</code></li>
<li><strong>Plánovanie ošetrení (postreky, hnojenie, zavlažovanie, rez)</strong> - <code>app/Http/Controllers/PlannedTaskController.php</code>
<br/>Views: <code>resources/views/planned-tasks/</code> (watering, pruning, fertilisation, pesticide, harvest, edit)</li>
<li><strong>Plánovanie a správa zberu</strong> - <code>app/Http/Controllers/HarvestController.php</code>
<br/>Views: <code>resources/views/winemaker/harvests/</code> (index, bottle)</li>
<li><strong>Pivnica - vedenie záznamov o víne</strong> - <code>app/Http/Controllers/WineController.php</code> (metódy cellarIndex, createBlendForm, storeBlend)
<br/>Views: <code>resources/views/winemaker/cellar/</code> (index, create-blend)</li>
<li><strong>Zaraďovanie vína do predaja</strong> - <code>app/Http/Controllers/WineController.php</code> (metódy salesIndex, addToSales, removeFromSales)
<br/>Views: <code>resources/views/winemaker/sales/index.blade.php</code></li>
</ul>
<h3>Pracovník vinárstva (Employee)</h3>
<ul>
<li><strong>Zaznamenávanie prevedených činností (ošetrenia)</strong> - <code>app/Http/Controllers/Employee/TaskController.php</code> (metóda completeTreatment)
<br/>Views: <code>resources/views/employee/tasks/index.blade.php</code></li>
<li><strong>Vykonanie zberu hrozna</strong> - <code>app/Http/Controllers/Employee/TaskController.php</code> (metóda completeHarvest)</li>
</ul>
<h3>Zákazník (Customer)</h3>
<ul>
<li><strong>Nakupovanie vína</strong> - <code>app/Http/Controllers/CartController.php</code>, <code>app/Http/Controllers/PurchaseController.php</code>
<br/>Views: <code>resources/views/cart/index.blade.php</code>, <code>resources/views/catalog/</code></li>
<li><strong>História nákupov</strong> - <code>app/Http/Controllers/PurchaseController.php</code> (metóda myPurchases)
<br/>Views: <code>resources/views/purchases/my.blade.php</code></li>
<li><strong>Rezervácie udalostí</strong> - <code>app/Http/Controllers/EventController.php</code> (metódy reserve, cancelReservation, myReservations)
<br/>Views: <code>resources/views/events/my-reservations.blade.php</code></li>
</ul>
<h3>Návštevník (Guest)</h3>
<ul>
<li><strong>Prezeranie katalógu vín</strong> - <code>app/Http/Controllers/WineController.php</code> (metóda catalog)
<br/>Views: <code>resources/views/catalog/</code> (index, show)</li>
<li><strong>Prezeranie udalostí</strong> - <code>app/Http/Controllers/EventController.php</code> (metóda index)
<br/>Views: <code>resources/views/events/index.blade.php</code></li>
<li><strong>Základné informácie o vinárstve</strong> - <code>routes/web.php</code> (closure routes)
<br/>Views: <code>resources/views/about.blade.php</code>, <code>resources/views/contact.blade.php</code></li>
<li><strong>Prihlásenie a registrácia</strong> - <code>app/Http/Controllers/Auth/LoginController.php</code>, <code>app/Http/Controllers/Auth/RegisterController.php</code>
<br/>Views: <code>resources/views/auth/</code> (login, register)</li>
</ul>
<h3>Dátové modely</h3>
<p>Všetky modely sa nachádzajú v <code>app/Models/</code>:</p>
<ul>
<li><strong>Užívatelia</strong> - <code>User.php</code> (s rolami definovanými v <code>app/Enums/UserRole.php</code>)</li>
<li><strong>Vinica</strong> - <code>VineyardRow.php</code>, <code>GrapeVariety.php</code>, <code>VarietyVariation.php</code></li>
<li><strong>Ošetrenia</strong> - <code>Treatment.php</code> (abstraktný), <code>Spraying.php</code>, <code>Watering.php</code>, <code>Fertilization.php</code>, <code>Pruning.php</code></li>
<li><strong>Zber a výroba</strong> - <code>Harvest.php</code>, <code>Wine.php</code>, <code>WineProduction.php</code></li>
<li><strong>Plánovanie</strong> - <code>PlannedTask.php</code></li>
<li><strong>Nákupy</strong> - <code>Purchase.php</code>, <code>PurchaseItem.php</code></li>
<li><strong>Udalosti</strong> - <code>Event.php</code>, <code>EventReservation.php</code></li>
</ul>
<h3>Rozšírenia</h3>
<ul>
<li><strong>Integrovaný kalendár</strong> - <code>WinemakerController::dashboard()</code> - vinár vidí všetky plánované úkony</li>
<li><strong>Degustácie a akcie</strong> - <code>EventController</code>, <code>Admin\EventController</code> - organizácia akcií s rezerváciami</li>
<h3>Databáze</h3>
<img src="erd.png" alt="ERD diagram" style="max-width: 100%;">
<h2>Instalace</h2>
<h3>Lokální běh (bez Dockeru)</h3>
<p>Postup pro lokální vývoj nebo instalaci na klasický server:</p>
<ol>
<li><strong>Softwarové požadavky</strong> - PHP 8.2+ s rozšířeními OpenSSL, PDO, Mbstring, Tokenizer, Ctype, JSON, BCMath a Fileinfo; Composer 2; Node.js 18+ (dop. 20 LTS) a npm; MySQL 8 / MariaDB 10.5+; webserver Apache nebo Nginx s PHP-FPM.</li>
<li><strong>Stažení a rozbalení</strong> - projekt umístěte na server například pomocí <code>git clone</code> nebo rozbalením archivu do <code>/var/www/laravel-winary</code>; složky <code>storage</code> a <code>bootstrap/cache</code> musí mít zápis pro uživatele webserveru.</li>
<li><strong>Konfigurace prostředí</strong> - v kořeni zkopírujte <code>.env.example</code> na <code>.env</code>; vyplňte <code>APP_URL</code>, <code>APP_ENV=production</code>, DB přístupy, případně SMTP; vygenerujte klíč <code>php artisan key:generate</code>.</li>
<li><strong>Instalace závislostí</strong> - spusťte <code>composer install --no-dev --optimize-autoloader</code>; poté <code>npm install</code> a <code>npm run build</code> pro sestavení statických assetů (Vite).</li>
<li><strong>Inicializace databáze</strong> - založte prázdnou databázi a uživatele; spusťte <code>php artisan migrate --force --seed</code> pro vytvoření schématu a naplnění základními daty/uživateli; pokud je třeba práce se soubory, vytvořte symlink <code>php artisan storage:link</code>.</li>
<li><strong>Spuštění aplikace</strong> - nasměrujte webserver na složku <code>public/</code>; pro produkci doporučeno <code>php artisan config:cache</code> a <code>php artisan route:cache</code>; případně spusťte frontu <code>php artisan queue:work</code> (např. jako systemd službu).</li>
</ol>
<h3>Produkční běh (Docker Compose)</h3>
<p>Pro nasazení pomocí Dockeru lze použít skript <code>./script/up.sh</code>:</p>
<ol>
<li><strong>Příprava konfigurace</strong> - upravte <code>.env.prod</code> (APP_URL, hesla DB, APP_KEY, port 8741 apod.); soubor se připojuje do kontejneru jako <code>.env</code>.</li>
<li><strong>Start kontejneru</strong> - spusťte <code>./script/up.sh</code>, což zavolá <code>docker compose -f docker-compose.prod.yml up --build -d</code> pro aplikaci a MySQL (data v volume <code>mysql_data</code>).</li>
<li><strong>První inicializace</strong> - entrypoint kontejneru čeká na databázi, instaluje Composer a NPM závislosti, provádí <code>php artisan migrate:fresh --seed --force</code>, vytvoří symlink storage a přebuduje assety. Další spuštění použije stávající dependencies.</li>
<li><strong>Přístup k aplikaci</strong> - webserver/reverse proxy směřujte na port <code>APP_PORT</code> (default 8741) a cílte na kontejner <code>app</code>; veřejné soubory jsou ve složce <code>public/</code> uvnitř kontejneru.</li>
</ol>
</body>
</html>