Add version history for shared environments
This commit is contained in:
@@ -415,3 +415,85 @@ def unlink_function(env_id):
|
||||
except Exception as e:
|
||||
return jsonify({'status': 'error', 'message': str(e)}), 500
|
||||
|
||||
@shared_env.route('/<int:env_id>/history', methods=['GET'])
|
||||
@login_required
|
||||
def history(env_id):
|
||||
"""Get version history for a shared environment"""
|
||||
try:
|
||||
# Verify ownership
|
||||
existing = db.execute(
|
||||
'SELECT id, name FROM shared_environments WHERE id=%s AND user_id=%s',
|
||||
[env_id, current_user.id],
|
||||
one=True
|
||||
)
|
||||
|
||||
if not existing:
|
||||
return jsonify({'status': 'error', 'message': 'Shared environment not found'}), 404
|
||||
|
||||
# Fetch all versions
|
||||
versions = db.execute('''
|
||||
SELECT version_number, environment, versioned_at
|
||||
FROM shared_environment_versions
|
||||
WHERE shared_env_id = %s
|
||||
ORDER BY version_number DESC
|
||||
''', [env_id])
|
||||
|
||||
# Convert datetime objects to ISO format strings
|
||||
for version in versions or []:
|
||||
version['versioned_at'] = version['versioned_at'].isoformat() if version.get('versioned_at') else None
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'env_name': existing['name'],
|
||||
'versions': versions if versions else []
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({'status': 'error', 'message': str(e)}), 500
|
||||
|
||||
@shared_env.route('/<int:env_id>/restore', methods=['POST'])
|
||||
@login_required
|
||||
def restore(env_id):
|
||||
"""Restore a shared environment to a previous version"""
|
||||
try:
|
||||
version_number = request.json.get('version_number')
|
||||
|
||||
if not version_number:
|
||||
return jsonify({'status': 'error', 'message': 'Version number is required'}), 400
|
||||
|
||||
# Verify ownership
|
||||
existing = db.execute(
|
||||
'SELECT id, name FROM shared_environments WHERE id=%s AND user_id=%s',
|
||||
[env_id, current_user.id],
|
||||
one=True
|
||||
)
|
||||
|
||||
if not existing:
|
||||
return jsonify({'status': 'error', 'message': 'Shared environment not found'}), 404
|
||||
|
||||
# Fetch the selected version's environment data
|
||||
version_data = db.execute(
|
||||
'SELECT environment FROM shared_environment_versions WHERE shared_env_id=%s AND version_number=%s',
|
||||
[env_id, version_number],
|
||||
one=True
|
||||
)
|
||||
|
||||
if not version_data:
|
||||
return jsonify({'status': 'error', 'message': 'Version not found'}), 404
|
||||
|
||||
# Update the shared environment with the old version's data
|
||||
# This will trigger the versioning function to create a new version
|
||||
db.execute(
|
||||
'UPDATE shared_environments SET environment=%s, updated_at=NOW() WHERE id=%s',
|
||||
[json.dumps(version_data['environment']), env_id],
|
||||
commit=True
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'message': f'Restored to version {version_number}'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({'status': 'error', 'message': str(e)}), 500
|
||||
|
||||
|
||||
Reference in New Issue
Block a user