mirror of
https://github.com/ghndrx/file-transformer-s3.git
synced 2026-02-10 06:45:05 +00:00
165 lines
6.1 KiB
Python
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) |