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//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//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/", 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/", 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/", 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