# 🔧 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://: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` | Liste von Verwendungszwecken | | `tags` | `Vec` | Stichwörter (z.B. `garten`, `schwer`) | | `status` | `Status` | `Offen` · `Organisiert` · `VorOrt` | | `prioritaet` | `Prioritaet` | `Hoch` · `Mittel` · `Niedrig` | | `notizen` | `Option` | Freitext | | `verantwortlich` | `Option` | Wer kümmert sich darum? | | `erstellt_am` | `String` (ISO-8601) | Erstellungszeitpunkt | ### `Beschaffung` | Art | Zusatzfelder | |---|---| | `Unbekannt` | – | | `InBesitz` | – | | `Leihen` | `von: Option` | | `Mieten` | `wo: Option`, `preis: Option` | | `Kaufen` | `wo: Option`, `preis: Option` | ### 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")