v0.11.0 — Plant types: the reusable "kind" record

A rich-but-all-optional reference record per kind of plant (care, sun, water,
bloom & harvest windows, toxic-to-pets, edible parts, spacing), distinct from a
specific planting or a group.

- PlantType model + optional Plant.plantTypeId; migration + idempotent backfill
  that seeds 247 kinds from the built-in plant library and links plantings by
  species/common name (wired into the deploy entrypoint)
- /api/plant-types CRUD; new "Plant types" section (browse by category, edit a
  kind, see every spot you've planted it)
- New plants auto-link to their type on create; plant detail shows "More about…"
- PlantType added to backup/restore; bump APP_VERSION 0.11.0 + changelog

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-15 23:46:07 -05:00
parent 9c0312676a
commit cdb21ed58a
20 changed files with 984 additions and 8 deletions

View File

@@ -0,0 +1,42 @@
-- v0.11.0 — Plant types (the "kind" record)
-- A rich-but-all-optional reference record per kind of plant, plus an optional
-- link from each planting. Seeded/linked by prisma/scripts/backfill-plant-types.ts.
-- CreateTable
CREATE TABLE "PlantType" (
"id" TEXT NOT NULL,
"commonName" TEXT NOT NULL,
"species" TEXT,
"category" "PlantCategory" NOT NULL DEFAULT 'OTHER',
"careNotes" TEXT,
"sun" TEXT,
"water" TEXT,
"bloomStart" INTEGER,
"bloomEnd" INTEGER,
"harvestStart" INTEGER,
"harvestEnd" INTEGER,
"toxicToPets" BOOLEAN,
"edibleParts" TEXT,
"spacing" TEXT,
"imageUrl" TEXT,
"notes" TEXT,
"active" BOOLEAN NOT NULL DEFAULT true,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "PlantType_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "PlantType_commonName_idx" ON "PlantType"("commonName");
CREATE INDEX "PlantType_category_idx" ON "PlantType"("category");
CREATE INDEX "PlantType_active_idx" ON "PlantType"("active");
-- AlterTable: optional link from a planting to its kind
ALTER TABLE "Plant" ADD COLUMN "plantTypeId" TEXT;
-- CreateIndex
CREATE INDEX "Plant_plantTypeId_idx" ON "Plant"("plantTypeId");
-- AddForeignKey
ALTER TABLE "Plant" ADD CONSTRAINT "Plant_plantTypeId_fkey" FOREIGN KEY ("plantTypeId") REFERENCES "PlantType"("id") ON DELETE SET NULL ON UPDATE CASCADE;