Add MOC API routes for auto-generation and validation

This commit is contained in:
2025-12-15 00:34:48 +11:00
parent 944a679372
commit 35d32d1a00

106
app/routes/moc.py Normal file
View File

@@ -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
})