BrickTracker/bricktracker/views/wish.py

97 lines
2.4 KiB
Python
Raw Permalink Normal View History

2025-02-04 20:07:15 +01:00
from flask import (
Blueprint,
jsonify,
redirect,
render_template,
request,
url_for
)
2025-01-17 11:03:00 +01:00
from flask_login import login_required
from werkzeug.wrappers.response import Response
from .exceptions import exception_handler
from ..retired_list import BrickRetiredList
from ..wish import BrickWish
from ..wish_list import BrickWishList
2025-02-04 20:07:15 +01:00
from ..wish_owner_list import BrickWishOwnerList
2025-01-17 11:03:00 +01:00
2025-02-04 20:07:15 +01:00
wish_page = Blueprint('wish', __name__, url_prefix='/wishes')
2025-01-17 11:03:00 +01:00
# Index
@wish_page.route('/', methods=['GET'])
@exception_handler(__file__)
def list() -> str:
return render_template(
'wishes.html',
table_collection=BrickWishList().all(),
retired=BrickRetiredList(),
2025-02-04 20:07:15 +01:00
error=request.args.get('error'),
owners=BrickWishOwnerList.list(),
2025-01-17 11:03:00 +01:00
)
# Add a set to the wishlit
@wish_page.route('/add', methods=['POST'])
@login_required
@exception_handler(__file__, post_redirect='wish.list')
def add() -> Response:
2025-02-04 20:07:15 +01:00
# Grab the set
set: str = request.form.get('set', '')
2025-01-17 11:03:00 +01:00
2025-02-04 20:07:15 +01:00
if set != '':
BrickWishList.add(set)
2025-01-17 11:03:00 +01:00
return redirect(url_for('wish.list'))
2025-02-04 20:07:15 +01:00
# Ask for deletion of a wish
@wish_page.route('/<set>/delete', methods=['GET'])
@login_required
@exception_handler(__file__)
def delete(*, set: str) -> str:
return render_template(
'wish.html',
delete=True,
item=BrickWish().select_specific(set),
error=request.args.get('error'),
owners=BrickWishOwnerList.list(),
)
# Actually delete of a set
@wish_page.route('/<set>/delete', methods=['POST'])
2025-01-17 11:03:00 +01:00
@login_required
@exception_handler(__file__, post_redirect='wish.list')
2025-02-04 20:07:15 +01:00
def do_delete(*, set: str) -> Response:
brickwish = BrickWish().select_specific(set)
2025-01-17 11:03:00 +01:00
brickwish.delete()
return redirect(url_for('wish.list'))
2025-02-04 20:07:15 +01:00
# Details
@wish_page.route('/<set>/details', methods=['GET'])
@exception_handler(__file__)
def details(*, set: str) -> str:
return render_template(
'wish.html',
item=BrickWish().select_specific(set),
retired=BrickRetiredList(),
owners=BrickWishOwnerList.list(),
)
# Change the state of a owner
@wish_page.route('/<set>/owner/<metadata_id>', methods=['POST'])
@login_required
@exception_handler(__file__, json=True)
def update_owner(*, set: str, metadata_id: str) -> Response:
brickwish = BrickWish().select_specific(set)
owner = BrickWishOwnerList.get(metadata_id)
state = owner.update_wish_state(brickwish, json=request.json)
return jsonify({'value': state})