56 lines
No EOL
1.8 KiB
Python
56 lines
No EOL
1.8 KiB
Python
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 |