from flask import Blueprint, jsonify from flask_login import login_required, current_user from models import db, Room, RoomFile, User import os from datetime import datetime admin = Blueprint('admin', __name__) @admin.route('/api/admin/sync-files', methods=['POST']) @login_required def sync_files(): if not current_user.is_admin: return jsonify({'error': 'Unauthorized'}), 403 try: DATA_ROOT = '/data/rooms' admin_user = User.query.filter_by(is_admin=True).first() if not admin_user: return jsonify({'error': 'No admin user found'}), 500 rooms = Room.query.all() for room in rooms: room_dir = os.path.join(DATA_ROOT, str(room.id)) if not os.path.exists(room_dir): continue for root, dirs, files in os.walk(room_dir): rel_root = os.path.relpath(root, room_dir) rel_path = '' if rel_root == '.' else rel_root.replace('\\', '/') # Folders for d in dirs: exists = RoomFile.query.filter_by(room_id=room.id, name=d, path=rel_path, type='folder').first() folder_path = os.path.join(root, d) stat = os.stat(folder_path) if not exists: rf = RoomFile( room_id=room.id, name=d, path=rel_path, type='folder', size=None, modified=stat.st_mtime, uploaded_by=admin_user.id, uploaded_at=datetime.utcfromtimestamp(stat.st_mtime) ) db.session.add(rf) # Files for f in files: exists = RoomFile.query.filter_by(room_id=room.id, name=f, path=rel_path, type='file').first() file_path = os.path.join(root, f) stat = os.stat(file_path) if not exists: rf = RoomFile( room_id=room.id, name=f, path=rel_path, type='file', size=stat.st_size, modified=stat.st_mtime, uploaded_by=admin_user.id, uploaded_at=datetime.utcfromtimestamp(stat.st_mtime) ) db.session.add(rf) db.session.commit() return jsonify({'success': True, 'message': 'File system synchronized successfully'}) except Exception as e: db.session.rollback() return jsonify({'error': str(e)}), 500