from flask import Blueprint, jsonify, abort, request from flask_login import current_user from db.models import database, Order from db.queries import user_get, domsubusers_list, orders_pool_list, orders_pool api = Blueprint('api', __name__) @api.route('/subs') def subs(): return jsonify( [ {"sub_username": dsu.sub.telegram_username} for dsu in domsubusers_list(current_user.db_user) ] ) @api.route('/subs//sets') def sub_order_sets(username): try: sub = user_get(username) except: abort(403) return if sub.telegram_username not in [dsu.sub.telegram_username for dsu in domsubusers_list(current_user.db_user)]: abort(403) return return jsonify([ { 'id': op.id, 'name': op.name, } for op in orders_pool_list(sub.id) ]) @api.route('/subs//sets/', methods = ['GET', 'POST']) def sub_order_set(username, set_id): try: sub = user_get(username) except: abort(403) return if sub.telegram_username not in [dsu.sub.telegram_username for dsu in domsubusers_list(current_user.db_user)]: abort(403) return op = orders_pool(sub.id, set_id) if request.method == 'POST': with database.atomic() as transaction: try: op.name = request.json['name'] op.save() for updated_order in request.json['orders']: if isinstance(updated_order['id'], int): order_to_update = op.orders.where(Order.id == updated_order['id']).get() if '_delete' in updated_order: order_to_update.delete_instance(recursive=True) else: order_to_update.name = updated_order['name'] order_to_update.weight = updated_order['weight'] order_to_update.repeat = updated_order['repeat'] order_to_update.save() else: Order.create( pool=op, name=updated_order['name'], weight=updated_order['weight'], repeat=updated_order['repeat'] ) except: transaction.rollback() return jsonify( { 'id': op.id, 'name': op.name, 'orders': [{ 'id': order.id, 'name': order.name, 'weight': order.weight, 'repeat': order.repeat, 'add_ons': [ { 'id': 1, 'name': 'Leg Shackles', 'probability': 0.9 }, { 'id': 2, 'name': 'Leather Collar', 'probability': 0.5 } ] } for order in op.orders] } )