Files
SpiceManagementSystem/README.md
T
2026-09-12 04:30:04 +02:00

169 lines
3.4 KiB
Markdown

# 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 <befehl>
```
---
## 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)