diff --git a/app/routes/moc.py b/app/routes/moc.py new file mode 100644 index 0000000..93a9820 --- /dev/null +++ b/app/routes/moc.py @@ -0,0 +1,106 @@ +"""MOC (My Own Creation) API Routes""" + +from flask import Blueprint, jsonify, request +from flask_login import login_required, current_user +from app.services.moc_generator import MOCNumberGenerator +from app import db + +bp = Blueprint('moc', __name__, url_prefix='/api/moc') + + +@bp.route('/generate', methods=['GET']) +@login_required +def generate_moc_number(): + """ + Generate next available MOC number + + Query Parameters: + prefix (optional): MOC prefix (default: 'MOC') + user_scoped (optional): Scope to current user (default: true) + + Returns: + JSON: {'success': True, 'moc_number': 'MOC-10001'} + """ + try: + prefix = request.args.get('prefix', 'MOC') + user_scoped = request.args.get('user_scoped', 'true').lower() == 'true' + + user_id = current_user.id if user_scoped else None + moc_number = MOCNumberGenerator.generate_next_number(prefix=prefix, user_id=user_id) + + return jsonify({ + 'success': True, + 'moc_number': moc_number, + 'prefix': prefix, + 'user_scoped': user_scoped + }) + except Exception as e: + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@bp.route('/validate', methods=['POST']) +@login_required +def validate_moc_number(): + """ + Validate if a MOC number is available + + POST Body: + { + "set_number": "MOC-12345", + "user_scoped": true (optional) + } + + Returns: + JSON: {'success': True, 'available': True/False} + """ + try: + data = request.get_json() + set_number = data.get('set_number') + user_scoped = data.get('user_scoped', True) + + if not set_number: + return jsonify({ + 'success': False, + 'error': 'set_number is required' + }), 400 + + user_id = current_user.id if user_scoped else None + is_available = MOCNumberGenerator.validate_moc_number(set_number, user_id=user_id) + + return jsonify({ + 'success': True, + 'available': is_available, + 'set_number': set_number + }) + except Exception as e: + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@bp.route('/check-format', methods=['GET']) +def check_moc_format(): + """ + Check if a set number follows MOC format + + Query Parameters: + set_number: Set number to check + prefix (optional): MOC prefix (default: 'MOC') + + Returns: + JSON: {'is_moc': True/False} + """ + set_number = request.args.get('set_number', '') + prefix = request.args.get('prefix', 'MOC') + + is_moc = MOCNumberGenerator.is_moc_number(set_number, prefix=prefix) + + return jsonify({ + 'is_moc': is_moc, + 'set_number': set_number, + 'prefix': prefix + })