Initial HerbAPI implementation

Rust/Axum REST API (herbapi-api) with PostgreSQL, S3/Garage, OIDC auth.
Dioxus 0.7 WASM frontend (herbapi-ui) with sidebar layout and botanical reference style.
9 SQL migrations covering families, species, cultivars, suppliers, companions, images, users, API tokens.
This commit is contained in:
2026-03-14 00:02:29 +01:00
commit 484979ad53
56 changed files with 12792 additions and 0 deletions
@@ -0,0 +1,29 @@
CREATE TABLE suppliers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slug TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
url TEXT,
is_organic BOOLEAN NOT NULL DEFAULT FALSE,
is_demeter BOOLEAN NOT NULL DEFAULT FALSE,
country TEXT,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE cultivar_suppliers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
cultivar_id UUID NOT NULL REFERENCES cultivars(id) ON DELETE CASCADE,
supplier_id UUID NOT NULL REFERENCES suppliers(id) ON DELETE CASCADE,
article_number TEXT,
product_url TEXT,
price_eur NUMERIC(8,2),
pack_size NUMERIC(8,2),
pack_unit TEXT,
last_checked_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(cultivar_id, supplier_id, article_number)
);
CREATE INDEX idx_cs_cultivar ON cultivar_suppliers(cultivar_id);
CREATE INDEX idx_cs_supplier ON cultivar_suppliers(supplier_id);