Initial commit: Sproutly plant tracking app
This commit is contained in:
98
backend/models.py
Normal file
98
backend/models.py
Normal file
@@ -0,0 +1,98 @@
|
||||
import enum
|
||||
from sqlalchemy import Column, Integer, String, Date, Boolean, Text, DateTime, Enum, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
from database import Base
|
||||
|
||||
|
||||
class Category(str, enum.Enum):
|
||||
vegetable = "vegetable"
|
||||
herb = "herb"
|
||||
flower = "flower"
|
||||
fruit = "fruit"
|
||||
|
||||
|
||||
class SunRequirement(str, enum.Enum):
|
||||
full_sun = "full_sun"
|
||||
part_shade = "part_shade"
|
||||
full_shade = "full_shade"
|
||||
|
||||
|
||||
class WaterNeeds(str, enum.Enum):
|
||||
low = "low"
|
||||
medium = "medium"
|
||||
high = "high"
|
||||
|
||||
|
||||
class BatchStatus(str, enum.Enum):
|
||||
planned = "planned"
|
||||
germinating = "germinating"
|
||||
seedling = "seedling"
|
||||
potted_up = "potted_up"
|
||||
hardening = "hardening"
|
||||
garden = "garden"
|
||||
harvested = "harvested"
|
||||
failed = "failed"
|
||||
|
||||
|
||||
class Variety(Base):
|
||||
__tablename__ = "varieties"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
name = Column(String(100), nullable=False)
|
||||
variety_name = Column(String(100))
|
||||
category = Column(Enum(Category), default=Category.vegetable)
|
||||
weeks_to_start = Column(Integer)
|
||||
weeks_to_greenhouse = Column(Integer)
|
||||
weeks_to_garden = Column(Integer)
|
||||
days_to_germinate = Column(Integer, default=7)
|
||||
direct_sow_ok = Column(Boolean, default=False)
|
||||
frost_tolerant = Column(Boolean, default=False)
|
||||
sun_requirement = Column(Enum(SunRequirement), default=SunRequirement.full_sun)
|
||||
water_needs = Column(Enum(WaterNeeds), default=WaterNeeds.medium)
|
||||
color = Column(String(7), default="#52b788")
|
||||
notes = Column(Text)
|
||||
created_at = Column(DateTime, server_default=func.now())
|
||||
|
||||
batches = relationship("Batch", back_populates="variety", cascade="all, delete-orphan")
|
||||
|
||||
|
||||
class Batch(Base):
|
||||
__tablename__ = "batches"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
variety_id = Column(Integer, ForeignKey("varieties.id"), nullable=False)
|
||||
label = Column(String(100))
|
||||
quantity = Column(Integer, default=1)
|
||||
sow_date = Column(Date)
|
||||
germination_date = Column(Date)
|
||||
greenhouse_date = Column(Date)
|
||||
garden_date = Column(Date)
|
||||
status = Column(Enum(BatchStatus), default=BatchStatus.planned)
|
||||
notes = Column(Text)
|
||||
created_at = Column(DateTime, server_default=func.now())
|
||||
|
||||
variety = relationship("Variety", back_populates="batches")
|
||||
|
||||
|
||||
class Settings(Base):
|
||||
__tablename__ = "settings"
|
||||
|
||||
id = Column(Integer, primary_key=True, default=1)
|
||||
last_frost_date = Column(Date)
|
||||
first_frost_fall_date = Column(Date)
|
||||
ntfy_topic = Column(String(200))
|
||||
ntfy_server = Column(String(200), default="https://ntfy.sh")
|
||||
notification_time = Column(String(5), default="07:00")
|
||||
timezone = Column(String(50), default="UTC")
|
||||
location_name = Column(String(100))
|
||||
|
||||
|
||||
class NotificationLog(Base):
|
||||
__tablename__ = "notification_log"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
sent_at = Column(DateTime, server_default=func.now())
|
||||
message = Column(Text)
|
||||
status = Column(String(20))
|
||||
error = Column(Text)
|
||||
Reference in New Issue
Block a user