58 lines
No EOL
1.8 KiB
Python
58 lines
No EOL
1.8 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.project_model import ProjectModel
|
|
import os
|
|
|
|
DATA_DIR = os.path.join(os.path.dirname(__file__), '../data')
|
|
PROJECTS_FILE = os.path.join(DATA_DIR, 'projects.json')
|
|
|
|
projects_bp = Blueprint('projects', __name__, url_prefix='/api/projects')
|
|
|
|
@projects_bp.route('/', methods=['GET'])
|
|
def get_projects():
|
|
projects = load_data('projects.json')
|
|
return jsonify(projects)
|
|
|
|
@projects_bp.route('/<project_id>', methods=['GET'])
|
|
def get_project(project_id):
|
|
projects = load_data('projects.json')
|
|
project = next((p for p in projects if p.get('id') == project_id), None)
|
|
print(project)
|
|
return jsonify(project)
|
|
|
|
@projects_bp.route('/', methods=['POST'])
|
|
def create_project():
|
|
key = request.headers.get('x-api-key')
|
|
|
|
if key != current_app.config['API_KEY']:
|
|
return jsonify({
|
|
"error": "Unauthorized"
|
|
}), 401
|
|
projects = load_data('projects.json')
|
|
entry = request.json
|
|
|
|
project = ProjectModel(entry)
|
|
|
|
if not project.is_valid():
|
|
return jsonify({
|
|
"error": "Invalid project data"
|
|
}), 400
|
|
|
|
new_id = max((p.get('id') for p in projects), default=0) + 1
|
|
|
|
data = project.to_dict()
|
|
data['id'] = new_id
|
|
|
|
added = add_entry(PROJECTS_FILE, data)
|
|
return jsonify(added), 201
|
|
|
|
@projects_bp.route('/<project_id>', methods=['DELETE'])
|
|
def delete_project(project_id):
|
|
projects = load_data(PROJECTS_FILE)
|
|
project = next((p for p in projects if str(p.get('id')) == project_id), None)
|
|
|
|
if project:
|
|
deleted = delete_entry(PROJECTS_FILE, project_id)
|
|
return jsonify(deleted), 200
|
|
return jsonify({"error": "Project not found"}), 404 |