支持家庭成员显示名编辑

This commit is contained in:
stu2not
2026-06-08 11:46:14 +08:00
parent dcff337f43
commit ac9d669107
10 changed files with 255 additions and 6 deletions

View File

@@ -16,6 +16,14 @@ class FamilyService(DatabaseServiceBase):
def __init__(self):
super().__init__(service_name="family_service")
def _normalize_display_name(self, display_name: str | None) -> str | None:
normalized = str(display_name or "").strip()
if not normalized:
return None
if len(normalized) > 64:
raise HTTPException(status_code=400, detail="display name must be 64 characters or fewer")
return normalized
async def ensure_device_access(self, *, device_id: str, user_id: int) -> Mapping:
db_session = await self.get_session()
try:
@@ -184,6 +192,39 @@ class FamilyService(DatabaseServiceBase):
finally:
await db_session.close()
async def update_member_display_name(
self,
*,
device_id: str,
member_user_id: int,
display_name: str | None,
user_id: int,
) -> Mapping:
normalized_display_name = self._normalize_display_name(display_name)
db_session = await self.get_session()
try:
dao = FamilyDAO(db_session)
owner_binding = await dao.get_binding_for_owner(device_id=device_id, user_id=user_id)
if owner_binding is None:
raise HTTPException(status_code=403, detail="only owner can edit family member display names")
member = await dao.update_member_display_name(
device_id=device_id,
member_user_id=member_user_id,
owner_user_id=user_id,
display_name=normalized_display_name,
)
if member is None:
raise HTTPException(status_code=404, detail="family member not found")
await db_session.commit()
return member
except Exception:
await db_session.rollback()
raise
finally:
await db_session.close()
async def leave_family(self, *, device_id: str, user_id: int) -> bool:
db_session = await self.get_session()
try: