mirror of
https://github.com/OHV-IT/collabrix.git
synced 2025-12-15 16:48: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)))
|
dept_statement = select(User).where(User.departments.any(Department.id.in_(dept_ids)))
|
||||||
department_users = session.exec(dept_statement).all()
|
department_users = session.exec(dept_statement).all()
|
||||||
|
|
||||||
# Get users with existing private chats (either as sender or receiver)
|
# Get users with existing private chats
|
||||||
chat_partners_statement = select(User).where(
|
# Find all direct messages where current user is sender or receiver
|
||||||
(User.id == DirectMessage.sender_id) | (User.id == DirectMessage.receiver_id)
|
dm_statement = select(DirectMessage).where(
|
||||||
).where(
|
|
||||||
(DirectMessage.sender_id == current_user.id) | (DirectMessage.receiver_id == current_user.id)
|
(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
|
# Remove current user from the list
|
||||||
all_users = [user for user in all_users if user.id != current_user.id]
|
all_users = [user for user in all_users if user.id != current_user.id]
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user