from flask import Blueprint, jsonify, request from ..models import Deliverable from ..extensions import db from datetime import date deliverables_bp = Blueprint('deliverables', __name__) @deliverables_bp.route('/deliverables', methods=['GET']) def get_deliverables(): project_id = request.args.get('project_id') q = Deliverable.query if project_id: q = q.filter_by(project_id=int(project_id)) return jsonify([d.to_dict() for d in q.order_by(Deliverable.due_date).all()]) @deliverables_bp.route('/deliverables', methods=['POST']) def create_deliverable(): data = request.get_json() d = Deliverable( project_id=data['project_id'], title=data['title'], due_date=date.fromisoformat(data['due_date']), status=data.get('status', 'upcoming'), ) db.session.add(d) db.session.commit() return jsonify(d.to_dict()), 201 @deliverables_bp.route('/deliverables/', methods=['PATCH']) def update_deliverable(id): d = Deliverable.query.get_or_404(id) data = request.get_json() if 'title' in data: d.title = data['title'] if 'due_date' in data: d.due_date = date.fromisoformat(data['due_date']) if 'status' in data: d.status = data['status'] db.session.commit() return jsonify(d.to_dict()) @deliverables_bp.route('/deliverables/', methods=['DELETE']) def delete_deliverable(id): d = Deliverable.query.get_or_404(id) db.session.delete(d) db.session.commit() return jsonify({'message': 'Deliverable deleted'}), 200