fix: batch size validation

This commit is contained in:
rustmailer
2026-01-28 20:39:47 +08:00
parent a0d8d069c0
commit d63b1e0d7c
20 changed files with 78 additions and 24 deletions
+2 -2
View File
@@ -39,7 +39,7 @@ pub struct AccountCreateRequest {
pub folder_limit: Option<u32>,
#[oai(validator(minimum(value = "10")))]
pub sync_interval_min: Option<i64>,
#[oai(validator(minimum(value = "30"), maximum(value = "200")))]
#[oai(validator(minimum(value = "10"), maximum(value = "200")))]
pub sync_batch_size: Option<u32>,
pub use_proxy: Option<u64>,
pub use_dangerous: bool,
@@ -145,7 +145,7 @@ pub struct AccountUpdateRequest {
/// Incremental sync interval (seconds)
#[oai(validator(minimum(value = "10")))]
pub sync_interval_min: Option<i64>,
#[oai(validator(minimum(value = "30"), maximum(value = "200")))]
#[oai(validator(minimum(value = "10"), maximum(value = "200")))]
pub sync_batch_size: Option<u32>,
/// Optional proxy ID for establishing the connection to external APIs (e.g., Gmail, Outlook).
/// - If `None` or not provided, the client will connect directly to the API server.
@@ -132,10 +132,10 @@ const getAccountSchema = (isEdit: boolean, t: (key: string) => string) =>
.optional(),
sync_interval_min: z.number({ invalid_type_error: t('validation.incrementalSyncMustBeNumber') }).int().min(10, { message: t('validation.incrementalSyncMustBeAtLeast10') }),
sync_batch_size: z
.number({ invalid_type_error: t('validation.incrementalSyncMustBeNumber') })
.number({ invalid_type_error: t('validation.singleRequestBatchSizeMustBeNumber') })
.int()
.min(30, { message: t('validation.incrementalSyncMustBeAtLeast10') })
.max(200, { message: t('validation.incrementalSyncMustBeAtLeast10') }),
.min(10, { message: t('validation.singleRequestBatchSizeTooSmall') })
.max(200, { message: t('validation.singleRequestBatchSizeTooLarge') }),
});
type Step = {
@@ -180,7 +180,7 @@ const defaultValues: Account = {
date_before: undefined,
folder_limit: undefined,
sync_interval_min: 10,
sync_batch_size: 50,
sync_batch_size: 30,
};
const emptyImap: ImapConfig = {
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "يجب أن يكون حد المجلد 100 على الأقل",
"incrementalSyncMustBeNumber": "يجب أن يكون فاصل المزامنة التزايدية رقمًا",
"incrementalSyncMustBeAtLeast10": "يجب أن يكون فاصل المزامنة التزايدية 10 دقائق على الأقل",
"pleaseEnterUsernameOrEmail": "الرجاء إدخال اسم المستخدم أو البريد الإلكتروني الخاص بك"
"pleaseEnterUsernameOrEmail": "الرجاء إدخال اسم المستخدم أو البريد الإلكتروني الخاص بك",
"singleRequestBatchSizeMustBeNumber": "يجب أن يكون حجم الدُفعة رقماً",
"singleRequestBatchSizeTooSmall": "يجب أن يكون حجم الدُفعة على الأقل 10",
"singleRequestBatchSizeTooLarge": "يجب أن يكون حجم الدُفعة على الأكثر 200"
},
"table": {
"noResults": "لم يتم العثور على نتائج",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Mappegrænse skal være mindst 100",
"incrementalSyncMustBeNumber": "Inkrementelt synkroniseringsinterval skal være et tal",
"incrementalSyncMustBeAtLeast10": "Inkrementelt synkroniseringsinterval skal være mindst 10 minutter",
"pleaseEnterUsernameOrEmail": "Indtast dit brugernavn eller din e-mailadresse"
"pleaseEnterUsernameOrEmail": "Indtast dit brugernavn eller din e-mailadresse",
"singleRequestBatchSizeMustBeNumber": "Batchstørrelse skal være et tal",
"singleRequestBatchSizeTooSmall": "Batchstørrelse skal være mindst 10",
"singleRequestBatchSizeTooLarge": "Batchstørrelse skal være højst 200"
},
"table": {
"noResults": "Ingen resultater fundet",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Das Ordnerlimit muss mindestens 100 betragen",
"incrementalSyncMustBeNumber": "Das inkrementelle Synchronisierungsintervall muss eine Zahl sein",
"incrementalSyncMustBeAtLeast10": "Das inkrementelle Synchronisierungsintervall muss mindestens 10 Minuten betragen",
"pleaseEnterUsernameOrEmail": "Bitte geben Sie Ihren Benutzernamen oder Ihre E-Mail-Adresse ein"
"pleaseEnterUsernameOrEmail": "Bitte geben Sie Ihren Benutzernamen oder Ihre E-Mail-Adresse ein",
"singleRequestBatchSizeMustBeNumber": "Die Stapelgröße muss eine Zahl sein",
"singleRequestBatchSizeTooSmall": "Die Stapelgröße muss mindestens 10 sein",
"singleRequestBatchSizeTooLarge": "Die Stapelgröße darf höchstens 200 sein"
},
"table": {
"noResults": "Keine Ergebnisse gefunden",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Folder limit must be at least 100",
"incrementalSyncMustBeNumber": "Incremental sync interval must be a number",
"incrementalSyncMustBeAtLeast10": "Incremental sync interval must be at least 10 minutes",
"pleaseEnterUsernameOrEmail": "Please enter your username or email"
"pleaseEnterUsernameOrEmail": "Please enter your username or email",
"singleRequestBatchSizeMustBeNumber": "Batch size must be a number",
"singleRequestBatchSizeTooSmall": "Batch size must be at least 10",
"singleRequestBatchSizeTooLarge": "Batch size must be at most 200"
},
"table": {
"noResults": "No results found",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "El límite de carpetas debe ser de al menos 100",
"incrementalSyncMustBeNumber": "El intervalo de sincronización incremental debe ser un número",
"incrementalSyncMustBeAtLeast10": "El intervalo de sincronización incremental debe ser de al menos 10 minutos",
"pleaseEnterUsernameOrEmail": "Por favor, introduzca su nombre de usuario o correo electrónico"
"pleaseEnterUsernameOrEmail": "Por favor, introduzca su nombre de usuario o correo electrónico",
"singleRequestBatchSizeMustBeNumber": "El tamaño del lote debe ser un número",
"singleRequestBatchSizeTooSmall": "El tamaño del lote debe ser al menos 10",
"singleRequestBatchSizeTooLarge": "El tamaño del lote debe ser como máximo 200"
},
"table": {
"noResults": "No se encontraron resultados",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Kansiorajan on oltava vähintään 100",
"incrementalSyncMustBeNumber": "Lisäävän synkronoinnin välin on oltava numero",
"incrementalSyncMustBeAtLeast10": "Lisäävän synkronoinnin välin on oltava vähintään 10 minuuttia",
"pleaseEnterUsernameOrEmail": "Ole hyvä ja anna käyttäjänimesi tai sähköpostiosoitteesi"
"pleaseEnterUsernameOrEmail": "Ole hyvä ja anna käyttäjänimesi tai sähköpostiosoitteesi",
"singleRequestBatchSizeMustBeNumber": "Eräkoko tulee olla numero",
"singleRequestBatchSizeTooSmall": "Eräkoko tulee olla vähintään 10",
"singleRequestBatchSizeTooLarge": "Eräkoko tulee olla enintään 200"
},
"table": {
"noResults": "Ei tuloksia löydy",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "La limite de dossiers doit être d'au moins 100",
"incrementalSyncMustBeNumber": "L'intervalle de synchronisation incrémentielle doit être un nombre",
"incrementalSyncMustBeAtLeast10": "L'intervalle de synchronisation incrémentielle doit être d'au moins 10 minutes",
"pleaseEnterUsernameOrEmail": "Veuillez entrer votre nom d'utilisateur ou votre courriel"
"pleaseEnterUsernameOrEmail": "Veuillez entrer votre nom d'utilisateur ou votre courriel",
"singleRequestBatchSizeMustBeNumber": "La taille du lot doit être un nombre",
"singleRequestBatchSizeTooSmall": "La taille du lot doit être au moins 10",
"singleRequestBatchSizeTooLarge": "La taille du lot doit être au plus 200"
},
"table": {
"noResults": "Aucun résultat trouvé",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Il limite di cartelle deve essere almeno 100",
"incrementalSyncMustBeNumber": "L'intervallo di sincronizzazione incrementale deve essere un numero",
"incrementalSyncMustBeAtLeast10": "L'intervallo di sincronizzazione incrementale deve essere di almeno 10 minuti",
"pleaseEnterUsernameOrEmail": "Inserisci il tuo nome utente o email"
"pleaseEnterUsernameOrEmail": "Inserisci il tuo nome utente o email",
"singleRequestBatchSizeMustBeNumber": "La dimensione del batch deve essere un numero",
"singleRequestBatchSizeTooSmall": "La dimensione del batch deve essere almeno 10",
"singleRequestBatchSizeTooLarge": "La dimensione del batch deve essere al massimo 200"
},
"table": {
"noResults": "Nessun risultato trovato",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "フォルダーの制限は100以上である必要があります",
"incrementalSyncMustBeNumber": "増分同期間隔は数値である必要があります",
"incrementalSyncMustBeAtLeast10": "増分同期間隔は10分以上である必要があります",
"pleaseEnterUsernameOrEmail": "ユーザー名またはメールアドレスを入力してください"
"pleaseEnterUsernameOrEmail": "ユーザー名またはメールアドレスを入力してください",
"singleRequestBatchSizeMustBeNumber": "バッチサイズは数値でなければなりません",
"singleRequestBatchSizeTooSmall": "バッチサイズは最低でも10でなければなりません",
"singleRequestBatchSizeTooLarge": "バッチサイズは最大でも200でなければなりません"
},
"table": {
"noResults": "結果が見つかりませんでした",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "폴더 제한은 최소 100 이상이어야 합니다",
"incrementalSyncMustBeNumber": "증분 동기화 간격은 숫자여야 합니다",
"incrementalSyncMustBeAtLeast10": "증분 동기화 간격은 최소 10분 이상이어야 합니다",
"pleaseEnterUsernameOrEmail": "사용자 이름 또는 이메일을 입력하세요"
"pleaseEnterUsernameOrEmail": "사용자 이름 또는 이메일을 입력하세요",
"singleRequestBatchSizeMustBeNumber": "배치 크기는 숫자여야 합니다",
"singleRequestBatchSizeTooSmall": "배치 크기는 최소 10이어야 합니다",
"singleRequestBatchSizeTooLarge": "배치 크기는 최대 200이어야 합니다"
},
"table": {
"noResults": "검색 결과 없음",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Mappenlimiet moet ten minste 100 zijn",
"incrementalSyncMustBeNumber": "Incrementaal sync interval moet een nummer zijn",
"incrementalSyncMustBeAtLeast10": "Incrementaal sync interval moet ten minste 10 minuten zijn",
"pleaseEnterUsernameOrEmail": "Voer alstublieft uw gebruikersnaam of e-mailadres in"
"pleaseEnterUsernameOrEmail": "Voer alstublieft uw gebruikersnaam of e-mailadres in",
"singleRequestBatchSizeMustBeNumber": "Batchgrootte moet een nummer zijn",
"singleRequestBatchSizeTooSmall": "Batchgrootte moet ten minste 10 zijn",
"singleRequestBatchSizeTooLarge": "Batchgrootte moet hoogstens 200 zijn"
},
"table": {
"noResults": "Geen resultaten gevonden",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Mappegrense må være minst 100",
"incrementalSyncMustBeNumber": "Intervall for inkrementell synkronisering må være et tall",
"incrementalSyncMustBeAtLeast10": "Intervall for inkrementell synkronisering må være minst 10 minutter",
"pleaseEnterUsernameOrEmail": "Skriv inn brukernavn eller e-postadresse"
"pleaseEnterUsernameOrEmail": "Skriv inn brukernavn eller e-postadresse",
"singleRequestBatchSizeMustBeNumber": "Batchstørrelse må være et tall",
"singleRequestBatchSizeTooSmall": "Batchstørrelse må være minst 10",
"singleRequestBatchSizeTooLarge": "Batchstørrelse må være maksimalt 200"
},
"table": {
"noResults": "Ingen resultater funnet",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Limit folderów musi być liczbą nie mniejszą niż 100",
"incrementalSyncMustBeNumber": "Przyrostowy interwał synchronizacji musi być liczbą",
"incrementalSyncMustBeAtLeast10": "Przyrostowy interwał synchronizacji musi wynosić co najmniej 10 minut",
"pleaseEnterUsernameOrEmail": "Proszę podać nazwę użytkownika lub adres e-mail"
"pleaseEnterUsernameOrEmail": "Proszę podać nazwę użytkownika lub adres e-mail",
"singleRequestBatchSizeMustBeNumber": "Rozmiar partii musi być liczbą",
"singleRequestBatchSizeTooSmall": "Rozmiar partii musi wynosić co najmniej 10",
"singleRequestBatchSizeTooLarge": "Rozmiar partii może wynosić maksymalnie 200"
},
"table": {
"noResults": "Brak wyników",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "O Limite de Pasta deve ser pelo menos 100",
"incrementalSyncMustBeNumber": "O Intervalo de Sincronização Incremental deve ser um número",
"incrementalSyncMustBeAtLeast10": "O Intervalo de Sincronização Incremental deve ser de pelo menos 10 minutos",
"pleaseEnterUsernameOrEmail": "Por favor, digite seu nome de usuário ou e-mail"
"pleaseEnterUsernameOrEmail": "Por favor, digite seu nome de usuário ou e-mail",
"singleRequestBatchSizeMustBeNumber": "O tamanho do lote deve ser um número",
"singleRequestBatchSizeTooSmall": "O tamanho do lote deve ser pelo menos 10",
"singleRequestBatchSizeTooLarge": "O tamanho do lote deve ser no máximo 200"
},
"table": {
"noResults": "Nenhum resultado encontrado",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Лимит папки должен быть не менее 100",
"incrementalSyncMustBeNumber": "Интервал инкрементальной синхронизации должен быть числом",
"incrementalSyncMustBeAtLeast10": "Интервал инкрементальной синхронизации должен быть не менее 10 минут",
"pleaseEnterUsernameOrEmail": "Пожалуйста, введите ваше имя пользователя или адрес электронной почты"
"pleaseEnterUsernameOrEmail": "Пожалуйста, введите ваше имя пользователя или адрес электронной почты",
"singleRequestBatchSizeMustBeNumber": "Размер пакета должен быть числом",
"singleRequestBatchSizeTooSmall": "Размер пакета должен быть не менее 10",
"singleRequestBatchSizeTooLarge": "Размер пакета должен быть не более 200"
},
"table": {
"noResults": "Результатов не найдено",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "Mappgräns måste vara minst 100",
"incrementalSyncMustBeNumber": "Intervall för inkrementell synkronisering måste vara ett tal",
"incrementalSyncMustBeAtLeast10": "Intervall för inkrementell synkronisering måste vara minst 10 minuter",
"pleaseEnterUsernameOrEmail": "Vänligen ange ditt användarnamn eller din e-postadress"
"pleaseEnterUsernameOrEmail": "Vänligen ange ditt användarnamn eller din e-postadress",
"singleRequestBatchSizeMustBeNumber": "Batchstorlek måste vara ett tal",
"singleRequestBatchSizeTooSmall": "Batchstorlek måste vara minst 10",
"singleRequestBatchSizeTooLarge": "Batchstorlek måste vara högst 200"
},
"table": {
"noResults": "Inga resultat hittades",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "資料夾限制必須至少為 100",
"incrementalSyncMustBeNumber": "增量同步間隔必須是數字",
"incrementalSyncMustBeAtLeast10": "增量同步間隔必須至少為 10 分鐘",
"pleaseEnterUsernameOrEmail": "請輸入您的使用者名稱或電子郵件"
"pleaseEnterUsernameOrEmail": "請輸入您的使用者名稱或電子郵件",
"singleRequestBatchSizeMustBeNumber": "批次大小必須是數字",
"singleRequestBatchSizeTooSmall": "批次大小必須至少為10",
"singleRequestBatchSizeTooLarge": "批次大小必須最多為200"
},
"table": {
"noResults": "查無結果",
+4 -1
View File
@@ -938,7 +938,10 @@
"folderLimitMustBeAtLeast100": "文件夹限制必须至少为 100",
"incrementalSyncMustBeNumber": "增量同步间隔必须是数字",
"incrementalSyncMustBeAtLeast10": "增量同步间隔必须至少为 10 分钟",
"pleaseEnterUsernameOrEmail": "请输入您的用户名或邮箱"
"pleaseEnterUsernameOrEmail": "请输入您的用户名或邮箱",
"singleRequestBatchSizeMustBeNumber": "批大小必须是数字",
"singleRequestBatchSizeTooSmall": "批大小必须至少为10",
"singleRequestBatchSizeTooLarge": "批大小必须最多为200"
},
"table": {
"noResults": "未找到结果",