Files

165 lines
6.1 KiB
Python

import os
import requests
from flask import Flask, request, jsonify
from flask_cors import CORS
import logging
app = Flask(__name__)
CORS(app)
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Function service URLs
UPLOAD_SERVICE_URL = os.getenv('UPLOAD_SERVICE_URL', 'http://function-upload:5000')
TRANSFORM_SERVICE_URL = os.getenv('TRANSFORM_SERVICE_URL', 'http://function-transform:5000')
DOWNLOAD_SERVICE_URL = os.getenv('DOWNLOAD_SERVICE_URL', 'http://function-download:5000')
METADATA_SERVICE_URL = os.getenv('METADATA_SERVICE_URL', 'http://function-metadata:5000')
@app.route('/health', methods=['GET'])
def health_check():
"""Health check endpoint."""
return jsonify({'status': 'healthy', 'service': 'api-gateway'})
@app.route('/files/upload', methods=['POST'])
def upload_file():
"""Route file upload requests to upload service."""
try:
response = requests.post(
f"{UPLOAD_SERVICE_URL}/upload",
files=request.files,
data=request.form,
timeout=300
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Upload service error: {e}")
return jsonify({'error': 'Upload service unavailable'}), 503
@app.route('/files/<file_id>/transform', methods=['POST'])
def transform_file(file_id):
"""Route transformation requests to transform service."""
try:
response = requests.post(
f"{TRANSFORM_SERVICE_URL}/transform/{file_id}",
json=request.get_json(),
timeout=300
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Transform service error: {e}")
return jsonify({'error': 'Transform service unavailable'}), 503
@app.route('/files/<file_id>/download', methods=['GET'])
def download_file(file_id):
"""Route download requests to download service."""
try:
response = requests.get(
f"{DOWNLOAD_SERVICE_URL}/download/{file_id}",
timeout=300
)
return response.content, response.status_code, response.headers.items()
except requests.exceptions.RequestException as e:
logger.error(f"Download service error: {e}")
return jsonify({'error': 'Download service unavailable'}), 503
@app.route('/files/<file_id>/metadata', methods=['GET'])
def get_file_metadata(file_id):
"""Route metadata requests to metadata service."""
try:
response = requests.get(
f"{METADATA_SERVICE_URL}/files/{file_id}/metadata",
timeout=30
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Metadata service error: {e}")
return jsonify({'error': 'Metadata service unavailable'}), 503
@app.route('/files/<file_id>/metadata', methods=['PUT'])
def update_file_metadata(file_id):
"""Route metadata update requests to metadata service."""
try:
response = requests.put(
f"{METADATA_SERVICE_URL}/files/{file_id}/metadata",
json=request.get_json(),
timeout=30
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Metadata service error: {e}")
return jsonify({'error': 'Metadata service unavailable'}), 503
@app.route('/files', methods=['GET'])
def get_files():
"""Route file listing requests to metadata service."""
try:
response = requests.get(
f"{METADATA_SERVICE_URL}/files",
params=request.args,
timeout=30
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Metadata service error: {e}")
return jsonify({'error': 'Metadata service unavailable'}), 503
@app.route('/transformations', methods=['GET'])
def get_transformations():
"""Route transformation listing requests to metadata service."""
try:
response = requests.get(
f"{METADATA_SERVICE_URL}/transformations",
params=request.args,
timeout=30
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Metadata service error: {e}")
return jsonify({'error': 'Metadata service unavailable'}), 503
@app.route('/dashboard/stats', methods=['GET'])
def get_dashboard_stats():
"""Route dashboard stats requests to metadata service."""
try:
response = requests.get(
f"{METADATA_SERVICE_URL}/stats",
timeout=30
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Metadata service error: {e}")
return jsonify({'error': 'Metadata service unavailable'}), 503
@app.route('/buckets', methods=['GET'])
def get_buckets():
"""Route bucket requests to metadata service."""
try:
response = requests.get(
f"{METADATA_SERVICE_URL}/buckets",
timeout=30
)
return jsonify(response.json()), response.status_code
except requests.exceptions.RequestException as e:
logger.error(f"Metadata service error: {e}")
return jsonify({'error': 'Metadata service unavailable'}), 503
# Auth endpoints (placeholder for now)
@app.route('/auth/login', methods=['POST'])
def login():
"""Placeholder login endpoint."""
return jsonify({'token': 'dummy-token', 'user': {'id': 1, 'username': 'admin'}}), 200
@app.route('/auth/logout', methods=['POST'])
def logout():
"""Placeholder logout endpoint."""
return jsonify({'message': 'Logged out successfully'}), 200
@app.route('/auth/profile', methods=['GET'])
def get_profile():
"""Placeholder profile endpoint."""
return jsonify({'id': 1, 'username': 'admin', 'email': 'admin@example.com'}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=False)