File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
export const WORD_MAX_LENGTH = 100;
export type BannedWordFormErrors = Partial<Record<'word', string>>;
export type BannedWordFormState =
| { status: 'idle' }
| { status: 'error'; message?: string; errors?: BannedWordFormErrors }
| { status: 'success' };
export const INITIAL_BANNED_WORD_FORM_STATE: BannedWordFormState = {
status: 'idle',
};
/** 기획 SYS_WRD_002 ② — 중복은 백엔드가 판정하고 이 문구로 알린다. */
export const DUPLICATE_WORD_MESSAGE = '중복된 키워드입니다.';
export const REQUIRED_MESSAGE = '필수입력사항을 입력하세요.';
type ValidationResult =
| { ok: true; value: string }
| { ok: false; errors: BannedWordFormErrors };
export function validateBannedWord(raw: string): ValidationResult {
const value = raw.trim();
if (!value) {
return { ok: false, errors: { word: REQUIRED_MESSAGE } };
}
if (value.length > WORD_MAX_LENGTH) {
return {
ok: false,
errors: { word: `키워드는 ${WORD_MAX_LENGTH}자 이내로 입력해 주세요.` },
};
}
return { ok: true, value };
}
export type ExcelUploadResult = {
successCount: number;
errors: string[];
};