room notifications

This commit is contained in:
2025-05-31 22:58:31 +02:00
parent c452a920b1
commit 08a11c240d
4 changed files with 143 additions and 88 deletions

View File

@@ -69,36 +69,39 @@ def add_room_member(room_id):
permission.can_move = permissions.get('can_move', False) permission.can_move = permissions.get('can_move', False)
permission.can_share = permissions.get('can_share', 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 db.session.commit()
create_notification( return jsonify({'success': True})
notif_type='room_invite', except Exception as e:
user_id=user_id, db.session.rollback()
sender_id=current_user.id, return jsonify({'error': str(e)}), 500
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})
@room_members_bp.route('/<int:room_id>/members/<int:user_id>', methods=['DELETE']) @room_members_bp.route('/<int:room_id>/members/<int:user_id>', methods=['DELETE'])
@login_required @login_required
@@ -118,35 +121,38 @@ def remove_room_member(room_id, user_id):
if permission: if permission:
db.session.delete(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 db.session.commit()
create_notification( return jsonify({'success': True})
notif_type='room_invite_removed', except Exception as e:
user_id=user_id, db.session.rollback()
sender_id=current_user.id, return jsonify({'error': str(e)}), 500
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})
@room_members_bp.route('/<int:room_id>/members/<int:user_id>/permissions', methods=['PUT']) @room_members_bp.route('/<int:room_id>/members/<int:user_id>/permissions', methods=['PUT'])
@login_required @login_required
@@ -193,5 +199,7 @@ def update_member_permissions(room_id, user_id):
}, },
user_id=current_user.id user_id=current_user.id
) )
db.session.commit()
return jsonify({'success': True}) return jsonify({'success': True})

View File

@@ -4,9 +4,10 @@ from models import db, Room, User, RoomMemberPermission, RoomFile
from forms import RoomForm from forms import RoomForm
from routes.room_files import user_has_permission from routes.room_files import user_has_permission
from routes.auth import require_password_change from routes.auth import require_password_change
from utils import log_event from utils import log_event, create_notification
import os import os
import shutil import shutil
from datetime import datetime
rooms_bp = Blueprint('rooms', __name__, url_prefix='/rooms') 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 # Ensure user is added to the room.members relationship
if user not in room.members: if user not in room.members:
room.members.append(user) room.members.append(user)
db.session.commit()
log_event( try:
event_type='room_member_add', # Create notification for the invited user
details={ create_notification(
'room_id': room_id, notif_type='room_invite',
'room_name': room.name, user_id=user.id,
'added_user': f"{user.username} {user.last_name}", sender_id=current_user.id,
'added_by': f"{current_user.username} {current_user.last_name}" details={
}, 'message': f'You have been invited to join room "{room.name}"',
user_id=current_user.id 'room_id': room_id,
) 'room_name': room.name,
db.session.commit() 'invited_by': f"{current_user.username} {current_user.last_name}",
'permissions': {
flash(f'{user.username} has been added to the room.', 'success') '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)) return redirect(url_for('rooms.room_members', room_id=room_id))
@rooms_bp.route('/<int:room_id>/members/<int:user_id>/remove', methods=['POST']) @rooms_bp.route('/<int:room_id>/members/<int:user_id>/remove', methods=['POST'])
@@ -186,22 +215,40 @@ def remove_member(room_id, user_id):
flash('User is not a member of this room.', 'error') flash('User is not a member of this room.', 'error')
else: else:
user = User.query.get(user_id) user = User.query.get(user_id)
db.session.delete(perm) try:
db.session.commit() # Create notification for the removed user
create_notification(
log_event( notif_type='room_invite_removed',
event_type='room_member_remove', user_id=user_id,
details={ sender_id=current_user.id,
'room_id': room_id, details={
'room_name': room.name, 'message': f'You have been removed from room "{room.name}"',
'removed_user': f"{user.username} {user.last_name}", 'room_id': room_id,
'removed_by': f"{current_user.username} {current_user.last_name}" 'room_name': room.name,
}, 'removed_by': f"{current_user.username} {current_user.last_name}",
user_id=current_user.id 'timestamp': datetime.utcnow().isoformat()
) }
db.session.commit() )
flash('User has been removed from the room.', 'success') 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)) return redirect(url_for('rooms.room_members', room_id=room_id))
@rooms_bp.route('/<int:room_id>/members/<int:user_id>/permissions', methods=['POST']) @rooms_bp.route('/<int:room_id>/members/<int:user_id>/permissions', methods=['POST'])