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

4.8 KiB
Raw Blame History

🔧 Toollist

Verwaltung von Werkzeugen und Material für ein Renovierungs- / Sanierungsprojekt.


Tech Stack

Schicht Technologie
Sprache Rust
Framework Leptos 0.8 Full-Stack SSR + Hydration
Server Axum 0.8
Datenspeicher TOML-Datei (data/tools.toml)
Styles SCSS (style/main.scss)
Build-Tool cargo-leptos

Entwicklung

# 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

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)

[[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.

name,anzahl
Schubkarren,2
Betonmischer,1
Nadelrolle,mehrere
Besen,

Importierte Einträge erhalten Standardwerte: Status = Offen, Priorität = Mittel, Beschaffung = Unbekannt.


Features (Stand)

  • Werkzeuge anlegen, bearbeiten, löschen
  • Listenansicht (Tabelle)
  • Filter: Status, Priorität, Tag, Freitextsuche
  • Dynamisches Formular (Felder je nach Beschaffungsart)
  • CSV-Import (Name + Anzahl)
  • Datenspeicherung in data/tools.toml
  • 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")