mirror of
https://github.com/OHV-IT/collabrix.git
synced 2025-12-15 08:38:36 +01:00
Fix user-status endpoint: resolve TypeError from unhashable User objects in deduplication logic
This commit is contained in:
parent
382d4ac3f0
commit
9a557d28a2
@ -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]
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user