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:
@@ -0,0 +1,77 @@
|
||||
CREATE TYPE invasiveness_level AS ENUM ('none', 'watch_list', 'invasive', 'banned');
|
||||
CREATE TYPE plant_layer AS ENUM ('canopy', 'understory', 'shrub', 'herbaceous', 'ground_cover', 'vine', 'root');
|
||||
CREATE TYPE succession_stage AS ENUM ('pioneer', 'early', 'mid', 'climax');
|
||||
CREATE TYPE drought_tolerance AS ENUM ('none', 'low', 'moderate', 'high');
|
||||
CREATE TYPE salt_tolerance AS ENUM ('none', 'low', 'moderate', 'high');
|
||||
|
||||
CREATE TABLE species (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
slug TEXT NOT NULL UNIQUE,
|
||||
family_id UUID NOT NULL REFERENCES families(id) ON DELETE RESTRICT,
|
||||
name_scientific TEXT NOT NULL,
|
||||
name_en TEXT,
|
||||
name_de TEXT,
|
||||
description TEXT,
|
||||
soil_moisture TEXT,
|
||||
drainage_requirement TEXT,
|
||||
organic_matter_pct NUMERIC(5,2),
|
||||
nitrogen_ppm INTEGER,
|
||||
phosphorus_ppm INTEGER,
|
||||
potassium_ppm INTEGER,
|
||||
boron_ppm NUMERIC(8,2),
|
||||
calcium_ppm INTEGER,
|
||||
copper_ppm NUMERIC(8,2),
|
||||
iron_ppm NUMERIC(8,2),
|
||||
magnesium_ppm INTEGER,
|
||||
manganese_ppm NUMERIC(8,2),
|
||||
molybdenum_ppm NUMERIC(8,2),
|
||||
sulfur_ppm INTEGER,
|
||||
zinc_ppm NUMERIC(8,2),
|
||||
ph_min NUMERIC(4,2),
|
||||
ph_max NUMERIC(4,2),
|
||||
soil_texture_preference TEXT[],
|
||||
hardiness_zone_usda TEXT,
|
||||
hardiness_zone_at TEXT,
|
||||
min_temp NUMERIC(5,2),
|
||||
max_temp NUMERIC(5,2),
|
||||
drought_tolerance drought_tolerance,
|
||||
water_requirement_mm_week NUMERIC(5,2),
|
||||
waterlogging_tolerance BOOLEAN,
|
||||
salt_tolerance salt_tolerance,
|
||||
edibility_rating SMALLINT,
|
||||
food_uses TEXT,
|
||||
medicinal_uses TEXT,
|
||||
other_uses TEXT,
|
||||
native_range TEXT,
|
||||
invasiveness invasiveness_level DEFAULT 'none',
|
||||
pollination_type TEXT,
|
||||
plant_layer plant_layer,
|
||||
nitrogen_fixer BOOLEAN,
|
||||
dynamic_accumulator BOOLEAN,
|
||||
dynamic_accumulator_nutrients TEXT[],
|
||||
attracts_pollinators BOOLEAN,
|
||||
attracts_beneficial_insects BOOLEAN,
|
||||
wildlife_value TEXT,
|
||||
mulch_plant BOOLEAN,
|
||||
ground_cover_quality TEXT,
|
||||
allelopathic BOOLEAN,
|
||||
guild_role TEXT[],
|
||||
succession_stage succession_stage,
|
||||
heavy_metal_tolerance BOOLEAN,
|
||||
wikidata_qid TEXT,
|
||||
gbif_id TEXT,
|
||||
eppo_code TEXT,
|
||||
pfaf_url TEXT,
|
||||
primary_image_key TEXT,
|
||||
source_urls TEXT[],
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_species_family ON species(family_id);
|
||||
CREATE INDEX idx_species_search ON species
|
||||
USING GIN (to_tsvector('english',
|
||||
coalesce(name_scientific,'') || ' ' ||
|
||||
coalesce(name_en,'') || ' ' ||
|
||||
coalesce(name_de,'') || ' ' ||
|
||||
coalesce(description,'')));
|
||||
Reference in New Issue
Block a user