/** * Shared field normalization for custom card designs. * Single source of truth so the create and update routes never drift. */ export function pickDesignFields(body = {}) { const str = (v) => (typeof v === 'string' ? v.trim() : null); const int = (v) => { const n = parseInt(v, 10); return Number.isInteger(n) ? n : null; }; const artMode = str(body.art_mode) || str(body.artMode) || 'framed'; const gameTarget = str(body.game_target) || str(body.gameTarget) || 'custom'; return { name: str(body.name), manaCost: str(body.mana_cost) || str(body.manaCost), cardType: str(body.card_type) || str(body.cardType), rarity: str(body.rarity), rulesText: str(body.rules_text) || str(body.description), actions: str(body.actions), flavorQuote: str(body.flavor_quote) || str(body.flavorQuote), power: str(body.power), toughness: str(body.toughness), frameId: str(body.frame_id) || str(body.frameId) || 'classic', artworkUrl: str(body.artwork_url) || str(body.artworkUrl), artMode: artMode === 'fullart' ? 'fullart' : 'framed', gameTarget, customGameId: int(body.custom_game_id) || int(body.customGameId), }; }