Fix user-status endpoint: resolve TypeError from unhashable User objects in deduplication logic

This commit is contained in:
DGSoft 2025-12-12 11:35:23 +01:00
parent 382d4ac3f0
commit 9a557d28a2

View File

@ -89,16 +89,44 @@ def get_user_statuses(session: Session = Depends(get_session), current_user: Use
dept_statement = select(User).where(User.departments.any(Department.id.in_(dept_ids)))
department_users = session.exec(dept_statement).all()
# Get users with existing private chats (either as sender or receiver)
chat_partners_statement = select(User).where(
(User.id == DirectMessage.sender_id) | (User.id == DirectMessage.receiver_id)
).where(
# Get users with existing private chats
# Find all direct messages where current user is sender or receiver
dm_statement = select(DirectMessage).where(
(DirectMessage.sender_id == current_user.id) | (DirectMessage.receiver_id == current_user.id)
).distinct()
chat_partners = session.exec(chat_partners_statement).all()
)
direct_messages = session.exec(dm_statement).all()
# Extract unique user IDs (excluding current user)
chat_partner_ids = set()
for dm in direct_messages:
if dm.sender_id != current_user.id:
chat_partner_ids.add(dm.sender_id)
if dm.receiver_id != current_user.id:
chat_partner_ids.add(dm.receiver_id)
# Get chat partner users
if chat_partner_ids:
chat_partners_statement = select(User).where(User.id.in_(chat_partner_ids))
chat_partners = session.exec(chat_partners_statement).all()
else:
chat_partners = []
# Combine and deduplicate users by ID
all_user_ids = set()
all_users = []
# Add department users
for user in department_users:
if user.id not in all_user_ids:
all_user_ids.add(user.id)
all_users.append(user)
# Add chat partners
for user in chat_partners:
if user.id not in all_user_ids:
all_user_ids.add(user.id)
all_users.append(user)
# Combine and deduplicate users
all_users = list(set(department_users + chat_partners))
# Remove current user from the list
all_users = [user for user in all_users if user.id != current_user.id]