diff --git a/routes/__pycache__/room_members.cpython-313.pyc b/routes/__pycache__/room_members.cpython-313.pyc index 70dda33..1a7cb40 100644 Binary files a/routes/__pycache__/room_members.cpython-313.pyc and b/routes/__pycache__/room_members.cpython-313.pyc differ diff --git a/routes/__pycache__/rooms.cpython-313.pyc b/routes/__pycache__/rooms.cpython-313.pyc index e229609..c2ec82d 100644 Binary files a/routes/__pycache__/rooms.cpython-313.pyc and b/routes/__pycache__/rooms.cpython-313.pyc differ diff --git a/routes/room_members.py b/routes/room_members.py index 7a10312..bbeec56 100644 --- a/routes/room_members.py +++ b/routes/room_members.py @@ -69,36 +69,39 @@ def add_room_member(room_id): permission.can_move = permissions.get('can_move', False) permission.can_share = permissions.get('can_share', False) - db.session.commit() + try: + # Create notification for the invited user + create_notification( + notif_type='room_invite', + user_id=user_id, + sender_id=current_user.id, + details={ + 'message': f'You have been invited to join room "{room.name}"', + 'room_id': room_id, + 'room_name': room.name, + 'invited_by': f"{current_user.username} {current_user.last_name}", + 'permissions': permissions, + 'timestamp': datetime.utcnow().isoformat() + } + ) + + log_event( + event_type='room_member_add', + details={ + 'room_id': room_id, + 'room_name': room.name, + 'added_user_id': user_id, + 'added_user_name': f"{user.username} {user.last_name}", + 'added_by': f"{current_user.username} {current_user.last_name}" + }, + user_id=current_user.id + ) - # Create notification for the invited user - create_notification( - notif_type='room_invite', - user_id=user_id, - sender_id=current_user.id, - details={ - 'message': f'You have been invited to join room "{room.name}"', - 'room_id': room_id, - 'room_name': room.name, - 'invited_by': f"{current_user.username} {current_user.last_name}", - 'permissions': permissions, - 'timestamp': datetime.utcnow().isoformat() - } - ) - - log_event( - event_type='room_member_add', - details={ - 'room_id': room_id, - 'room_name': room.name, - 'added_user_id': user_id, - 'added_user_name': f"{user.username} {user.last_name}", - 'added_by': f"{current_user.username} {current_user.last_name}" - }, - user_id=current_user.id - ) - - return jsonify({'success': True}) + db.session.commit() + return jsonify({'success': True}) + except Exception as e: + db.session.rollback() + return jsonify({'error': str(e)}), 500 @room_members_bp.route('//members/', methods=['DELETE']) @login_required @@ -118,35 +121,38 @@ def remove_room_member(room_id, user_id): if permission: db.session.delete(permission) - db.session.commit() + try: + # Create notification for the removed user + create_notification( + notif_type='room_invite_removed', + user_id=user_id, + sender_id=current_user.id, + details={ + 'message': f'You have been removed from room "{room.name}"', + 'room_id': room_id, + 'room_name': room.name, + 'removed_by': f"{current_user.username} {current_user.last_name}", + 'timestamp': datetime.utcnow().isoformat() + } + ) + + log_event( + event_type='room_member_remove', + details={ + 'room_id': room_id, + 'room_name': room.name, + 'removed_user_id': user_id, + 'removed_user_name': f"{user.username} {user.last_name}", + 'removed_by': f"{current_user.username} {current_user.last_name}" + }, + user_id=current_user.id + ) - # Create notification for the removed user - create_notification( - notif_type='room_invite_removed', - user_id=user_id, - sender_id=current_user.id, - details={ - 'message': f'You have been removed from room "{room.name}"', - 'room_id': room_id, - 'room_name': room.name, - 'removed_by': f"{current_user.username} {current_user.last_name}", - 'timestamp': datetime.utcnow().isoformat() - } - ) - - log_event( - event_type='room_member_remove', - details={ - 'room_id': room_id, - 'room_name': room.name, - 'removed_user_id': user_id, - 'removed_user_name': f"{user.username} {user.last_name}", - 'removed_by': f"{current_user.username} {current_user.last_name}" - }, - user_id=current_user.id - ) - - return jsonify({'success': True}) + db.session.commit() + return jsonify({'success': True}) + except Exception as e: + db.session.rollback() + return jsonify({'error': str(e)}), 500 @room_members_bp.route('//members//permissions', methods=['PUT']) @login_required @@ -193,5 +199,7 @@ def update_member_permissions(room_id, user_id): }, user_id=current_user.id ) + + db.session.commit() return jsonify({'success': True}) \ No newline at end of file diff --git a/routes/rooms.py b/routes/rooms.py index e4793e1..42c799b 100644 --- a/routes/rooms.py +++ b/routes/rooms.py @@ -4,9 +4,10 @@ from models import db, Room, User, RoomMemberPermission, RoomFile from forms import RoomForm from routes.room_files import user_has_permission from routes.auth import require_password_change -from utils import log_event +from utils import log_event, create_notification import os import shutil +from datetime import datetime rooms_bp = Blueprint('rooms', __name__, url_prefix='/rooms') @@ -148,21 +149,49 @@ def add_member(room_id): # Ensure user is added to the room.members relationship if user not in room.members: room.members.append(user) - db.session.commit() - log_event( - event_type='room_member_add', - details={ - 'room_id': room_id, - 'room_name': room.name, - 'added_user': f"{user.username} {user.last_name}", - 'added_by': f"{current_user.username} {current_user.last_name}" - }, - user_id=current_user.id - ) - db.session.commit() - - flash(f'{user.username} has been added to the room.', 'success') + try: + # Create notification for the invited user + create_notification( + notif_type='room_invite', + user_id=user.id, + sender_id=current_user.id, + details={ + 'message': f'You have been invited to join room "{room.name}"', + 'room_id': room_id, + 'room_name': room.name, + 'invited_by': f"{current_user.username} {current_user.last_name}", + 'permissions': { + 'can_view': True, + 'can_download': False, + 'can_upload': False, + 'can_delete': False, + 'can_rename': False, + 'can_move': False, + 'can_share': False + }, + 'timestamp': datetime.utcnow().isoformat() + } + ) + + log_event( + event_type='room_member_add', + details={ + 'room_id': room_id, + 'room_name': room.name, + 'added_user': f"{user.username} {user.last_name}", + 'added_by': f"{current_user.username} {current_user.last_name}" + }, + user_id=current_user.id + ) + + db.session.commit() + flash(f'{user.username} has been added to the room.', 'success') + except Exception as e: + db.session.rollback() + flash('An error occurred while adding the member.', 'error') + print(f"Error adding member: {str(e)}") + return redirect(url_for('rooms.room_members', room_id=room_id)) @rooms_bp.route('//members//remove', methods=['POST']) @@ -186,22 +215,40 @@ def remove_member(room_id, user_id): flash('User is not a member of this room.', 'error') else: user = User.query.get(user_id) - db.session.delete(perm) - db.session.commit() - - log_event( - event_type='room_member_remove', - details={ - 'room_id': room_id, - 'room_name': room.name, - 'removed_user': f"{user.username} {user.last_name}", - 'removed_by': f"{current_user.username} {current_user.last_name}" - }, - user_id=current_user.id - ) - db.session.commit() - - flash('User has been removed from the room.', 'success') + try: + # Create notification for the removed user + create_notification( + notif_type='room_invite_removed', + user_id=user_id, + sender_id=current_user.id, + details={ + 'message': f'You have been removed from room "{room.name}"', + 'room_id': room_id, + 'room_name': room.name, + 'removed_by': f"{current_user.username} {current_user.last_name}", + 'timestamp': datetime.utcnow().isoformat() + } + ) + + log_event( + event_type='room_member_remove', + details={ + 'room_id': room_id, + 'room_name': room.name, + 'removed_user': f"{user.username} {user.last_name}", + 'removed_by': f"{current_user.username} {current_user.last_name}" + }, + user_id=current_user.id + ) + + db.session.delete(perm) + db.session.commit() + flash('User has been removed from the room.', 'success') + except Exception as e: + db.session.rollback() + flash('An error occurred while removing the member.', 'error') + print(f"Error removing member: {str(e)}") + return redirect(url_for('rooms.room_members', room_id=room_id)) @rooms_bp.route('//members//permissions', methods=['POST'])