71 lines
No EOL
2.5 KiB
Python
71 lines
No EOL
2.5 KiB
Python
from flask import Blueprint, jsonify, request, current_app
|
|
from utils.data_loader import load_data
|
|
from utils.json_crud import load_json, save_json, add_entry, delete_entry, update_entry
|
|
from models.service_model import ServiceModel
|
|
import os
|
|
|
|
DATA_DIR = os.path.join(os.path.dirname(__file__), '../data')
|
|
SERVICES_FILE = os.path.join(DATA_DIR, 'services.json')
|
|
|
|
services_bp = Blueprint('services', __name__, url_prefix='/api/services')
|
|
|
|
@services_bp.route('/', methods=['GET'])
|
|
def get_services():
|
|
services = load_data('services.json')
|
|
return jsonify(services)
|
|
|
|
@services_bp.route('/<service_id>', methods=['GET'])
|
|
def get_service(service_id):
|
|
services = load_data('services.json')
|
|
service = next((s for s in services if str(s.get('id')) == str(service_id)), None)
|
|
if not service:
|
|
return jsonify({"error": "Service not found"}), 404
|
|
return jsonify(service)
|
|
|
|
@services_bp.route('/', methods=['POST'])
|
|
def create_service():
|
|
key = request.headers.get('x-api-key')
|
|
if key != current_app.config['API_KEY']:
|
|
return jsonify({"error": "Unauthorized"}), 401
|
|
|
|
services = load_json(SERVICES_FILE)
|
|
entry = request.json or {}
|
|
# generate new id
|
|
new_id = max((s.get('id') for s in services), default=0) + 1
|
|
model = ServiceModel({**entry, 'id': new_id})
|
|
data = model.to_dict()
|
|
|
|
added = add_entry(SERVICES_FILE, data)
|
|
return jsonify(added), 201
|
|
|
|
@services_bp.route('/<service_id>', methods=['PUT', 'PATCH'])
|
|
def update_service(service_id):
|
|
key = request.headers.get('x-api-key')
|
|
if key != current_app.config['API_KEY']:
|
|
return jsonify({"error": "Unauthorized"}), 401
|
|
|
|
services = load_json(SERVICES_FILE)
|
|
service = next((s for s in services if str(s.get('id')) == str(service_id)), None)
|
|
if not service:
|
|
return jsonify({"error": "Service not found"}), 404
|
|
|
|
payload = request.json or {}
|
|
updated = {**service, **payload}
|
|
updated['id'] = service['id']
|
|
|
|
saved = update_entry(SERVICES_FILE, updated['id'], updated)
|
|
return jsonify(saved), 200
|
|
|
|
@services_bp.route('/<service_id>', methods=['DELETE'])
|
|
def delete_service(service_id):
|
|
key = request.headers.get('x-api-key')
|
|
if key != current_app.config['API_KEY']:
|
|
return jsonify({"error": "Unauthorized"}), 401
|
|
|
|
services = load_json(SERVICES_FILE)
|
|
service = next((s for s in services if str(s.get('id')) == str(service_id)), None)
|
|
if not service:
|
|
return jsonify({"error": "Service not found"}), 404
|
|
|
|
deleted = delete_entry(SERVICES_FILE, service_id)
|
|
return jsonify(deleted), 200 |