2026-01-29 21:30:51 +00:00
|
|
|
from flask import Blueprint, jsonify, abort, request
|
2026-01-10 03:44:55 +00:00
|
|
|
from flask_login import current_user
|
2026-01-29 21:30:51 +00:00
|
|
|
from db.models import database, Order
|
|
|
|
|
from db.queries import user_get, domsubusers_list, orders_pool_list, orders_pool
|
2026-01-10 03:44:55 +00:00
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
|
2026-01-29 21:30:51 +00:00
|
|
|
@api.route('/subs/<username>/sets')
|
|
|
|
|
def sub_order_sets(username):
|
2026-01-10 03:44:55 +00:00
|
|
|
try:
|
|
|
|
|
sub = user_get(username)
|
|
|
|
|
except:
|
2026-01-29 21:30:51 +00:00
|
|
|
abort(403)
|
2026-01-10 03:44:55 +00:00
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if sub.telegram_username not in [dsu.sub.telegram_username for dsu in domsubusers_list(current_user.db_user)]:
|
2026-01-29 21:30:51 +00:00
|
|
|
abort(403)
|
2026-01-10 03:44:55 +00:00
|
|
|
return
|
|
|
|
|
|
|
|
|
|
return jsonify([
|
2026-01-29 21:30:51 +00:00
|
|
|
{
|
|
|
|
|
'id': op.id,
|
|
|
|
|
'name': op.name,
|
|
|
|
|
}
|
|
|
|
|
for op
|
|
|
|
|
in orders_pool_list(sub.id)
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
@api.route('/subs/<username>/sets/<set_id>', 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(
|
2026-01-10 03:44:55 +00:00
|
|
|
{
|
|
|
|
|
'id': op.id,
|
|
|
|
|
'name': op.name,
|
|
|
|
|
'orders': [{
|
|
|
|
|
'id': order.id,
|
|
|
|
|
'name': order.name,
|
|
|
|
|
'weight': order.weight,
|
2026-01-29 21:30:51 +00:00
|
|
|
'repeat': order.repeat,
|
|
|
|
|
'add_ons': [
|
|
|
|
|
{
|
|
|
|
|
'id': 1,
|
|
|
|
|
'name': 'Leg Shackles',
|
|
|
|
|
'probability': 0.9
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'id': 2,
|
|
|
|
|
'name': 'Leather Collar',
|
|
|
|
|
'probability': 0.5
|
|
|
|
|
}
|
|
|
|
|
]
|
2026-01-10 03:44:55 +00:00
|
|
|
} for order in op.orders]
|
|
|
|
|
}
|
2026-01-29 21:30:51 +00:00
|
|
|
)
|
|
|
|
|
|