45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
|
|
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/<int:id>', 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/<int:id>', 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
|