Files
toollist/README.md
T
Oliver Walter 5f43c19878 initial
2026-06-06 15:37:42 +02:00

175 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔧 Toollist
Verwaltung von Werkzeugen und Material für ein Renovierungs- / Sanierungsprojekt.
---
## Tech Stack
| Schicht | Technologie |
|---|---|
| Sprache | Rust |
| Framework | [Leptos 0.8](https://leptos.dev) Full-Stack SSR + Hydration |
| Server | Axum 0.8 |
| Datenspeicher | TOML-Datei (`data/tools.toml`) |
| Styles | SCSS (`style/main.scss`) |
| Build-Tool | [cargo-leptos](https://github.com/leptos-rs/cargo-leptos) |
---
## Entwicklung
```bash
# Entwicklungsserver mit Hot-Reload starten
cargo leptos watch
# Browser öffnen
http://localhost:3000
# Im Heimnetz erreichbar unter
http://<server-ip>:3000
```
> **Hinweis:** `site-addr` ist auf `0.0.0.0:3000` gesetzt, die App ist also
> direkt im lokalen Netz erreichbar kein Login, keine Auth.
### Voraussetzungen
```bash
cargo install cargo-leptos
rustup target add wasm32-unknown-unknown
```
> **wasm-bindgen Version:** Die Cargo.toml pinnt `wasm-bindgen = "=0.2.106"`,
> damit es mit dem in cargo-leptos 0.3.6 gebündelten CLI übereinstimmt.
> Falls cargo-leptos aktualisiert wird, ggf. beide Versionen anpassen.
---
## Projektstruktur
```
toollist/
├── Cargo.toml Abhängigkeiten + cargo-leptos Konfiguration
├── data/
│ └── tools.toml Datenspeicher (wird automatisch angelegt)
├── public/ Statische Dateien
├── style/
│ └── main.scss Globales Stylesheet
└── src/
├── main.rs Server-Einstiegspunkt (Axum)
├── lib.rs Crate-Root, Hydration-Einstieg
├── app.rs App-Komponente + Routing
├── models/
│ └── tool.rs Datenmodell (Structs & Enums)
├── server/
│ ├── store.rs TOML lesen/schreiben [nur SSR]
│ └── api.rs Server Functions (HTTP-Endpunkte)
└── components/
├── tool_list.rs Hauptansicht Liste, Filter, CSV-Import
├── tool_form.rs Erstellen / Bearbeiten Formular
└── filter_bar.rs Filterleiste (Suche, Status, Priorität, Tag)
```
---
## Datenmodell
### `Tool` (zentrale Entität)
| Feld | Typ | Beschreibung |
|---|---|---|
| `id` | `String` (UUID) | Eindeutige ID, serverseitig generiert |
| `name` | `String` | Name des Werkzeugs |
| `anzahl` | `Anzahl` | Konkrete Zahl oder „Mehrere" |
| `beschaffung` | `Beschaffung` | Wie das Werkzeug beschafft wird |
| `verwendung` | `Vec<String>` | Liste von Verwendungszwecken |
| `tags` | `Vec<String>` | Stichwörter (z.B. `garten`, `schwer`) |
| `status` | `Status` | `Offen` · `Organisiert` · `VorOrt` |
| `prioritaet` | `Prioritaet` | `Hoch` · `Mittel` · `Niedrig` |
| `notizen` | `Option<String>` | Freitext |
| `verantwortlich` | `Option<String>` | Wer kümmert sich darum? |
| `erstellt_am` | `String` (ISO-8601) | Erstellungszeitpunkt |
### `Beschaffung`
| Art | Zusatzfelder |
|---|---|
| `Unbekannt` | |
| `InBesitz` | |
| `Leihen` | `von: Option<String>` |
| `Mieten` | `wo: Option<String>`, `preis: Option<f64>` |
| `Kaufen` | `wo: Option<String>`, `preis: Option<f64>` |
### TOML-Format (Beispiel)
```toml
[[tools]]
id = "3f2a1b..."
name = "Schubkarren"
status = "Offen"
prioritaet = "Mittel"
erstellt_am = "2025-01-01T10:00:00Z"
verwendung = ["Schutt abtransportieren"]
tags = ["transport", "garten"]
[tools.anzahl]
zahl = 2
[tools.beschaffung]
art = "InBesitz"
```
---
## Server Functions (API)
Alle Endpunkte unter `/api/` automatisch von Leptos registriert.
| Funktion | Beschreibung |
|---|---|
| `tools_laden()` | Alle Werkzeuge laden |
| `tool_erstellen(input)` | Neues Werkzeug anlegen |
| `tool_aktualisieren(id, input)` | Bestehendes Werkzeug aktualisieren |
| `tool_loeschen(id)` | Werkzeug löschen |
| `csv_importieren(inhalt)` | CSV-Text importieren (Name + Anzahl) |
---
## CSV-Import
Einfaches Format nur `name` und `anzahl` werden ausgewertet.
Fehlende oder unbekannte Werte werden toleriert.
```csv
name,anzahl
Schubkarren,2
Betonmischer,1
Nadelrolle,mehrere
Besen,
```
Importierte Einträge erhalten Standardwerte:
`Status = Offen`, `Priorität = Mittel`, `Beschaffung = Unbekannt`.
---
## Features (Stand)
- [x] Werkzeuge anlegen, bearbeiten, löschen
- [x] Listenansicht (Tabelle)
- [x] Filter: Status, Priorität, Tag, Freitextsuche
- [x] Dynamisches Formular (Felder je nach Beschaffungsart)
- [x] CSV-Import (Name + Anzahl)
- [x] Datenspeicherung in `data/tools.toml`
- [x] Im Heimnetz erreichbar (`0.0.0.0:3000`)
## Mögliche nächste Schritte
- [ ] Detailansicht / Klappreihe (Verwendungsliste, alle Felder)
- [ ] Verwendungsliste im Formular als dynamische Liste (statt Textarea)
- [ ] Bauabschnitt als eigenes Feld (oder konsequent via Tags)
- [ ] Druckansicht / Export
- [ ] Sortierung der Tabellenspalten
- [ ] Zähler in der Kopfzeile (z.B. „3 von 12 offen")