From 7d42ecbfada9822f3d834f6dbee82238a1272150 Mon Sep 17 00:00:00 2001 From: fullsizemalt <106900403+fullsizemalt@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:06:16 -0800 Subject: [PATCH] feat: Daily Walkthrough Database Schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🔴 Phase 1.5: Daily Operations for 777 Wolfpack ✅ Database Schema Complete: - DailyWalkthrough model (parent walkthrough session) - ReservoirCheck model (tank levels, veg/flower) - IrrigationCheck model (drippers, water flow, nutrients, 4 zones) - PlantHealthCheck model (pests, water/food access, photos) 📊 New Enums: - WalkthroughStatus (IN_PROGRESS, COMPLETED, INCOMPLETE) - TankType (VEG, FLOWER) - TankStatus (OK, LOW, CRITICAL) - HealthStatus (GOOD, FAIR, NEEDS_ATTENTION) - AccessStatus (OK, ISSUES) 🔗 Relationships: - User → DailyWalkthrough (one-to-many) - DailyWalkthrough → ReservoirCheck (one-to-many, cascade delete) - DailyWalkthrough → IrrigationCheck (one-to-many, cascade delete) - DailyWalkthrough → PlantHealthCheck (one-to-many, cascade delete) 📝 Features: - Photo URLs for all check types - JSON storage for failed dripper IDs - Cascade delete (cleanup on walkthrough deletion) - Timestamps for audit trail - Status tracking (in progress → completed) ⏭️ Next: Migration + Backend API endpoints Migration Command (run on deployment): npx prisma migrate dev --name add_daily_walkthrough --- backend/prisma/schema.prisma | 108 +++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index ee53b42..979695f 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -30,6 +30,35 @@ enum TaskStatus { BLOCKED } +// Daily Walkthrough Enums +enum WalkthroughStatus { + IN_PROGRESS + COMPLETED + INCOMPLETE +} + +enum TankType { + VEG + FLOWER +} + +enum TankStatus { + OK + LOW + CRITICAL +} + +enum HealthStatus { + GOOD + FAIR + NEEDS_ATTENTION +} + +enum AccessStatus { + OK + ISSUES +} + model User { id String @id @default(uuid()) email String @unique @@ -42,6 +71,7 @@ model User { tasks TaskInstance[] timeLogs TimeLog[] + walkthroughs DailyWalkthrough[] @@map("users") } @@ -133,3 +163,81 @@ model TimeLog { @@map("time_logs") } + +// Daily Walkthrough Models +model DailyWalkthrough { + id String @id @default(uuid()) + date DateTime @default(now()) + completedBy String + user User @relation(fields: [completedBy], references: [id]) + startTime DateTime @default(now()) + endTime DateTime? + status WalkthroughStatus @default(IN_PROGRESS) + + reservoirChecks ReservoirCheck[] + irrigationChecks IrrigationCheck[] + plantHealthChecks PlantHealthCheck[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("daily_walkthroughs") +} + +model ReservoirCheck { + id String @id @default(uuid()) + walkthroughId String + walkthrough DailyWalkthrough @relation(fields: [walkthroughId], references: [id], onDelete: Cascade) + + tankName String + tankType TankType + levelPercent Int + status TankStatus + photoUrl String? + notes String? + + createdAt DateTime @default(now()) + + @@map("reservoir_checks") +} + +model IrrigationCheck { + id String @id @default(uuid()) + walkthroughId String + walkthrough DailyWalkthrough @relation(fields: [walkthroughId], references: [id], onDelete: Cascade) + + zoneName String // "Veg Upstairs", "Veg Downstairs", "Flower Upstairs", "Flower Downstairs" + drippersTotal Int + drippersWorking Int + drippersFailed String? // JSON array of failed dripper IDs + waterFlow Boolean + nutrientsMixed Boolean + scheduleActive Boolean + photoUrl String? // Photo of working system + issues String? + + createdAt DateTime @default(now()) + + @@map("irrigation_checks") +} + +model PlantHealthCheck { + id String @id @default(uuid()) + walkthroughId String + walkthrough DailyWalkthrough @relation(fields: [walkthroughId], references: [id], onDelete: Cascade) + + zoneName String + healthStatus HealthStatus + pestsObserved Boolean + pestType String? + waterAccess AccessStatus + foodAccess AccessStatus + flaggedForAttention Boolean @default(false) + issuePhotoUrl String? + referencePhotoUrl String? // Photo of healthy system + notes String? + + createdAt DateTime @default(now()) + + @@map("plant_health_checks") +}