Major refactor: deduplicate routes, sync, JS, and fix bugs
- Extract 8 common route patterns into factory functions in routes/shared.py (favourite, upload, replace cover, save defaults, clone, save JSON, get missing, clear covers) — removes ~1,100 lines across 9 route files - Extract generic _sync_category() in sync.py — 7 sync functions become one-liner wrappers, removing ~350 lines - Extract shared detail page JS into static/js/detail-common.js — all 9 detail templates now call initDetailPage() with minimal config - Extract layout inline JS into static/js/layout-utils.js (~185 lines) - Extract library toolbar JS into static/js/library-toolbar.js - Fix finalize missing-image bug: raise RuntimeError instead of logging warning so job is marked failed - Fix missing scheduler default in _default_checkpoint_data() - Fix N+1 query in Character.get_available_outfits() with batch IN query - Convert all print() to logger across services and routes - Add missing tags display to styles, scenes, detailers, checkpoints detail - Update delete buttons to use trash.png icon with solid red background - Update CLAUDE.md to reflect new architecture Net reduction: ~1,600 lines Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -65,8 +65,10 @@ class Character(db.Model):
|
||||
|
||||
# Add assigned outfits from Outfit table
|
||||
if self.assigned_outfit_ids:
|
||||
assigned = Outfit.query.filter(Outfit.outfit_id.in_(self.assigned_outfit_ids)).all()
|
||||
outfit_by_id = {o.outfit_id: o for o in assigned}
|
||||
for outfit_id in self.assigned_outfit_ids:
|
||||
outfit = Outfit.query.filter_by(outfit_id=outfit_id).first()
|
||||
outfit = outfit_by_id.get(outfit_id)
|
||||
if outfit:
|
||||
outfits.append({
|
||||
'outfit_id': outfit.outfit_id,
|
||||
|
||||
Reference in New Issue
Block a user