fix(admin): не блокировать сохранение настроек недоступным уровнем AI
Валидация ai_level срабатывала на любой PUT /admin/settings, включая случаи, когда фронт отправлял уже сохранённый (не изменённый) уровень — на слабом железе это намертво блокировало правку любых других настроек. Бэкенд теперь сравнивает patch.ai_level с текущим значением и проверяет доступность только при фактической смене уровня; фронт дополнительно отправляет в PUT только реально изменённые поля.
This commit is contained in:
@@ -95,18 +95,34 @@ function AdminSettingsForm({ data }: { data: SettingsOut }) {
|
||||
})
|
||||
|
||||
function handleSave() {
|
||||
mutation.mutate({
|
||||
chat_enabled: chatEnabled,
|
||||
transcription_enabled: aiEnabled,
|
||||
ai_level: aiLevel,
|
||||
summary_recipients: recipients,
|
||||
display_timezone: timezone.trim(),
|
||||
registration_team_choice: teamChoiceEnabled,
|
||||
registration_email_domain_enabled: domainVerificationEnabled,
|
||||
registration_email_domain: emailDomain.trim() || null,
|
||||
contact_email_enabled: contactEmailEnabled,
|
||||
contact_email: contactEmail.trim() || null,
|
||||
})
|
||||
// Отправляем только реально изменённые поля (`SettingsUpdateIn` — набор
|
||||
// опциональных полей именно для этого): иначе, например, ai_level
|
||||
// уходил бы в PUT нетронутым при каждом сохранении и на слабом железе
|
||||
// валился бы в 400, блокируя правку вообще любой другой настройки.
|
||||
const payload: SettingsUpdateIn = {}
|
||||
if (chatEnabled !== data.chat_enabled) payload.chat_enabled = chatEnabled
|
||||
if (aiEnabled !== data.transcription_enabled) payload.transcription_enabled = aiEnabled
|
||||
if (aiLevel !== data.ai_level) payload.ai_level = aiLevel
|
||||
if (recipients !== data.summary_recipients) payload.summary_recipients = recipients
|
||||
if (timezone.trim() !== data.display_timezone) payload.display_timezone = timezone.trim()
|
||||
if (teamChoiceEnabled !== data.registration_team_choice) {
|
||||
payload.registration_team_choice = teamChoiceEnabled
|
||||
}
|
||||
if (domainVerificationEnabled !== data.registration_email_domain_enabled) {
|
||||
payload.registration_email_domain_enabled = domainVerificationEnabled
|
||||
}
|
||||
const trimmedDomain = emailDomain.trim() || null
|
||||
if (trimmedDomain !== (data.registration_email_domain ?? null)) {
|
||||
payload.registration_email_domain = trimmedDomain
|
||||
}
|
||||
if (contactEmailEnabled !== data.contact_email_enabled) {
|
||||
payload.contact_email_enabled = contactEmailEnabled
|
||||
}
|
||||
const trimmedContactEmail = contactEmail.trim() || null
|
||||
if (trimmedContactEmail !== (data.contact_email ?? null)) {
|
||||
payload.contact_email = trimmedContactEmail
|
||||
}
|
||||
mutation.mutate(payload)
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user