diff --git a/alembic/versions/0032_add_task_timestamps.py b/alembic/versions/0032_add_task_timestamps.py new file mode 100644 index 0000000..fccd48f --- /dev/null +++ b/alembic/versions/0032_add_task_timestamps.py @@ -0,0 +1,19 @@ +"""Add started_at and completed_at to notes.""" + +from alembic import op +import sqlalchemy as sa + +revision = "0032" +down_revision = "0031" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.add_column("notes", sa.Column("started_at", sa.DateTime(timezone=True), nullable=True)) + op.add_column("notes", sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True)) + + +def downgrade() -> None: + op.drop_column("notes", "completed_at") + op.drop_column("notes", "started_at") diff --git a/src/fabledassistant/models/note.py b/src/fabledassistant/models/note.py index f1957dd..4fa6843 100644 --- a/src/fabledassistant/models/note.py +++ b/src/fabledassistant/models/note.py @@ -1,7 +1,7 @@ import enum -from datetime import date +from datetime import date, datetime -from sqlalchemy import Date, ForeignKey, Index, Integer, Text +from sqlalchemy import Date, DateTime, ForeignKey, Index, Integer, Text from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.orm import Mapped, mapped_column @@ -45,6 +45,8 @@ class Note(Base, TimestampMixin): status: Mapped[str | None] = mapped_column(Text, nullable=True) priority: Mapped[str | None] = mapped_column(Text, nullable=True) due_date: Mapped[date | None] = mapped_column(Date, nullable=True) + started_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) __table_args__ = ( Index("ix_notes_tags", "tags", postgresql_using="gin"), @@ -71,6 +73,8 @@ class Note(Base, TimestampMixin): "status": self.status, "priority": self.priority, "due_date": self.due_date.isoformat() if self.due_date else None, + "started_at": self.started_at.isoformat() if self.started_at else None, + "completed_at": self.completed_at.isoformat() if self.completed_at else None, "is_task": self.is_task, "created_at": self.created_at.isoformat(), "updated_at": self.updated_at.isoformat(),