refactor: simplify code - extract constants, reduce complexity

This commit is contained in:
qzl
2026-02-28 12:48:01 +08:00
parent ce8cd1d31f
commit c22692ed1d
5 changed files with 25 additions and 51 deletions
+1 -11
View File
@@ -38,17 +38,7 @@ async def list_schedule_items(
) -> list[ScheduleItemListItem]:
request = ScheduleItemListRequest(start_at=start_at, end_at=end_at)
items = await service.list_by_date_range(request)
return [
ScheduleItemListItem(
id=item.id,
title=item.title,
start_at=item.start_at,
end_at=item.end_at,
timezone=item.timezone,
status=item.status,
)
for item in items
]
return [ScheduleItemListItem.model_validate(item) for item in items]
@router.get("/{item_id}", response_model=ScheduleItemResponse)
+9 -3
View File
@@ -98,6 +98,12 @@ class ScheduleItemListRequest(BaseModel):
end_at: datetime
# Permission bit constants (matching PermissionBits in inbox_messages/schemas.py)
_PERMISSION_VIEW = 1 # 001
_PERMISSION_INVITE = 2 # 010
_PERMISSION_EDIT = 4 # 100
class ScheduleItemShareRequest(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
@@ -109,11 +115,11 @@ class ScheduleItemShareRequest(BaseModel):
def _permission_value(self) -> int:
value = 0
if self.permission_view:
value |= 1
value |= _PERMISSION_VIEW
if self.permission_edit:
value |= 4
value |= _PERMISSION_EDIT
if self.permission_invite:
value |= 2
value |= _PERMISSION_INVITE
return value
+9 -19
View File
@@ -112,26 +112,16 @@ class ScheduleItemService(BaseService):
if existing is None:
raise HTTPException(status_code=404, detail="Schedule item not found")
update_data: dict = {}
if request.title is not None:
update_data["title"] = request.title
if request.description is not None:
update_data["description"] = request.description
if request.start_at is not None:
update_data["start_at"] = request.start_at
if request.end_at is not None:
update_data["end_at"] = request.end_at
if request.timezone is not None:
update_data["timezone"] = request.timezone
if request.status is not None:
update_data["status"] = request.status
if request.metadata is not None:
update_data["metadata"] = request.metadata.model_dump()
# Build update dict from non-null fields
update_data = request.model_dump(exclude_unset=True)
next_start = (
request.start_at if request.start_at is not None else existing.start_at
)
next_end = request.end_at if request.end_at is not None else existing.end_at
# Handle metadata separately (model_dump returns dict)
if "metadata" in update_data and update_data["metadata"] is not None:
update_data["metadata"] = update_data["metadata"].model_dump()
# Validate time range
next_start = update_data.get("start_at", existing.start_at)
next_end = update_data.get("end_at", existing.end_at)
if next_end is not None and next_end <= next_start:
raise HTTPException(
status_code=400, detail="end_at must be after start_at"