PYTHON
models.py🐍python
"""
SQLAlchemy ORM models.
"""
from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, Enum
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from .database import Base
import enum
class TaskPriority(str, enum.Enum):
"""Task priority levels."""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class User(Base):
"""User model for authentication."""
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
username = Column(String, unique=True, index=True, nullable=False)
hashed_password = Column(String, nullable=False)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
# Relationship to tasks
tasks = relationship("Task", back_populates="owner", cascade="all, delete-orphan")
def __repr__(self):
return f"<User {self.username}>"
class Task(Base):
"""Task model."""
__tablename__ = "tasks"
id = Column(Integer, primary_key=True, index=True)
title = Column(String(200), nullable=False)
description = Column(String(1000), nullable=True)
completed = Column(Boolean, default=False)
priority = Column(String, default=TaskPriority.MEDIUM)
category = Column(String(50), nullable=True)
due_date = Column(DateTime(timezone=True), nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# Foreign key to user
owner_id = Column(Integer, ForeignKey("users.id"), nullable=False)
# Relationship to user
owner = relationship("User", back_populates="tasks")
def __repr__(self):
return f"<Task {self.title}>"