# SpiceManagementSystem Warenwirtschafts-Panel für Gewürzmischungen — verwaltet Rohstoffe, Rezepte, Produkte, Lagerbestand und Shopify-Sync. Built with [Laravel](https://laravel.com) + [Filament](https://filamentphp.com), deployed via Docker. --- ## Lokale Entwicklung **Voraussetzungen:** PHP 8.4, Composer, Node.js, MariaDB ```bash composer install npm install && npm run build cp .env.example .env php artisan key:generate php artisan migrate php artisan serve ``` Die App läuft dann auf `http://localhost:8000`. --- ## Produktion (Docker) Der Deploy läuft automatisch via Gitea Actions bei jedem Push auf `main`: 1. Dateien per SCP auf den VPS kopieren 2. `docker compose up -d --build` — baut das Image neu und startet die Container 3. `php artisan migrate --force` — läuft automatisch im Container ### Artisan-Befehle auf dem Server Da die App in Docker mit PHP 8.4 läuft, müssen alle artisan-Befehle **im Container** ausgeführt werden: ```bash cd ~/app && docker compose exec app php artisan ``` --- ## Shopify-Import ### Erstimport (Produkte + Lagerbestand) ```bash cd ~/app && docker compose exec app php artisan shopify:import ``` Optionen: - `--dry-run` — zeigt nur an was importiert würde, speichert nichts ### Produktbilder herunterladen Für bereits importierte Produkte ohne Bilder: ```bash cd ~/app && docker compose exec app php artisan shopify:images ``` Optionen: - `--force` — lädt Bilder auch für Produkte neu, die bereits welche haben ### Lagerbestand synchronisieren ```bash cd ~/app && docker compose exec app php artisan shopify:sync ``` --- ## Cronjob Auf dem Server einrichten, damit der Laravel-Scheduler läuft: ``` * * * * * cd ~/app && docker compose exec -T app php artisan schedule:run >> /dev/null 2>&1 ``` --- ## Datenbankstruktur Migrationen ausführen: ```bash php artisan migrate ``` Im Entwicklungsmodus komplett neu aufsetzen: ```bash php artisan migrate:refresh ``` ``` Table spices { id int [pk] name varchar(255) amount decimal(10,2) unit text } Table recipes { id int [pk] name varchar(255) description text } Table recipes_spices { recipe_id int [ref: > recipes.id] spice_id int [ref: > spices.id] amount_in_percent decimal(4,2) indexes { (recipe_id, spice_id) [pk] } } Table packings { id int [pk] name varchar(255) size decimal(10,2) } Table products { id int [pk] title text images json description text package_content text recipes_id int [ref: > recipes.id] } Table products_sizes { id int [pk] product_id int [ref: > products.id] packing_id int [ref: > packings.id] sku varchar shopify_variant_id varchar price float description text gtin varchar } Table products_inventory { id int [pk] product_id int [ref: > products.id] size_id int [ref: > products_sizes.id] out_at timestamp } ``` --- ## Vision & Todo **Fokus: Warenwirtschaft (Lager, Rohstoffe, Produkte)** - [x] DB-Schema mit Produkthistorie - [x] Rezepte (prozentual) - [x] Produktgrößen und -preise - [x] Inventar (eindeutige Items mit Ausgangs-Flag) - [x] Füllstandsanpassung der Rohstoffe beim Inventar anlegen - [x] Warenausgang (Produktverkauf) - [x] Shopify-Import (Produkte, Varianten, Lagerbestand, Bilder) - [x] Continuous Deployment via Gitea Actions + Docker - [x] Frontend (Sidebar-Struktur, Navigation) - [ ] Dashboard (Füllstände, Lager, Sales-Zeitspanne)