107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
"""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
|
|
})
|