Kyle Pope 4169c245c2 Global enhancements: none priority, optional remind_at, required labels, textarea flex, remove color picker
- Add "none" priority (grey) to task/todo schemas, types, and all priority color maps
- Make remind_at optional on reminders (schema, model, migration 010)
- Add required prop to Label component with red asterisk indicator
- Add invalid:ring-red-500 to Input, Select, Textarea base classes
- Mark mandatory fields with required labels across all forms
- Replace fixed textarea rows with min-h + flex-1 for auto-expand
- Remove color picker from ProjectForm
- Align TaskRow metadata into fixed-width columns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 11:58:19 +08:00

44 lines
1.1 KiB
Python

from pydantic import BaseModel, ConfigDict
from datetime import datetime, date
from typing import Optional, Literal
TodoPriority = Literal["none", "low", "medium", "high"]
class TodoCreate(BaseModel):
title: str
description: Optional[str] = None
priority: TodoPriority = "medium"
due_date: Optional[date] = None
category: Optional[str] = None
recurrence_rule: Optional[str] = None
project_id: Optional[int] = None
class TodoUpdate(BaseModel):
title: Optional[str] = None
description: Optional[str] = None
priority: Optional[TodoPriority] = None
due_date: Optional[date] = None
completed: Optional[bool] = None
category: Optional[str] = None
recurrence_rule: Optional[str] = None
project_id: Optional[int] = None
class TodoResponse(BaseModel):
id: int
title: str
description: Optional[str]
priority: str
due_date: Optional[date]
completed: bool
completed_at: Optional[datetime]
category: Optional[str]
recurrence_rule: Optional[str]
project_id: Optional[int]
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)