from flask import Blueprint, jsonify, request, current_app from utils.json_crud import load_json, save_json from utils.data_loader import load_data from models.contact_model import ContactModel import os DATA_DIR = os.path.join(os.path.dirname(__file__), '../data') CONTACTS_FILE = os.path.join(DATA_DIR, 'contact.json') contact_bp = Blueprint('contact', __name__, url_prefix='/api/contact') @contact_bp.route('/', methods=['GET']) def get_contact(): contact = load_data('contact.json') return jsonify(contact) @contact_bp.route('/', methods=['POST']) def create_or_replace_contact(): key = request.headers.get('x-api-key') if key != current_app.config['API_KEY']: return jsonify({"error": "Unauthorized"}), 401 data = request.json or {} model = ContactModel(data) if not model.is_valid(): return jsonify({"error": "Invalid contact data"}), 400 new_entry = model.to_dict() save_json(CONTACTS_FILE, new_entry) return jsonify(new_entry), 201 @contact_bp.route('/', methods=['PUT', 'PATCH']) def update_contact(): key = request.headers.get('x-api-key') if key != current_app.config['API_KEY']: return jsonify({"error": "Unauthorized"}), 401 current = load_json(CONTACTS_FILE) or {} payload = request.json or {} updated = {**current, **payload} model = ContactModel(updated) if not model.is_valid(): return jsonify({"error": "Invalid contact data"}), 400 save_json(CONTACTS_FILE, model.to_dict()) return jsonify(model.to_dict()), 200 @contact_bp.route('/', methods=['DELETE']) def delete_contact(): key = request.headers.get('x-api-key') if key != current_app.config['API_KEY']: return jsonify({"error": "Unauthorized"}), 401 # Clear contact info save_json(CONTACTS_FILE, {}) return jsonify({"status": "success"}), 200