30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
from datetime import datetime
|
|
from sqlalchemy import Boolean, Column, DateTime, Integer, String, Text
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.db.base_class import Base
|
|
|
|
|
|
class Task(Base):
|
|
"""Task model representing a to-do item"""
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
title = Column(String(255), nullable=False, index=True)
|
|
description = Column(Text, nullable=True)
|
|
is_completed = Column(Boolean, default=False)
|
|
|
|
# Priority: 1 (Low), 2 (Medium), 3 (High)
|
|
priority = Column(Integer, default=2)
|
|
|
|
# Audit timestamp fields
|
|
created_at = Column(DateTime, default=func.now(), nullable=False)
|
|
updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), nullable=False)
|
|
completed_at = Column(DateTime, nullable=True)
|
|
|
|
# Optional due date
|
|
due_date = Column(DateTime, nullable=True)
|
|
|
|
def mark_as_completed(self) -> None:
|
|
"""Mark the task as completed and set the completion timestamp"""
|
|
self.is_completed = True
|
|
self.completed_at = datetime.utcnow() |