Save and edit order add ons
This commit is contained in:
parent
ca3cbb6e54
commit
058891dc36
3 changed files with 92 additions and 11 deletions
|
|
@ -45,6 +45,15 @@ class Order(BaseModel):
|
||||||
class Meta:
|
class Meta:
|
||||||
table_name = 'order'
|
table_name = 'order'
|
||||||
|
|
||||||
|
class OrderAddOn(BaseModel):
|
||||||
|
name = TextField()
|
||||||
|
probability = FloatField()
|
||||||
|
|
||||||
|
order = ForeignKeyField(column_name='order_id', field='id', model=Order, backref='add_ons')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
table_name = 'order_add_on'
|
||||||
|
|
||||||
#
|
#
|
||||||
# Order State
|
# Order State
|
||||||
#
|
#
|
||||||
|
|
|
||||||
40
flask/api.py
40
flask/api.py
|
|
@ -1,6 +1,6 @@
|
||||||
from flask import Blueprint, jsonify, abort, request
|
from flask import Blueprint, jsonify, abort, request
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from db.models import database, Order
|
from db.models import database, Order, OrderAddOn
|
||||||
from db.queries import user_get, domsubusers_list, orders_pool_list, orders_pool
|
from db.queries import user_get, domsubusers_list, orders_pool_list, orders_pool
|
||||||
|
|
||||||
api = Blueprint('api', __name__)
|
api = Blueprint('api', __name__)
|
||||||
|
|
@ -51,6 +51,25 @@ def sub_order_set(username, set_id):
|
||||||
op = orders_pool(sub.id, set_id)
|
op = orders_pool(sub.id, set_id)
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
|
def update_add_ons(order, add_ons):
|
||||||
|
for updated_add_on in add_ons:
|
||||||
|
if isinstance(updated_add_on['id'], int):
|
||||||
|
add_on_to_update = order.add_ons.where(OrderAddOn.id == updated_add_on['id']).get()
|
||||||
|
|
||||||
|
if '_delete' in updated_add_on:
|
||||||
|
add_on_to_update.delete_instance(recursive=True)
|
||||||
|
else:
|
||||||
|
add_on_to_update.name = updated_add_on['name']
|
||||||
|
add_on_to_update.probability = updated_add_on['probability']
|
||||||
|
|
||||||
|
add_on_to_update.save()
|
||||||
|
else:
|
||||||
|
OrderAddOn.create(
|
||||||
|
order=order,
|
||||||
|
name=updated_add_on['name'],
|
||||||
|
probability=updated_add_on['probability']
|
||||||
|
)
|
||||||
|
|
||||||
with database.atomic() as transaction:
|
with database.atomic() as transaction:
|
||||||
try:
|
try:
|
||||||
op.name = request.json['name']
|
op.name = request.json['name']
|
||||||
|
|
@ -68,6 +87,8 @@ def sub_order_set(username, set_id):
|
||||||
order_to_update.repeat = updated_order['repeat']
|
order_to_update.repeat = updated_order['repeat']
|
||||||
|
|
||||||
order_to_update.save()
|
order_to_update.save()
|
||||||
|
|
||||||
|
update_add_ons(order_to_update, updated_order['add_ons'])
|
||||||
else:
|
else:
|
||||||
Order.create(
|
Order.create(
|
||||||
pool=op,
|
pool=op,
|
||||||
|
|
@ -75,8 +96,11 @@ def sub_order_set(username, set_id):
|
||||||
weight=updated_order['weight'],
|
weight=updated_order['weight'],
|
||||||
repeat=updated_order['repeat']
|
repeat=updated_order['repeat']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
update_add_ons(order_to_update, updated_order['add_ons'])
|
||||||
except:
|
except:
|
||||||
transaction.rollback()
|
transaction.rollback()
|
||||||
|
abort(500)
|
||||||
|
|
||||||
return jsonify(
|
return jsonify(
|
||||||
{
|
{
|
||||||
|
|
@ -89,17 +113,11 @@ def sub_order_set(username, set_id):
|
||||||
'repeat': order.repeat,
|
'repeat': order.repeat,
|
||||||
'add_ons': [
|
'add_ons': [
|
||||||
{
|
{
|
||||||
'id': 1,
|
'id': add_on.id,
|
||||||
'name': 'Leg Shackles',
|
'name': add_on.name,
|
||||||
'probability': 0.9
|
'probability': add_on.probability
|
||||||
},
|
} for add_on in order.add_ons
|
||||||
{
|
|
||||||
'id': 2,
|
|
||||||
'name': 'Leather Collar',
|
|
||||||
'probability': 0.5
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
} for order in op.orders]
|
} for order in op.orders]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
54
migrations/002_add_order_add_on.py
Normal file
54
migrations/002_add_order_add_on.py
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
"""Peewee migrations -- 002_add_order_add_on.py.
|
||||||
|
|
||||||
|
Some examples (model - class or model name)::
|
||||||
|
|
||||||
|
> Model = migrator.orm['table_name'] # Return model in current state by name
|
||||||
|
> Model = migrator.ModelClass # Return model in current state by name
|
||||||
|
|
||||||
|
> migrator.sql(sql) # Run custom SQL
|
||||||
|
> migrator.run(func, *args, **kwargs) # Run python function with the given args
|
||||||
|
> migrator.create_model(Model) # Create a model (could be used as decorator)
|
||||||
|
> migrator.remove_model(model, cascade=True) # Remove a model
|
||||||
|
> migrator.add_fields(model, **fields) # Add fields to a model
|
||||||
|
> migrator.change_fields(model, **fields) # Change fields
|
||||||
|
> migrator.remove_fields(model, *field_names, cascade=True)
|
||||||
|
> migrator.rename_field(model, old_field_name, new_field_name)
|
||||||
|
> migrator.rename_table(model, new_table_name)
|
||||||
|
> migrator.add_index(model, *col_names, unique=False)
|
||||||
|
> migrator.add_not_null(model, *field_names)
|
||||||
|
> migrator.add_default(model, field_name, default)
|
||||||
|
> migrator.add_constraint(model, name, sql)
|
||||||
|
> migrator.drop_index(model, *col_names)
|
||||||
|
> migrator.drop_not_null(model, *field_names)
|
||||||
|
> migrator.drop_constraints(model, *constraints)
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from contextlib import suppress
|
||||||
|
|
||||||
|
import peewee as pw
|
||||||
|
from peewee_migrate import Migrator
|
||||||
|
|
||||||
|
|
||||||
|
with suppress(ImportError):
|
||||||
|
import playhouse.postgres_ext as pw_pext
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
|
||||||
|
"""Write your migrations here."""
|
||||||
|
|
||||||
|
@migrator.create_model
|
||||||
|
class OrderAddOn(pw.Model):
|
||||||
|
id = pw.AutoField()
|
||||||
|
name = pw.TextField()
|
||||||
|
probability = pw.FloatField()
|
||||||
|
order = pw.ForeignKeyField(column_name='order_id', field='id', model=migrator.orm['order'])
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
table_name = "order_add_on"
|
||||||
|
|
||||||
|
|
||||||
|
def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
|
||||||
|
"""Write your rollback migrations here."""
|
||||||
|
|
||||||
|
migrator.remove_model('order_add_on')
|
||||||
Loading…
Reference in a new issue