fix: address code review issues and improve code quality

- Add owner_id check in repository delete operation
- Fix time range validation for partial updates
- Wrap pre-query in try/except for consistent error handling
- Use default_factory instead of mutable defaults
- Add max_length constraint for timezone field
- Remove unused dependencies and empty validators
- Extract magic numbers to constants
- Simplify update logic with model_dump
This commit is contained in:
qzl
2026-02-28 11:29:06 +08:00
parent 50b38de488
commit 9b48939de8
4 changed files with 53 additions and 48 deletions
+5 -10
View File
@@ -5,7 +5,7 @@ from enum import Enum
from typing import ClassVar
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field, field_validator
from pydantic import BaseModel, ConfigDict, Field
class AttachmentType(str, Enum):
@@ -16,7 +16,7 @@ class AttachmentType(str, Enum):
class ScheduleItemMetadataAttachment(BaseModel):
name: str
type: AttachmentType
visible_to: list[UUID] = []
visible_to: list[UUID] = Field(default_factory=list)
url: str | None = None
note: str | None = None
content: str | None = None
@@ -26,7 +26,7 @@ class ScheduleItemMetadata(BaseModel):
color: str | None = None
location: str | None = None
notes: str | None = None
attachments: list[ScheduleItemMetadataAttachment] = []
attachments: list[ScheduleItemMetadataAttachment] = Field(default_factory=list)
version: int = 1
@@ -50,7 +50,7 @@ class ScheduleItemCreateRequest(BaseModel):
description: str | None = Field(default=None, max_length=2000)
start_at: datetime
end_at: datetime | None = None
timezone: str = "UTC"
timezone: str = Field(default="UTC", max_length=50)
metadata: ScheduleItemMetadata | None = None
@@ -61,15 +61,10 @@ class ScheduleItemUpdateRequest(BaseModel):
description: str | None = Field(default=None, max_length=2000)
start_at: datetime | None = None
end_at: datetime | None = None
timezone: str | None = None
timezone: str | None = Field(default=None, max_length=50)
metadata: ScheduleItemMetadata | None = None
status: ScheduleItemStatus | None = None
@field_validator("end_at", mode="before")
@classmethod
def validate_end_at(cls, v: datetime | None, info) -> datetime | None:
return v
class ScheduleItemResponse(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True)