/** * Custom card designs (card designer feature). * * One row per user-designed card. Designer-specific fields live here * (frame, artwork, actions); on save we also upsert a matching catalog * row in `cards` (game='Custom') + a `user_cards` row so designed cards * appear in My Cards, lists, and decks through the normal joins. */ export const up = (pgm) => { pgm.sql(` CREATE TABLE IF NOT EXISTS custom_cards ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, card_id INTEGER REFERENCES cards(id) ON DELETE SET NULL, name VARCHAR(255) NOT NULL, mana_cost VARCHAR(50), card_type VARCHAR(255), rarity VARCHAR(50), rules_text TEXT, actions TEXT, power VARCHAR(10), toughness VARCHAR(10), frame_id VARCHAR(50) DEFAULT 'classic', artwork_url TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) `); pgm.sql(` CREATE INDEX IF NOT EXISTS idx_custom_cards_user_id ON custom_cards(user_id) `); pgm.sql(` CREATE INDEX IF NOT EXISTS idx_custom_cards_card_id ON custom_cards(card_id) `); }; export const down = (pgm) => { pgm.sql(`DROP TABLE IF EXISTS custom_cards CASCADE`); };