Phase3 / src /models /task.py
mahmedmumair's picture
Deploy from GitHub commit 99fe6ce
4b4f221 verified
Raw
History Blame Contribute Delete
2.41 kB
from sqlmodel import Field, SQLModel
from datetime import datetime
from typing import Optional
import uuid
from .base import Base
from enum import Enum
class PriorityEnum(str, Enum):
low = "low"
medium = "medium"
high = "high"
class TaskBaseFields:
"""Fields for Task model."""
title: str = Field(min_length=1, max_length=200)
description: Optional[str] = Field(default=None, max_length=1000)
completed: bool = Field(default=False)
priority: PriorityEnum = Field(default=PriorityEnum.medium)
def get_current_time():
return datetime.utcnow()
def get_uuid():
return str(uuid.uuid4())
from sqlalchemy import Column, String, DateTime, Boolean
from sqlalchemy.sql import func
class Task(TaskBaseFields, Base, table=True):
"""Task model representing a user's todo item."""
__tablename__ = "tasks"
id: str = Field(default=get_uuid, sa_column=Column(String, primary_key=True))
user_id: str = Field(nullable=False) # Foreign key to user
created_at: datetime = Field(default=get_current_time, sa_column=Column(DateTime(timezone=True), server_default=func.now()))
updated_at: datetime = Field(default=get_current_time, sa_column=Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()))
def __init__(self, **kwargs):
# Generate ID if not provided
if 'id' not in kwargs or not kwargs.get('id'):
kwargs['id'] = get_uuid()
# Set timestamps if not provided
if 'created_at' not in kwargs or not kwargs.get('created_at'):
kwargs['created_at'] = get_current_time()
if 'updated_at' not in kwargs or not kwargs.get('updated_at'):
kwargs['updated_at'] = get_current_time()
super().__init__(**kwargs)
class TaskRead(TaskBaseFields, Base):
"""Schema for reading task data."""
id: str
user_id: str
created_at: datetime
updated_at: datetime
class TaskCreate(TaskBaseFields, Base):
"""Schema for creating a new task."""
user_id: Optional[str] = None # Will be set by the service to match the authenticated user
class TaskUpdate(SQLModel):
"""Schema for updating an existing task."""
title: Optional[str] = Field(default=None, min_length=1, max_length=200)
description: Optional[str] = Field(default=None, max_length=1000)
completed: Optional[bool] = None
priority: Optional[PriorityEnum] = None