支持家庭成员显示名编辑
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user