"""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: false - GLOBAL NUMBERING) Returns: JSON: {'success': True, 'moc_number': 'MOC-10001'} """ try: prefix = request.args.get('prefix', 'MOC') user_scoped = request.args.get('user_scoped', 'false').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": false (optional - default: false for GLOBAL VALIDATION) } Returns: JSON: {'success': True, 'available': True/False} """ try: data = request.get_json() set_number = data.get('set_number') user_scoped = data.get('user_scoped', False) 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 })