87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
from flask_jwt_extended import jwt_required
|
|
from flask_pydantic import validate
|
|
|
|
from app import db
|
|
from app.decorators import (load_card_owned, load_check_item_owned,
|
|
load_checklist_owned)
|
|
from app.models import CheckItem, Checklist
|
|
from app.schemas import CheckItemCreateRequest, ChecklistCreateRequest
|
|
|
|
from . import kanban_bp
|
|
|
|
|
|
@kanban_bp.route("/cards/<int:card_id>/checklists", methods=["POST"])
|
|
@jwt_required()
|
|
@load_card_owned
|
|
@validate(body=ChecklistCreateRequest)
|
|
def create_checklist(card_id, card, body: ChecklistCreateRequest):
|
|
"""Create a new checklist in a card"""
|
|
checklist = Checklist(
|
|
name=body.name,
|
|
card_id=card_id,
|
|
board_id=card.board_id,
|
|
pos=body.pos,
|
|
)
|
|
|
|
db.session.add(checklist)
|
|
db.session.commit()
|
|
|
|
return checklist.to_dict(), 201
|
|
|
|
|
|
@kanban_bp.route("/checklists/<int:checklist_id>/items", methods=["POST"])
|
|
@jwt_required()
|
|
@load_checklist_owned
|
|
@validate(body=CheckItemCreateRequest)
|
|
def create_check_item(checklist_id, checklist, body: CheckItemCreateRequest):
|
|
"""Create a new check item in a checklist"""
|
|
check_item = CheckItem(
|
|
name=body.name,
|
|
checklist_id=checklist_id,
|
|
pos=body.pos,
|
|
state=body.state,
|
|
due=body.due,
|
|
)
|
|
|
|
db.session.add(check_item)
|
|
db.session.commit()
|
|
|
|
return check_item.to_dict(), 201
|
|
|
|
|
|
@kanban_bp.route("/check-items/<int:item_id>", methods=["PUT"])
|
|
@jwt_required()
|
|
@load_check_item_owned
|
|
@validate(body=CheckItemCreateRequest)
|
|
def update_check_item(item_id, check_item, body: CheckItemCreateRequest):
|
|
"""Update a check item"""
|
|
check_item.name = body.name
|
|
check_item.state = body.state
|
|
check_item.pos = body.pos
|
|
check_item.due = body.due
|
|
|
|
db.session.commit()
|
|
|
|
return check_item.to_dict(), 200
|
|
|
|
|
|
@kanban_bp.route("/checklists/<int:checklist_id>", methods=["DELETE"])
|
|
@jwt_required()
|
|
@load_checklist_owned
|
|
def delete_checklist(checklist_id, checklist):
|
|
"""Delete a checklist"""
|
|
db.session.delete(checklist)
|
|
db.session.commit()
|
|
|
|
return {"message": "Checklist deleted"}, 200
|
|
|
|
|
|
@kanban_bp.route("/check-items/<int:item_id>", methods=["DELETE"])
|
|
@jwt_required()
|
|
@load_check_item_owned
|
|
def delete_check_item(item_id, check_item):
|
|
"""Delete a check item"""
|
|
db.session.delete(check_item)
|
|
db.session.commit()
|
|
|
|
return {"message": "Check item deleted"}, 200
|