Spaces:
Sleeping
Sleeping
File size: 2,407 Bytes
4b4f221 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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 |