todoappapi / recurrence.py
GrowWithTalha's picture
feat: sync backend changes from SDDRI-Hackathon-2
84c328d
"""Recurrence rule model for recurring tasks.
[Task]: T002
[From]: specs/008-advanced-features/tasks.md (Phase 1)
This module defines the RecurrenceRule Pydantic model used for
defining how tasks repeat (daily, weekly, monthly).
"""
from datetime import datetime
from typing import Optional, Literal
from pydantic import BaseModel, Field
class RecurrenceRule(BaseModel):
"""Defines how a task repeats.
Used for creating recurring tasks that automatically generate
new instances when completed.
Attributes:
frequency: How often the task repeats (daily, weekly, monthly)
interval: Repeat every N periods (default: 1)
count: Maximum number of occurrences (max 100)
end_date: Stop recurring after this date
Examples:
Daily forever: {"frequency": "daily"}
Weekly: {"frequency": "weekly"}
Every 2 weeks: {"frequency": "weekly", "interval": 2}
Monthly, 10 times: {"frequency": "monthly", "count": 10}
Daily until Dec 31: {"frequency": "daily", "end_date": "2026-12-31"}
"""
frequency: Literal['daily', 'weekly', 'monthly'] = Field(
...,
description="How often the task repeats"
)
interval: Optional[int] = Field(
default=1,
ge=1,
le=365,
description="Repeat every N periods (max 365, e.g., 2 = every 2 days)"
)
count: Optional[int] = Field(
default=None,
ge=1,
le=100,
description="Maximum number of occurrences (max 100)"
)
end_date: Optional[datetime] = Field(
default=None,
description="Stop recurring after this date"
)
model_config = {
"json_schema_extra": {
"examples": [
{"frequency": "daily"},
{"frequency": "weekly"},
{"frequency": "weekly", "interval": 2},
{"frequency": "monthly", "count": 10},
{"frequency": "daily", "interval": 1, "count": 30},
]
}
}