const { PrismaClient } = require("@prisma/client"); const prisma = new PrismaClient(); async function addMissingColumns() { try { console.log("๐Ÿ”„ ๋ˆ„๋ฝ๋œ ์ปฌ๋Ÿผ๋“ค์„ screen_layouts ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ ์ค‘..."); // layout_type ์ปฌ๋Ÿผ ์ถ”๊ฐ€ try { await prisma.$executeRaw` ALTER TABLE screen_layouts ADD COLUMN IF NOT EXISTS layout_type VARCHAR(50); `; console.log("โœ… layout_type ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ"); } catch (error) { console.log( "โ„น๏ธ layout_type ์ปฌ๋Ÿผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์ค‘ ์˜ค๋ฅ˜:", error.message ); } // layout_config ์ปฌ๋Ÿผ ์ถ”๊ฐ€ try { await prisma.$executeRaw` ALTER TABLE screen_layouts ADD COLUMN IF NOT EXISTS layout_config JSONB; `; console.log("โœ… layout_config ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ"); } catch (error) { console.log( "โ„น๏ธ layout_config ์ปฌ๋Ÿผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์ค‘ ์˜ค๋ฅ˜:", error.message ); } // zones_config ์ปฌ๋Ÿผ ์ถ”๊ฐ€ try { await prisma.$executeRaw` ALTER TABLE screen_layouts ADD COLUMN IF NOT EXISTS zones_config JSONB; `; console.log("โœ… zones_config ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ"); } catch (error) { console.log( "โ„น๏ธ zones_config ์ปฌ๋Ÿผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์ค‘ ์˜ค๋ฅ˜:", error.message ); } // zone_id ์ปฌ๋Ÿผ ์ถ”๊ฐ€ try { await prisma.$executeRaw` ALTER TABLE screen_layouts ADD COLUMN IF NOT EXISTS zone_id VARCHAR(100); `; console.log("โœ… zone_id ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ"); } catch (error) { console.log( "โ„น๏ธ zone_id ์ปฌ๋Ÿผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์ค‘ ์˜ค๋ฅ˜:", error.message ); } // ์ธ๋ฑ์Šค ์ƒ์„ฑ (์„ฑ๋Šฅ ํ–ฅ์ƒ) try { await prisma.$executeRaw` CREATE INDEX IF NOT EXISTS idx_screen_layouts_layout_type ON screen_layouts(layout_type); `; console.log("โœ… layout_type ์ธ๋ฑ์Šค ์ƒ์„ฑ ์™„๋ฃŒ"); } catch (error) { console.log("โ„น๏ธ layout_type ์ธ๋ฑ์Šค ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜:", error.message); } try { await prisma.$executeRaw` CREATE INDEX IF NOT EXISTS idx_screen_layouts_zone_id ON screen_layouts(zone_id); `; console.log("โœ… zone_id ์ธ๋ฑ์Šค ์ƒ์„ฑ ์™„๋ฃŒ"); } catch (error) { console.log("โ„น๏ธ zone_id ์ธ๋ฑ์Šค ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜:", error.message); } // ์ตœ์ข… ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ํ™•์ธ const columns = await prisma.$queryRaw` SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'screen_layouts' ORDER BY ordinal_position `; console.log("\n๐Ÿ“‹ screen_layouts ํ…Œ์ด๋ธ” ์ตœ์ข… ๊ตฌ์กฐ:"); console.table(columns); console.log("\n๐ŸŽ‰ ๋ชจ๋“  ๋ˆ„๋ฝ๋œ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!"); } catch (error) { console.error("โŒ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:", error); } finally { await prisma.$disconnect(); } } addMissingColumns();