42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from sqlalchemy import Column, String, Text, DateTime, Enum
|
|
from datetime import datetime
|
|
import enum
|
|
|
|
from app.models.base import BaseModel
|
|
|
|
class TaskStatus(str, enum.Enum):
|
|
"""Task status enum."""
|
|
TODO = "todo"
|
|
IN_PROGRESS = "in_progress"
|
|
COMPLETED = "completed"
|
|
CANCELLED = "cancelled"
|
|
|
|
class TaskPriority(str, enum.Enum):
|
|
"""Task priority enum."""
|
|
LOW = "low"
|
|
MEDIUM = "medium"
|
|
HIGH = "high"
|
|
|
|
class Task(BaseModel):
|
|
"""Task model for task management."""
|
|
title = Column(String(200), index=True, nullable=False)
|
|
description = Column(Text, nullable=True)
|
|
due_date = Column(DateTime, nullable=True)
|
|
status = Column(
|
|
Enum(TaskStatus),
|
|
default=TaskStatus.TODO,
|
|
nullable=False,
|
|
index=True
|
|
)
|
|
priority = Column(
|
|
Enum(TaskPriority),
|
|
default=TaskPriority.MEDIUM,
|
|
nullable=False,
|
|
index=True
|
|
)
|
|
completed_at = Column(DateTime, nullable=True)
|
|
|
|
def mark_as_completed(self):
|
|
"""Mark the task as completed."""
|
|
self.status = TaskStatus.COMPLETED
|
|
self.completed_at = datetime.utcnow() |