Deploy / deploy (push) Successful in 10s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
169 lines
3.4 KiB
Markdown
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)
|