import { normalizeSignupBlockedUsernames, parseSignupBlockedUsernamesFromText } from './signup-blocked-usernames.js' export const SPAM_SETTINGS_FIELDS = ['signupBlockedUsernames'] /** * 스팸 필터 설정 기본 스냅샷을 만든다. * @returns {Object} 기본 스팸 필터 설정 값 */ export const createDefaultSpamSettingsSnapshot = () => ({ signupBlockedUsernames: normalizeSignupBlockedUsernames() }) /** * 스팸 필터 설정 값을 저장·비교 가능한 형태로 정규화한다. * @param {Object} source - 원본 설정 값 * @returns {Object} 정규화된 스팸 필터 설정 값 */ export const normalizeSpamSettingsSection = (source = {}) => ({ signupBlockedUsernames: normalizeSignupBlockedUsernames(source.signupBlockedUsernames) }) /** * 스팸 필터 설정 필드만 대상 객체에 복사한다. * @param {Object} target - 값을 받을 객체 * @param {Object} source - 값을 제공할 객체 * @returns {void} */ export const assignSpamSettingsSection = (target, source = {}) => { const normalized = normalizeSpamSettingsSection(source) SPAM_SETTINGS_FIELDS.forEach((field) => { target[field] = normalized[field] }) } /** * 두 스팸 필터 설정 값이 다른지 확인한다. * @param {Object} current - 현재 설정 값 * @param {Object} snapshot - 비교할 스냅샷 * @returns {boolean} 변경 여부 */ export const hasSpamSettingsSectionChanges = (current, snapshot) => { const normalizedCurrent = normalizeSpamSettingsSection(current) const normalizedSnapshot = normalizeSpamSettingsSection(snapshot) return JSON.stringify(normalizedCurrent.signupBlockedUsernames) !== JSON.stringify(normalizedSnapshot.signupBlockedUsernames) } /** * 스팸 필터 금지 닉네임 배열을 textarea 값으로 변환한다. * @param {Object} source - 스팸 필터 설정 값 * @returns {string} 줄바꿈 구분 textarea 값 */ export const formatSpamBlockedUsernamesText = (source = {}) => { return normalizeSpamSettingsSection(source).signupBlockedUsernames.join('\n') } /** * textarea 값을 스팸 필터 설정 값으로 변환한다. * @param {string} text - 줄바꿈 구분 입력 * @returns {Object} 정규화된 스팸 필터 설정 값 */ export const parseSpamBlockedUsernamesText = (text) => ({ signupBlockedUsernames: parseSignupBlockedUsernamesFromText(text) })