Update documentation: Global numbering is now the default standard

This commit is contained in:
2025-12-15 00:41:57 +11:00
parent fdb9211dd2
commit d09732cf78

View File

@@ -4,13 +4,16 @@
The LEGO Instructions Manager now includes automatic MOC (My Own Creation) set number generation, making it easier to track and organize your custom LEGO builds without manually managing set numbers. The LEGO Instructions Manager now includes automatic MOC (My Own Creation) set number generation, making it easier to track and organize your custom LEGO builds without manually managing set numbers.
**Default Behavior: Global Numbering** - All users share the same MOC number sequence, ensuring system-wide unique MOC numbers.
## Features ## Features
### 🤖 Automatic Number Generation ### 🤖 Automatic Number Generation
- **Sequential Numbering**: Automatically generates MOC numbers in sequence (MOC-10000, MOC-10001, MOC-10002, etc.) - **Sequential Numbering**: Automatically generates MOC numbers in sequence (MOC-10000, MOC-10001, MOC-10002, etc.)
- **Conflict-Free**: Ensures no duplicate MOC numbers - **Global by Default**: All users share the same sequence for system-wide uniqueness
- **Conflict-Free**: Ensures no duplicate MOC numbers across the entire system
- **Customizable Prefix**: Default is "MOC" but can be changed - **Customizable Prefix**: Default is "MOC" but can be changed
- **User-Scoped Option**: Can scope MOC numbers per user or globally - **Optional User-Scoping**: Can scope to individual users if needed
### 🔌 API Endpoints ### 🔌 API Endpoints
@@ -21,7 +24,7 @@ GET /api/moc/generate
**Query Parameters:** **Query Parameters:**
- `prefix` (optional): MOC prefix, default is 'MOC' - `prefix` (optional): MOC prefix, default is 'MOC'
- `user_scoped` (optional): Scope to current user, default is 'true' - `user_scoped` (optional): Scope to current user, default is **'false'** (GLOBAL)
**Response:** **Response:**
```json ```json
@@ -29,17 +32,25 @@ GET /api/moc/generate
"success": true, "success": true,
"moc_number": "MOC-10001", "moc_number": "MOC-10001",
"prefix": "MOC", "prefix": "MOC",
"user_scoped": true "user_scoped": false
} }
``` ```
**Example Usage:** **Example Usage:**
```javascript ```javascript
// Get next global MOC number (default)
fetch('/api/moc/generate') fetch('/api/moc/generate')
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
console.log('Next MOC number:', data.moc_number); console.log('Next MOC number:', data.moc_number);
}); });
// Get next user-scoped MOC number (optional)
fetch('/api/moc/generate?user_scoped=true')
.then(response => response.json())
.then(data => {
console.log('Next user MOC number:', data.moc_number);
});
``` ```
#### 2. Validate MOC Number #### 2. Validate MOC Number
@@ -51,7 +62,7 @@ POST /api/moc/validate
```json ```json
{ {
"set_number": "MOC-12345", "set_number": "MOC-12345",
"user_scoped": true "user_scoped": false
} }
``` ```
@@ -131,7 +142,7 @@ document.getElementById('is_moc').addEventListener('change', function() {
officialSection.style.display = 'none'; officialSection.style.display = 'none';
setNumberInput.removeAttribute('required'); setNumberInput.removeAttribute('required');
// Fetch next MOC number // Fetch next MOC number (global by default)
fetchNextMocNumber(); fetchNextMocNumber();
} else { } else {
// Show official section, hide MOC section // Show official section, hide MOC section
@@ -168,16 +179,22 @@ The `MOCNumberGenerator` service handles all MOC number logic:
```python ```python
from app.services.moc_generator import MOCNumberGenerator from app.services.moc_generator import MOCNumberGenerator
# Generate next MOC number # Generate next GLOBAL MOC number (default)
moc_number = MOCNumberGenerator.generate_next_number( moc_number = MOCNumberGenerator.generate_next_number(
prefix='MOC', prefix='MOC',
user_id=current_user.id # Optional: scope to user user_id=None # None = global numbering
) )
# Validate MOC number availability # Generate next USER-SCOPED MOC number (optional)
moc_number = MOCNumberGenerator.generate_next_number(
prefix='MOC',
user_id=current_user.id # Scope to specific user
)
# Validate MOC number availability (global)
is_available = MOCNumberGenerator.validate_moc_number( is_available = MOCNumberGenerator.validate_moc_number(
'MOC-12345', 'MOC-12345',
user_id=current_user.id user_id=None # Check globally
) )
# Check if number follows MOC format # Check if number follows MOC format
@@ -198,8 +215,12 @@ bp = Blueprint('moc', __name__, url_prefix='/api/moc')
@bp.route('/generate', methods=['GET']) @bp.route('/generate', methods=['GET'])
@login_required @login_required
def generate_moc_number(): def generate_moc_number():
# Default: user_scoped=false (global numbering)
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( moc_number = MOCNumberGenerator.generate_next_number(
user_id=current_user.id user_id=user_id
) )
return jsonify({ return jsonify({
'success': True, 'success': True,
@@ -219,17 +240,20 @@ class MOCNumberGenerator:
DEFAULT_START = 10000 # Starting number for MOCs DEFAULT_START = 10000 # Starting number for MOCs
``` ```
### Per-User vs Global Numbering ### Numbering Modes
**Per-User Numbering** (default): **Global Numbering** (Default - **RECOMMENDED**):
- All users share the same MOC number sequence
- Ensures system-wide unique MOC numbers
- MOC-10000 is unique across the entire system
- **API**: `user_scoped=false` or omit parameter
- **Use Case**: Single household, organization, or when you want guaranteed unique IDs
**Per-User Numbering** (Optional):
- Each user has their own MOC number sequence - Each user has their own MOC number sequence
- MOC-10000 can exist for multiple users - MOC-10000 can exist for multiple users
- API: `user_scoped=true` - **API**: `user_scoped=true`
- **Use Case**: Multi-tenant systems where users want isolated numbering
**Global Numbering**:
- All users share the same MOC number sequence
- Ensures unique MOC numbers across the entire system
- API: `user_scoped=false`
## Use Cases ## Use Cases
@@ -237,7 +261,7 @@ class MOCNumberGenerator:
1. User clicks "Add New Set" 1. User clicks "Add New Set"
2. User toggles "This is a MOC" checkbox 2. User toggles "This is a MOC" checkbox
3. System automatically generates MOC-10000 (or next available) 3. System automatically generates next global MOC number (e.g., MOC-10000)
4. User fills in MOC designer, description, and other details 4. User fills in MOC designer, description, and other details
5. System saves set with is_moc=True 5. System saves set with is_moc=True
@@ -247,6 +271,7 @@ class MOCNumberGenerator:
from app.services.moc_generator import MOCNumberGenerator from app.services.moc_generator import MOCNumberGenerator
for moc_data in moc_import_list: for moc_data in moc_import_list:
# Global numbering - user_id=None
moc_number = MOCNumberGenerator.generate_next_number() moc_number = MOCNumberGenerator.generate_next_number()
new_set = Set( new_set = Set(
set_number=moc_number, set_number=moc_number,
@@ -297,8 +322,8 @@ mocs_range = Set.query.filter(
**Issue**: Same MOC number assigned to multiple sets **Issue**: Same MOC number assigned to multiple sets
**Solutions**: **Solutions**:
1. Check database constraints on `set_number` field 1. Verify you're using global numbering (default `user_scoped=false`)
2. Verify `user_scoped` parameter matches your use case 2. Check database constraints on `set_number` field (should be unique)
3. Run database migration to add unique constraint if missing 3. Run database migration to add unique constraint if missing
### MOC Toggle Not Working ### MOC Toggle Not Working
@@ -325,8 +350,7 @@ Potential improvements for the MOC feature:
- [Main README](../README.md) - General application documentation - [Main README](../README.md) - General application documentation
- [Setup Guide](../SETUP_GUIDE.md) - Installation and configuration - [Setup Guide](../SETUP_GUIDE.md) - Installation and configuration
- [API Documentation](../docs/api.md) - Complete API reference (if exists) - [Feature Update Summary](../FEATURE_UPDATE_SUMMARY.md) - Recent changes
- [Database Schema](../docs/database.md) - Database structure (if exists)
## Support ## Support
@@ -344,5 +368,5 @@ For issues or questions about MOC auto-generation:
--- ---
**Last Updated**: December 2024 **Last Updated**: December 2024
**Feature Version**: 1.0 **Feature Version**: 1.1 (Global Numbering Default)
**Compatibility**: LEGO Instructions Manager v1.3.0+ **Compatibility**: LEGO Instructions Manager v1.3.0+