diff --git a/prisma/seed.js b/prisma/seed.js index 5bbdfd8..1a38481 100644 --- a/prisma/seed.js +++ b/prisma/seed.js @@ -39,8 +39,12 @@ function generateNickname(i) { // 랜덤 제목/문장/이미지 도우미 const TITLE_FRAGMENTS = [ + // 아주 짧은 키워드 + "공지", "업뎃", "버그", "요청", "후기", "정보", "TIP", "사진", "잡담", "나눔", + "질문", "헬프", "리뷰", "이슈", "주의", "긴급", "정리", "모음", "요약", "스샷", + // 짧은 구문 "오늘의 이슈", "핫 토픽", "소소한 일상", "정보 공유", "꿀팁 모음", - "개발 노트", "버그 리포트", "아이디어 제안", "질문 있습니다", "토론해요", + "개발 노트", "버그 리포트", "아이디어 제안", "함께 보아요", ]; const SENTENCES = [ "안녕하세요, 간단히 공유 드립니다.", @@ -54,10 +58,44 @@ const SENTENCES = [ "개선 제안은 자유롭게 남겨주세요.", "읽어주셔서 감사합니다.", ]; +const TITLE_SUBS = [ + "지금", "방금", "오늘", "금일", "v2", "2025", "베타", "테스트", + "임시", "간단히", "빠르게", "짧게", "새로", "업데이트", "정리", "공유", +]; +const TITLE_EMOJIS = ["🔥", "📌", "✅", "❗", "💡", "🆕", "🔧", "📝", "📷"]; + +function clampTitle(s, max = 60) { + return s.length <= max ? s : s.slice(0, max).trim(); +} + +function pick(arr) { return arr[randomInt(0, arr.length - 1)]; } +function coin(p = 0.5) { return Math.random() < p; } + function randomTitle(boardName, index) { - const a = TITLE_FRAGMENTS[randomInt(0, TITLE_FRAGMENTS.length - 1)]; - const b = TITLE_FRAGMENTS[randomInt(0, TITLE_FRAGMENTS.length - 1)]; - return `${boardName} ${a} · ${b} #${index + 1}`; + // 다양한 템플릿으로 제목 생성 (짧은 것도, 긴 것도 포함) + const a = pick(TITLE_FRAGMENTS); + const b = pick(TITLE_FRAGMENTS); + const sub = pick(TITLE_SUBS); + const emoji = pick(TITLE_EMOJIS); + const num = (index % 99) + 1; + + const templates = [ + () => `${a}`, + () => `${a} ${emoji}`, + () => `${a} #${num}`, + () => `${a} ${sub}`, + () => `${a} · ${b}`, + () => `[${a}] ${b}`, + () => `${a}: ${b}`, + () => `${a} ${b} ${emoji}`, + // 가끔만 보드명 포함 + () => `${boardName} ${a}`, + () => `${boardName} ${a} · ${b}`, + ]; + + // 짧은 제목 확률을 높이기 위해 템플릿 선택 가중치 없이 랜덤 + const title = pick(templates)(); + return clampTitle(title, 60); } function randomSentence() { return SENTENCES[randomInt(0, SENTENCES.length - 1)];