diff --git a/routes/assembly.py b/routes/assembly.py index d2f22f4..7abd68c 100644 --- a/routes/assembly.py +++ b/routes/assembly.py @@ -2,6 +2,7 @@ import datetime from flask import Blueprint, request, jsonify from flask_jwt_extended import get_jwt_identity +from sqlalchemy.orm import joinedload import database from database.enums import AssemblyState @@ -17,13 +18,17 @@ def create_assembly(): data: dict = request.json order_id: int = data.get('orderId') user_id = get_jwt_identity() - existing_assembly = database.Assembly.query.filter_by(order_id=order_id).first() + existing_assembly = (database.Assembly.query. + options(joinedload(database.Assembly.user)). + filter_by(order_id=order_id). + first()) if existing_assembly: response = { 'ok': False, 'message': 'Сборка этого товара уже была запущена', 'assemblyId': existing_assembly.id, - 'statusCode': 'ASSEMBLY_ALREADY_EXISTS' + 'statusCode': 'ASSEMBLY_ALREADY_EXISTS', + 'userName': existing_assembly.user.login } return jsonify(response) active_assembly = database.Assembly.query.filter(database.Assembly.user_id == user_id, @@ -111,6 +116,33 @@ def cancel_assembly(): return jsonify(response) +@assembly_blueprint.post('/cancelById') +def cancel_assembly_by_id(): + try: + assembly_id = request.json.get('assemblyId') + assembly = database.db.session.get(database.Assembly, assembly_id) + if not assembly: + response = { + 'ok': False, + 'message': f'Сборка {assembly_id} не найдена' + } + return jsonify(response) + database.db.session.delete(assembly) + database.db.session.commit() + response = { + 'ok': True, + 'message': f'Сборка {assembly_id} успешно отменена!' + } + return jsonify(response) + except Exception as e: + response = { + 'ok': False, + 'message': f'Неудалось отменить сборку, ошибка: {e}' + } + return jsonify(response) + + + @assembly_blueprint.get('/hasActive') def user_has_active_assembly(): user_id = get_jwt_identity()