File size: 2,610 Bytes
cccf200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
RecurringTask model for recurring task management.
"""
from typing import Optional
from datetime import datetime
from sqlmodel import SQLModel, Field


class RecurringTask(SQLModel, table=True):
    """
    RecurringTask model for managing recurring tasks.

    Attributes:
        id: Unique identifier (auto-increment)
        user_id: Foreign key to user who owns this recurring task
        title: Task title
        description: Optional detailed description
        frequency: Recurrence frequency ('daily', 'weekly', 'monthly')
        frequency_value: Optional frequency value (e.g., day of week, day of month)
        is_active: Whether the recurring task is active
        last_generated: Timestamp when the last task instance was generated
        created_at: Timestamp when recurring task was created
        updated_at: Timestamp when recurring task was last modified
    """
    __tablename__ = "recurring_tasks"

    id: Optional[int] = Field(default=None, primary_key=True)
    user_id: int = Field(foreign_key="users.id", index=True)
    title: str = Field(max_length=200, min_length=1)
    description: Optional[str] = Field(default="", max_length=1000)
    frequency: str = Field(max_length=20)  # 'daily', 'weekly', 'monthly'
    frequency_value: Optional[int] = Field(default=None)  # Day of week (0-6) or day of month (1-31)
    is_active: bool = Field(default=True)
    last_generated: Optional[datetime] = Field(default=None)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow)


class RecurringTaskCreate(SQLModel):
    """Schema for creating a new recurring task."""
    title: str = Field(max_length=200, min_length=1)
    description: Optional[str] = Field(default="", max_length=1000)
    frequency: str  # 'daily', 'weekly', 'monthly'
    frequency_value: Optional[int] = None


class RecurringTaskUpdate(SQLModel):
    """Schema for updating a recurring task."""
    title: Optional[str] = Field(default=None, max_length=200, min_length=1)
    description: Optional[str] = Field(default=None, max_length=1000)
    frequency: Optional[str] = Field(default=None)
    frequency_value: Optional[int] = Field(default=None)
    is_active: Optional[bool] = Field(default=None)


class RecurringTaskResponse(SQLModel):
    """Schema for recurring task response."""
    id: int
    user_id: int
    title: str
    description: Optional[str]
    frequency: str
    frequency_value: Optional[int]
    is_active: bool
    last_generated: Optional[datetime]
    created_at: datetime
    updated_at: datetime