kanban-app/backend/app/routes/kanban/checklists.py

88 lines
2.3 KiB
Python
Raw Normal View History

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