Todo_App / models /task.py
Abdullahcoder54's picture
push
6a3de9e
from sqlmodel import SQLModel, Field, Relationship
from typing import Optional
from enum import Enum
from datetime import datetime
from .user import User
class PriorityEnum(str, Enum):
high = "high"
medium = "medium"
low = "low"
class TaskBase(SQLModel):
title: str = Field(nullable=False, max_length=255)
description: Optional[str] = Field(default=None, max_length=1000)
completed: Optional[bool] = Field(default=False) # Made optional to match frontend
priority: Optional[PriorityEnum] = Field(default=None) # Changed default to None to match frontend
due_date: Optional[str] = Field(default=None, max_length=50) # Changed from datetime to string to match frontend, added max_length for DB
class Task(TaskBase, table=True):
"""
Represents a user's todo item with properties for content, status, and ownership.
"""
id: Optional[int] = Field(default=None, primary_key=True)
user_id: int = Field(foreign_key="users.id", nullable=False) # Updated to match new table name
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
# Relationship to User
user: Optional[User] = Relationship(back_populates="tasks")
class TaskCreate(TaskBase):
"""Schema for creating a new task."""
# Explicitly define fields to ensure they're properly inherited
title: str
description: Optional[str] = None
completed: Optional[bool] = False
priority: Optional[PriorityEnum] = None
due_date: Optional[str] = Field(default=None, max_length=50)
class TaskRead(TaskBase):
"""Schema for reading task data."""
id: int
user_id: int
created_at: datetime
updated_at: datetime
priority: Optional[PriorityEnum] = None # Explicitly include new field
due_date: Optional[str] = Field(default=None, max_length=50) # Changed from datetime to string to match frontend
class TaskUpdate(SQLModel):
title: Optional[str] = None
description: Optional[str] = None
priority: Optional[str] = None
completed: Optional[bool] = None
due_date: Optional[datetime] = None
class TaskComplete(SQLModel):
"""Schema for updating task completion status."""
completed: bool